Selenium: приемы работы

6,533 views
6,312 views

Published on

Приводится описание некоторых приемов для работы с Selenium RC.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,533
On SlideShare
0
From Embeds
0
Number of Embeds
1,589
Actions
Shares
0
Downloads
51
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Selenium: приемы работы

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

×