SlideShare a Scribd company logo
1 of 34
Автоматизация Flex-приложений с помощью Selenium RC Игорь Хрол
Немного о себе Игорь Хрол Специализируюсь на автоматизации тестирования с 2006года Инструменты: Selenium, HP QTP, Watir, TestComplete, Jmeter E-mail: khroliz@gmail.com
Что будет в докладе? Немного о проекте Какой стоял выбор для автоматизации Flex’a? Сравнение инструментов Выбранное решение и архитектура Tips&Tricks Текущие результаты работы
О проекте www.atg.com (с января 2011-го – часть Oracle) Середина 2009-го – вся UI-автоматизацияна HP QTP Конец 2009-го – первые версии приложения с Flexи решение начать автоматизацию на Selenium
Варианты Flex-автоматизации HP QTP +  Flex QTP add-in Selenium-Flex API + Selenium RC + Java FunFX + Watir + Ruby
Результаты оценки – скорость работы (JSP) Цикличное создание-удаление 100 сущностей в JSP Время выполнения сценария в минутах
Результаты оценки – скорость работы (Flex) Цикличное создание-удаление 100 сущностей вo Flex Время выполнения сценария в минутах QTP не поддерживает Firefox с Flex
Результаты оценки – скорость работы (Flex) Цикличная навигация по Flex – 100 раз Время выполнения сценария в минутах QTP не поддерживает Firefox с Flex
Недостатки QTP Нестабильная работа Распознавание UI-объектов с учётом практически всей иерархии объектов Отсутствие удобного языка и средств разработки
Схема работы Selenium Flex API Selenium RC Код тест-кейса (С#, Java, Python, Ruby и другое) HTTP Браузер Selenium Core user-extensions.js Тестируемое приложение ExternalInterface Flex
Поддержка различных браузеров Нужна ли вообще? Различные версии IE Google Chrome, Safari, Opera… Ну и конечно Firefox
Поддержка различных браузеров – модификации для Firefox Код тест-кейса (С#, Java, Python, Ruby и другое) Selenium RC HTTP Браузер Selenium Core user-extensions.js Тестируемое приложение ExternalInterface Bridge Flex
Структура фреймворка - локаторы Подобие ХPath, но не совсем Общая структура: property:value property1:value1,property2:value2 property1:value1/property2:value2 property1.subproperty11:value11,property2:value2/property3.subproperty31:value31 Примеры…
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText
Пример локатора id:merchandising.manageCommerceAssets0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel
Пример локатора id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel
Структура фреймворка Соотношение:  класс из Flex’a↔класс из Java-фреймворка
Структура фреймворка Java-класс инициализируется: своим локатором локатором контейнера
Структура фреймворка «Склейка» локаторов на уровне базового конструктора
Структура фреймворка - синхронизация При обращении к Java-объекту – ждём соответствующего объекта на UI Синхронизации нет???
Tips&Tricks – FlexSpy Особенности: Запускается внутри флеш-объекта (может вызывать побочные эффекты) Лучше добавить его вызов на какую-нибудь комбинацию клавиш
FlexSpy
Обнаружение свойств объектов FlashInspector Плагин к Firefox Требует: Установки Firebug Debug-версию FlashPlayer’а
Сложности Альтернативная разработка  Selenium Flex API своими силами Улучшена система локаторов Исправлено несколько дефектов Разработаны методы для работы с DataGrid’ами Расширено количество вызываемых событий Надеемся скоро это внести в виде своей доли в проект sfapi
Сложности «Нативные» нажатия на кнопки – например для закачивания/скачивания файлов Решение: AutoIT Создание выполняемых exe-файлов Использование DLL через JNA
Интеграция с существующим кодом на QTP Цель: выполнение действий во Flex-еиз QTP с помощью существующего Java-кода Алгоритм: Запуск браузера из Selenium’a Сохранение сессии Работа с отрытым браузером из QTP Вызов отдельных java-процессов с передачей в них сессии
Результаты ~400k строк кода ~4500 java-классов (~3500 автоматизированных тест кейсов) Около 5 суток работы тестов Расширяемое решение
Вопросы

More Related Content

Similar to автоматизация Flex приложений с помощью selenium rc

04 practical symfony 4дөх
04 practical symfony 4дөх04 practical symfony 4дөх
04 practical symfony 4дөхtuvshinmgl
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSEmerson Macedo
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios WebHacking Bolivia
 
Lecture1
Lecture1Lecture1
Lecture1orgil
 
Formulier extensies voor Joomla - Tijs Hensen #jd11nl
Formulier extensies voor Joomla - Tijs Hensen #jd11nlFormulier extensies voor Joomla - Tijs Hensen #jd11nl
Formulier extensies voor Joomla - Tijs Hensen #jd11nlJoomla!Days Netherlands
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest
 
Java JNI 编程进阶
Java JNI 编程进阶     Java JNI 编程进阶
Java JNI 编程进阶 wensheng wei
 
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...Codemotion
 
Glass fishjavaee6directseminar
Glass fishjavaee6directseminarGlass fishjavaee6directseminar
Glass fishjavaee6directseminarYoshio Terada
 
Lecture exch2k7 21_10_08 - copy
Lecture exch2k7 21_10_08 - copyLecture exch2k7 21_10_08 - copy
Lecture exch2k7 21_10_08 - copyArcobaleno Nesta
 
Qt编程介绍
Qt编程介绍Qt编程介绍
Qt编程介绍easychen
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesDr. Spock
 
Gelecex - Maven ile Akilli Projeler
Gelecex - Maven ile Akilli ProjelerGelecex - Maven ile Akilli Projeler
Gelecex - Maven ile Akilli ProjelerMert Çalışkan
 
Core rest edgarsilva_v1
Core rest edgarsilva_v1Core rest edgarsilva_v1
Core rest edgarsilva_v1Edgar Silva
 
夜宴14期《Google跑了》
夜宴14期《Google跑了》夜宴14期《Google跑了》
夜宴14期《Google跑了》Koubei Banquet
 
第2章 asp
第2章  asp第2章  asp
第2章 aspbillao
 
Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)T K
 

Similar to автоматизация Flex приложений с помощью selenium rc (20)

FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
 
Jetty Introduction
Jetty IntroductionJetty Introduction
Jetty Introduction
 
04 practical symfony 4дөх
04 practical symfony 4дөх04 practical symfony 4дөх
04 practical symfony 4дөх
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 
Seguridad en Servicios Web
Seguridad en Servicios WebSeguridad en Servicios Web
Seguridad en Servicios Web
 
Lecture1
Lecture1Lecture1
Lecture1
 
Formulier extensies voor Joomla - Tijs Hensen #jd11nl
Formulier extensies voor Joomla - Tijs Hensen #jd11nlFormulier extensies voor Joomla - Tijs Hensen #jd11nl
Formulier extensies voor Joomla - Tijs Hensen #jd11nl
 
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиковCodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
 
Java JNI 编程进阶
Java JNI 编程进阶     Java JNI 编程进阶
Java JNI 编程进阶
 
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...
Monitorare le applicazioni: costruire un agent plugin per l’introspezione del...
 
Glass fishjavaee6directseminar
Glass fishjavaee6directseminarGlass fishjavaee6directseminar
Glass fishjavaee6directseminar
 
张宴NGINX
张宴NGINX张宴NGINX
张宴NGINX
 
Lecture exch2k7 21_10_08 - copy
Lecture exch2k7 21_10_08 - copyLecture exch2k7 21_10_08 - copy
Lecture exch2k7 21_10_08 - copy
 
Qt编程介绍
Qt编程介绍Qt编程介绍
Qt编程介绍
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
 
Gelecex - Maven ile Akilli Projeler
Gelecex - Maven ile Akilli ProjelerGelecex - Maven ile Akilli Projeler
Gelecex - Maven ile Akilli Projeler
 
Core rest edgarsilva_v1
Core rest edgarsilva_v1Core rest edgarsilva_v1
Core rest edgarsilva_v1
 
夜宴14期《Google跑了》
夜宴14期《Google跑了》夜宴14期《Google跑了》
夜宴14期《Google跑了》
 
第2章 asp
第2章  asp第2章  asp
第2章 asp
 
Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)Architecture related with Zend Framework (Japanese only)
Architecture related with Zend Framework (Japanese only)
 

More from Igor Khrol

SeleniumCamp 2016
SeleniumCamp 2016SeleniumCamp 2016
SeleniumCamp 2016Igor Khrol
 
Agile.by Gathering – 23 января 2016
Agile.by Gathering – 23 января 2016Agile.by Gathering – 23 января 2016
Agile.by Gathering – 23 января 2016Igor Khrol
 
Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Igor Khrol
 
Test Automation Wargaming SQA Days 17
Test Automation Wargaming SQA Days 17Test Automation Wargaming SQA Days 17
Test Automation Wargaming SQA Days 17Igor Khrol
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015Igor Khrol
 
Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in PythonIgor Khrol
 
Increase selenium tests stability via java script
Increase selenium tests stability via java scriptIncrease selenium tests stability via java script
Increase selenium tests stability via java scriptIgor Khrol
 
Why test automation projects are failing
Why test automation projects are failingWhy test automation projects are failing
Why test automation projects are failingIgor Khrol
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...Igor Khrol
 
Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Igor Khrol
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахIgor Khrol
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Igor Khrol
 

More from Igor Khrol (13)

SeleniumCamp 2016
SeleniumCamp 2016SeleniumCamp 2016
SeleniumCamp 2016
 
Agile.by Gathering – 23 января 2016
Agile.by Gathering – 23 января 2016Agile.by Gathering – 23 января 2016
Agile.by Gathering – 23 января 2016
 
Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?
 
Test Automation Wargaming SQA Days 17
Test Automation Wargaming SQA Days 17Test Automation Wargaming SQA Days 17
Test Automation Wargaming SQA Days 17
 
Grail - CodeFest'2015
Grail - CodeFest'2015Grail - CodeFest'2015
Grail - CodeFest'2015
 
Webium: Page Objects in Python
Webium: Page Objects in PythonWebium: Page Objects in Python
Webium: Page Objects in Python
 
Increase selenium tests stability via java script
Increase selenium tests stability via java scriptIncrease selenium tests stability via java script
Increase selenium tests stability via java script
 
Why test automation projects are failing
Why test automation projects are failingWhy test automation projects are failing
Why test automation projects are failing
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
 
Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектах
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?
 

автоматизация Flex приложений с помощью selenium rc

Editor's Notes

  1. Май 2010 по Gartner – в лидерах 2 решения в eCommerce: ATG и IBM WebSphere Commerce.
  2. Watir с FunFX – мы не смогли стабильно автоматизировать эталонный сценарий.Различие технологий Ruby-Java остановило от дальнейшего рассмотрения этого сценария.
  3. История про Firefox + WebSphere.Усилия на поддержку кроссбраузерности сократились на Flex.
  4. Отсутствует синхронизация в первой ветке if’a.
  5. Есть определённая нестабильность.
  6. Пример с «Browse…» - ограничения по Security FlashPlayer’a.
  7. 5-10человеко-лет разработки