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

Weitere ähnliche Inhalte

Was ist angesagt?

Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»e-Legion
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmYandex
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQAFest
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9Technopark
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?SQALab
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.jsMad Devs
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...sqadays8
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 

Was ist angesagt? (20)

Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npm
 
QA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профиQA Fest 2019. Андрей Солнцев. Selenide для профи
QA Fest 2019. Андрей Солнцев. Selenide для профи
 
Web весна 2012 лекция 9
Web весна 2012 лекция 9Web весна 2012 лекция 9
Web весна 2012 лекция 9
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
 
Javascript
JavascriptJavascript
Javascript
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
Надежда Серкова -- Автоматическая генерация Perl скриптов для тестирования си...
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 

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

Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...tfmailru
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumSQALab
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчётыbearoff
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Тестирование spring boot приложений
Тестирование spring boot приложенийТестирование spring boot приложений
Тестирование spring boot приложенийSemyonKirekov
 

Ähnlich wie Selenium: приемы работы (20)

Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Unit тестирование
Unit тестированиеUnit тестирование
Unit тестирование
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
course js day 4
course js day 4course js day 4
course js day 4
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчёты
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Yii development
Yii developmentYii development
Yii development
 
Тестирование spring boot приложений
Тестирование spring boot приложенийТестирование spring boot приложений
Тестирование spring boot приложений
 

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

  • 1. Selenium: приемы работы Сташевский Павел, 2010
  • 2. План мероприятия 1. Работа с AJAX-интерфейсами 2. WYSWYG 3. Файлы: загрузка и скачивание
  • 3. Ожидание событий Зачем ждать? Selenium RC не отработает на том интерфейсе, которого нет Имитируем действия пользователя Что ждать? Клиентский JS AJAX Не всегда отработает Время тестов растет sleep(5);
  • 4. Ожидание событий while(!isElementPresent(‘locator’)) { sleep(1); } Бесконечный цикл Это не наши методы!!!
  • 5. Нормальное ожидание события public function waitElementExist($sLocator, $iTimeout = null) { $iTimeout = (isset($iTimeout) ? $iTimeout : 180000) / 1000; $iStartTime = time(); while (!$this-isElementPresent($sLocator)) { sleep(1); if (time() - $iStartTime > $iTimeout) { return false; } } return true; } Это наши методы!!!
  • 6. Работаем с popup openWindow( string $url, string $windowID) – открsть всплывающее окно selectWindow( string $windowID) – переключится на всплывающее окно waitForPopUp( string $windowID, string $timeout) – ждать, пока попап появится
  • 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 не все может