SlideShare una empresa de Scribd logo
1 de 32
WebDriver: история одной
       миграции
        Игорь Хрол
О себе
• Игорь Хрол
• Специализируюсь на
  автоматизации тестирования с
  2006 года
• Инструменты:
  – Selenium, HP QTP, Watir,
    TestComplete, Jmeter
• E-mail: khroliz@gmail.com
• www.autotest.by - основатель
О чём говорить будем?
•   Зачем мигрировать?
•   Как запланировать миграцию?
•   Во сколько обойдётся?
•   Как сделать её?
Зачем мигрировать?
Быстрая скорость работы на Internet Explorer
Зачем мигрировать?
• Работа с объектами, а не со строками
• Поддержка иерархии объектов
Зачем мигрировать?
Поддержка community
Зачем мигрировать?
• Поддержка мобильных устройств
  – Android Browser
  – iPhone Browser
• Но для Navite-приложений пока надо
  искать что-то другое
Что было до миграции?
  •   70% кода связано с Selenium Flex API
  •   30% - работа с HTML
  •   500k строк кода
  •   7 дней выполнения тестов


Начало активной работы с HTML –
дополнительная причина
мигрировать
WebdriverBackedSelenium
• Что за зверь?
• Инструмент доступа к API Selenium 1.0
  через объект WebDriver’a
WebdriverBackedSelenium

                   Selenium 2.0

          Selenium 1.0
            Снова Selenium 2.0
WebdriverBackedSelenium
• Почему отказались:
  – Наличие большого объёма JavaScript-вставок
  – Половинчатое решение, которое надо было бы
    всё равно переписывать в будущем
  – Проблемы с CSS-локаторами
Структура работ по миграции
Инициация
 проекта


      Прототипирование


                      Миграция
                   ядра/архитектуры

                                Миграция
                             реиспользуемых
                               компонент

                                       Выполнение и
                                       отладка тестов
Этапы – получить добро начальства
Этапы – прототип
Этапы – переписывание ядра
     Selenium Flex API

Вместо user-extensions.js:
((JavascriptExecutor)webdriver).executeScript(script)


Подходит для других расширений

executeScript(java.lang.String script,
java.lang.Object... args)

Удобно работать с параметрами
Этапы – переписывание ядра
BaseUIElement class (Selenium 1.0)




BaseWebUIElement class (Selenium 1.0)
Этапы – переписывание ядра
BaseWebUIElement class (WebDriver)
Этапы – переписывание ядра
BaseWebUIElement class
Frames
Теперь нужно обязательно выбирать
Этапы – переписывание
      реиспользуемых компонент
Selenium 1.0




WebDriver
Этапы – переписывание
      реиспользуемых компонент


                        Selenium 1.0




WebDriver
Этапы – refactoring
Этапы – run & debug
Цель:
• Выполнить все тесты, чтобы убедиться, что
  миграция закончена
Как влияет на текущие задачи?
• Миграция проводилась в
  отдельной ветке в системе
  контроля версий
• На первых нескольких этапах
  был вовлечён только один
  человек (Test Automation
  Architect)
• Работы велись между фазами
  проекта
Как влияет на текущие задачи?
• Итого: на использование
  автоматизации
  тестирования миграция
  не повлияла
Как планировали?
                                                      «Заточка» ядра и
Всего компонент
                      Всего тестов                         всякие
 (java-классов)
                                                       неприятности




Промигрировали      Время на         Промигрировали     Промигрировали
  компонент        компоненты            тестов             тестов
Сколько времени ушло?
50% команды (7-10 человек)        Архитектор
                                   2 месяца
         1 месяц




                                   Ядро и основные
                                   компоненты

                                   Большинство
                                   компонент и тесты


       Всего: около 10-12 человеко-месяцев
Tips&Tricks
Native Clicks
http://code.google.com/p/selenium/issues/detail?id=2700
http://code.google.com/p/selenium/issues/detail?id=2950
Ввод текста в поля
• Selenium 1.0: просто выставлялся
• Webdriver: clear() – не всегда работает
Выводы
• Переход на WebDriver не страшен
• В миграции помогает хорошо
  сформированных до этого фреймворк
• В WebDriver еще есть проблемы, но они
  быстро исправляются
Вопросы

Más contenido relacionado

La actualidad más candente

Web Tech
Web TechWeb Tech
Web TechRupsee
 
MYELOPATHY CASE PRESENTATION
MYELOPATHY CASE PRESENTATION MYELOPATHY CASE PRESENTATION
MYELOPATHY CASE PRESENTATION Kamal Sharma
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM patternNAVER Engineering
 
a case of lower motor neuron facial nerve palsy
a case of lower motor neuron facial nerve palsya case of lower motor neuron facial nerve palsy
a case of lower motor neuron facial nerve palsySamten Dorji
 
React Router: React Meetup XXL
React Router: React Meetup XXLReact Router: React Meetup XXL
React Router: React Meetup XXLRob Gietema
 
FYBSC IT Web Programming Unit IV PHP and MySQL
FYBSC IT Web Programming Unit IV  PHP and MySQLFYBSC IT Web Programming Unit IV  PHP and MySQL
FYBSC IT Web Programming Unit IV PHP and MySQLArti Parab Academics
 
Web development using javaScript, React js, Node js, HTML, CSS and SQL
Web development using javaScript, React js, Node js, HTML, CSS and SQLWeb development using javaScript, React js, Node js, HTML, CSS and SQL
Web development using javaScript, React js, Node js, HTML, CSS and SQLJayant Surana
 
JavaScript - Chapter 14 - Form Handling
 JavaScript - Chapter 14 - Form Handling   JavaScript - Chapter 14 - Form Handling
JavaScript - Chapter 14 - Form Handling WebStackAcademy
 
The Php Life Cycle
The Php Life CycleThe Php Life Cycle
The Php Life CycleXinchen Hui
 
Introduction of Html/css/js
Introduction of Html/css/jsIntroduction of Html/css/js
Introduction of Html/css/jsKnoldus Inc.
 
Paediatrics instruments
Paediatrics instrumentsPaediatrics instruments
Paediatrics instrumentsPratik Kumar
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3 ArezooKmn
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An IntroductionManvendra Singh
 

La actualidad más candente (20)

Javascript
JavascriptJavascript
Javascript
 
DIALYZER / ARTIFICIAL KIDNEY
DIALYZER / ARTIFICIAL KIDNEYDIALYZER / ARTIFICIAL KIDNEY
DIALYZER / ARTIFICIAL KIDNEY
 
Web Tech
Web TechWeb Tech
Web Tech
 
MYELOPATHY CASE PRESENTATION
MYELOPATHY CASE PRESENTATION MYELOPATHY CASE PRESENTATION
MYELOPATHY CASE PRESENTATION
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
 
a case of lower motor neuron facial nerve palsy
a case of lower motor neuron facial nerve palsya case of lower motor neuron facial nerve palsy
a case of lower motor neuron facial nerve palsy
 
React Router: React Meetup XXL
React Router: React Meetup XXLReact Router: React Meetup XXL
React Router: React Meetup XXL
 
BE A SUCCESSFUL MEDICAL STUDENT?
BE A SUCCESSFUL MEDICAL STUDENT?   BE A SUCCESSFUL MEDICAL STUDENT?
BE A SUCCESSFUL MEDICAL STUDENT?
 
FYBSC IT Web Programming Unit IV PHP and MySQL
FYBSC IT Web Programming Unit IV  PHP and MySQLFYBSC IT Web Programming Unit IV  PHP and MySQL
FYBSC IT Web Programming Unit IV PHP and MySQL
 
PROSTHETIC VALVES
PROSTHETIC VALVESPROSTHETIC VALVES
PROSTHETIC VALVES
 
Web development using javaScript, React js, Node js, HTML, CSS and SQL
Web development using javaScript, React js, Node js, HTML, CSS and SQLWeb development using javaScript, React js, Node js, HTML, CSS and SQL
Web development using javaScript, React js, Node js, HTML, CSS and SQL
 
JavaScript - Chapter 14 - Form Handling
 JavaScript - Chapter 14 - Form Handling   JavaScript - Chapter 14 - Form Handling
JavaScript - Chapter 14 - Form Handling
 
The Php Life Cycle
The Php Life CycleThe Php Life Cycle
The Php Life Cycle
 
Introduction of Html/css/js
Introduction of Html/css/jsIntroduction of Html/css/js
Introduction of Html/css/js
 
Semantic web
Semantic webSemantic web
Semantic web
 
Paediatrics instruments
Paediatrics instrumentsPaediatrics instruments
Paediatrics instruments
 
Asp.net web api
Asp.net web apiAsp.net web api
Asp.net web api
 
ReactJS presentation.pptx
ReactJS presentation.pptxReactJS presentation.pptx
ReactJS presentation.pptx
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
JavaScript - An Introduction
JavaScript - An IntroductionJavaScript - An Introduction
JavaScript - An Introduction
 

Similar a Web driver история одной миграции

selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in pythonCOMAQA.BY
 
Как и зачем мы тестируем UI
Как и зачем мы тестируем UIКак и зачем мы тестируем UI
Как и зачем мы тестируем UIVyacheslav Lyalkin
 
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Dakiry
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsCOMAQA.BY
 
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?Mikalai Alimenkou
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?SQALab
 
Каким будет Selenium 3.0 и Selenium 4.0
Каким будет Selenium 3.0 и Selenium 4.0Каким будет Selenium 3.0 и Selenium 4.0
Каким будет Selenium 3.0 и Selenium 4.0SQALab
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGDataArt
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumSQALab
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Andrey Rebrov
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Badoo Development
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAndrey Rebrov
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesMikalai Alimenkou
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 

Similar a Web driver история одной миграции (20)

selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
 
Как и зачем мы тестируем UI
Как и зачем мы тестируем UIКак и зачем мы тестируем UI
Как и зачем мы тестируем UI
 
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
 
Selen framework
Selen frameworkSelen framework
Selen framework
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
 
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытанияCodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
CodeFest 2012. Курносова Т. и Баяндин А. — Selenium2: полевые испытания
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
 
Каким будет Selenium 3.0 и Selenium 4.0
Каким будет Selenium 3.0 и Selenium 4.0Каким будет Selenium 3.0 и Selenium 4.0
Каким будет Selenium 3.0 и Selenium 4.0
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон Семенченко
 
Selenium Begins
Selenium BeginsSelenium Begins
Selenium Begins
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and Thucydides
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 

Más de 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
 
Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Igor Khrol
 
Qa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьQa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьIgor Khrol
 
Повышаем надёжность тестов через JavaScript
Повышаем надёжность тестов через JavaScriptПовышаем надёжность тестов через JavaScript
Повышаем надёжность тестов через JavaScriptIgor 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
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Igor Khrol
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахIgor Khrol
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Igor Khrol
 
автоматизация Flex приложений с помощью selenium rc
автоматизация Flex приложений с помощью selenium rcавтоматизация Flex приложений с помощью selenium rc
автоматизация Flex приложений с помощью selenium rcIgor Khrol
 

Más de Igor Khrol (18)

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
 
Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...Cовременный контроль качества: давай сделаем это по-быстрому...
Cовременный контроль качества: давай сделаем это по-быстрому...
 
Qa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем сутьQa Automation - отбрасываем лишнее и тестируем суть
Qa Automation - отбрасываем лишнее и тестируем суть
 
Повышаем надёжность тестов через JavaScript
Повышаем надёжность тестов через JavaScriptПовышаем надёжность тестов через JavaScript
Повышаем надёжность тестов через JavaScript
 
Why test automation projects are failing
Why test automation projects are failingWhy test automation projects are failing
Why test automation projects are failing
 
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
“Можно ли перевернуть пирамиду?” – автоматизируем тестирование с меньшим числ...
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?Автоматизация Тестирования - Почему умирают проекты?
Автоматизация Тестирования - Почему умирают проекты?
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектах
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?Кому следует писать автоматические тесты?
Кому следует писать автоматические тесты?
 
автоматизация Flex приложений с помощью selenium rc
автоматизация Flex приложений с помощью selenium rcавтоматизация Flex приложений с помощью selenium rc
автоматизация Flex приложений с помощью selenium rc
 

Web driver история одной миграции

Notas del editor

  1. Добрый день,Спасибо вам за присланную первую версию. Ревью осуществляется Николаем Алименковым и Алексеем Солнцевым. Вот наши комментарии и замечания по поводу доклада:Николай: Доклад достаточно интересный. Хотелось бы побольше узнать о самом переходе, о том как шел процесс, на кого легла нагрузка, останавливали ли тестирование пока шел переход на WebDriver, просчитывали ли сколько займет переход, не пришлось ли за это решение бороться с менеджментом. Возможно что-то еще выиграли при переходе?Алексей: С точки зрения тем, которые затрагиваются - доклад однозначно полезный и интересный. Основное замечание - выносите побольше примеров на слайды  (маленькие куски кода, как было и как стало) и старайтесь не использовать на слайдах выражения которые содержать слова "некоторые" (например, про css селекторы). Когда дойдёте до части где будете описывать миграцию - то первым делом покажите общую последовательность работ, а потом расскажите про каждый шаг в отдельности. Неплохо бы всегда давать комментарии по поводу таких вещей как WebdriverBackedSelenium, не все могут знать что это такое.Вы неплохо поработали и мы ждем очередной версии на второй этап ревью 10 февраля.
  2. ЗакатSelenium?
  3. [SG] Кроме того, некоторые вещи на WebdriverBackedSeleniumне работали (у меня не сохранились логи, где мы это обсуждали, но по-моему среди прочего были проблемы с некоторыми CSS-локаторами), иначе говоря, переход WebdriverBackedSeleniumне спасал от необходимости серьезно рефакторить код.
  4. 1.Причины выше.2. Удобный момент.3. Прототип в первую очередь.
  5. Говорю про важность прототипирования.Позволит оценить работу и соответственно запланировать.
  6. [SG] Можно упомянуть, что сам формат JS для webdriverтоже слегка меняется, в частности, исчезают всякие браузерботы и добавляется return.Также можно сказать про то, что в executeScript() можно передавать данные через аргументы, вместо того, чтобы клеить длинную строку JS.В примере наверное какая-то ошибка. Правильно Object result = ((JavascriptExecutor)webdriver).executeScript(script).
  7. [SG] В общем случае неочевидно, для чего этот класс вообще нужен и почему нельзя обойтись без него. При необходимости можно воспользоваться «WebDriver-based framework.doc», к-рый я рассылал.
  8. [SG] В общем случае неочевидно, для чего этот класс вообще нужен и почему нельзя обойтись без него. При необходимости можно воспользоваться «WebDriver-based framework.doc», к-рый я рассылал.
  9. [SG] Можно сказать, что SeleniumRC позволял иногда халявить и не селектать фреймы, благодаря чему в изначальной версии фреймворка их переключение и не было толком реализовано. В WebDriverэто нужно делать всегда; поэтому тесты, работавшие на RC, могут из-за этого перестать находить элементы.
  10. [SG] Здесь несколько под-этапов (считаем, что ядро уже написано):Замена локаторов со строковых на вебдрайверовскиеBy. В некоторых случаях замена типов локаторов (например, с CSS на Xpath, т.к. а) CSS может не работать, more of this later; б) скорость Xpathбольше не такое серьезное ишью). Помогает то, что локаторы в основном лежат в одном месте (UI map).Получаем ряд ошибок в реюзабл компонентах, связанных с неправильными типами аргументов в конструкторах и getInstance(). Заменяем их на исправленные в п.1. Если компонент не включал в себя сложные манипуляции со склеиванием длинных локаторов, исполнением JS напрямую и т.п., то на этом рефакторинг компонента заканчивается.В противном случае исправляются еще и эти ошибки. Полезно, если низкоуровневые вызовы методов DefaultSelenium в основном делались в ядре, т.к. в этом случае в бизнес-компонентах и скриптах не приходится ничего править.
  11. [SG] Здесь несколько под-этапов (считаем, что ядро уже написано):Замена локаторов со строковых на вебдрайверовскиеBy. В некоторых случаях замена типов локаторов (например, с CSS на Xpath, т.к. а) CSS может не работать, more of this later; б) скорость Xpathбольше не такое серьезное ишью). Помогает то, что локаторы в основном лежат в одном месте (UI map).Получаем ряд ошибок в реюзабл компонентах, связанных с неправильными типами аргументов в конструкторах и getInstance(). Заменяем их на исправленные в п.1. Если компонент не включал в себя сложные манипуляции со склеиванием длинных локаторов, исполнением JS напрямую и т.п., то на этом рефакторинг компонента заканчивается.В противном случае исправляются еще и эти ошибки. Полезно, если низкоуровневые вызовы методов DefaultSelenium в основном делались в ядре, т.к. в этом случае в бизнес-компонентах и скриптах не приходится ничего править.
  12. В ходе миграции была возможность улучшить моменты, до которых раньше «не доходили руки».
  13. Фактически – финальный этап, после которого можно было сказать, что миграция завершена.В ходе этого этапа выполнялись все тесты:Сравнивались результаты с результатами на Selenium 1.0Исправлялось, если возникало что-то «специфическое»
  14. Почему «около»? После окончания миграции при написании новых тестов всё еще всплывали новые проблемы, решение которых можно отнести к миграции.
  15. [SG] Ишью №2700 только частично описывает проблему. Базовая концепция WebDriverзаключается в том, чтобы точнее эмулировать действия пользователя; в частности, применительно к клику это означает нажатие мышью в определенной точке экрана, а не вызов некоторого JS-метода на некотором объекте. Однако WebDriverне всегда корректно рассчитывает координаты элемента (к примеру, для IE есть требование использовать 100% зум, но даже при его соблюдении нет гарантии, что координаты будут определены правильно, особенно если на странице есть фреймы (№2950) или сложные комбинации CSS-стилей). При этом далеко не всегда будет брошен какой-либо эксепшн, значительно чаще WebDriverмолча кликает куда-то не туда. В результате, поскольку мы так и не смогли со 100% гарантией определить, когда он сможет корректно кликнуть нативным кликом, а когда нет, пришлось заменить его на джаваскриптовый. Сначала это было сделано только для IE, потом также и для FF. Так что мы здесь отошли от устава и заимплементили уродливый хак.
  16. ввод текста в текстовые поля. Это само по себе не ишью, а просто что-то, что нужно знать. В SeleniumRCтекст в поле обычно сетался, т.е. все, что там было, заменялось на новое значение. WebDriver изображает юзера, а потому просто тайпает в поле то, что ему сказано, не заботясь о его очистке. Существует ф-ияclear(), но если на поле повешен JS, не допускающий пустого значения, то он может мешать исполнению теста (например, если он кидает алерт). Сейчас мы перед вводом выделяем текст при помощи хоткеев (e.sendKeys(Keys.chord(Keys.CONTROL, Keys.HOME));e.sendKeys(Keys.chord(Keys.CONTROL, Keys.SHIFT, Keys.END));). К сожалению, и тут была проблема http://code.google.com/p/selenium/issues/detail?id=2908, но возможно она уже не проявляется.Если будет оставаться время (40 мин на всё про всё…), то еще расскажу про:captureNetworkTraffic[SG] Другие проблемы, помимо нативных кликов и сетевого трафика:переключение из удаляемыхфреймов в топовое окно (из описания бага 13441735: WebDriver sometimes hangs when a project is deployed/deleted via UI. It seems to be related to switching to top frame when source frame disappears during this operation. <…> It occurs more frequently in IE than FF. As it seems, when the page is reloaded/document in a frame is created, there is some interval during which WebDriver should not be allowed to switch to this frame; switch completes successfully, but no further action can be performed within this window (probably because the reference to it becomes broken). However if the switch occurs just a little bit later, everything works properly.).переключение между фреймами из разных доменов (http://code.google.com/p/selenium/issues/detail?id=2863).отсутствие waitForPageToLoad(). Впрочем, она в SeleniumRCтолком все равно не работала. Сейчас мы опрашиваем состояние document.readyState, но его, естественно, надо вызывать отдельно в каждом фрейме; кроме того, это тоже не гарантирует, что после readyState=complete не продолжают исполняться какие-либо скрипты, создающие новые элементы. Так что правильнее всего в каждом случае ждать какого-то конкретного события или элемента, а для этого в вебдрайвере есть соотв. инструменты в виде WebDriverWait и более generic FluentWait.Sizzle-локаторы не всегда работают (http://groups.google.com/group/webdriver/browse_thread/thread/a02d35e57c366e3b). Поскольку локаторы вида "css=a:contains('some text')" все равно не слишком надежны, в вебдрайвере проще от них вообще отказаться и воспользоваться XPath.Можно также сказать, что вебдрайвер поддерживает JS-алерты (если RC их прятал, то вебдрайвер в явном виде выполняет в них какие-то действия:Alert alert = driver.switchTo().alert();alert.getText();alert.accept();)