2. План мероприятия 1. Работа с AJAX-интерфейсами 2. WYSWYG 3. Файлы: загрузка и скачивание
3. Ожидание событий Зачем ждать? Selenium RC не отработает на том интерфейсе, которого нет Имитируем действия пользователя Что ждать? Клиентский JS AJAX Не всегда отработает Время тестов растет sleep(5);
7. WYSWYG Selenium не умеет работать с WYSWYG Приходится писать JS Для тестов, как правило, требуются операции: добавить текст, проверить текст
8. WYSWYG class CSlWYSWYGField{ public function check($mValue) { } public function fill($mValue) { } public function clean() { } } Пишем один раз Используем много раз
9. WYSWYG. Запись public function fill($mValue) { $sScript = "document.getElementById(‘Locator_ifr’). contentDocument.documentElement.childNodes[1].innerHTML = '" . $mValue. "';"; $this->runScript($sScript); }
10. WYSWYG.Проверка значения public function check($mValue) { $sScript = "window.document.getElementById(‘Locator_ifr’). contentDocument.documentElement.childNodes[1]. firstChild.innerHTML;"; $mFormValue = $this->getEval($sScript); return $mFormValue == $mValue ? true : false; } getEval( string $script) - возвращает результат выполнения $ script
11. Работа с файлами Тестирование загрузки файлов (например, аватар) Тестирование скачивания файлов Файлы нужно где-то хранить Использовать сервер, на котором выполняются тесты Использовать FTP-сервер
12. Загрузка файла type( string $locator, string $value) Может использоваться только в “*chrome” В остальных случаях используем имитацию нажатия клавиш клавиатуры с помощью: keyDownNative( string $keycode) - нажать клавишу без отпускания keyUpNative( string $keycode) - отпустить клавишу keyPressNative( string $keycode) – нажать клавишу клавиатуры и отпустить
13. Загрузка файла. Пример public function fill($mValue) { $this->windowFocus(); $this->click(‘locator_input’); sleep(1); foreach(str_split($mValue) as $sChar) { if ($sChar == ':') { $this->keyDownNative(‘16’); $this->keyPressNative(’59’); $this->keyUpNative(‘16’); ... sleep(1); }
14. Скачивание файлов attachFile( string $fieldLocator, string $fileLocator) – скачивает файл $fieldLocatorв указанную директорию $fileLocator public function testDownloadFile() { // что-то делаем до скачивания файла $this->attachFile(‘link=Скачать файл’, ‘S:ile.txt’); //что-то делаем после скачивания файла } Может использоваться только в “*chrome” В других браузерах используем key… Проблема: по-разному во всех браузерах
15. Проблемы Selenium Проблема работы с различным тестовым окружением (тесты + phpunit+ selenium rc + браузеры + ОС) Миф о кроссбраузерности тестов Проблемы с авторизацией open(login:password@url); Selenium не все может