SlideShare ist ein Scribd-Unternehmen logo
1 von 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 еще есть проблемы, но они
  быстро исправляются
Вопросы

Weitere ähnliche Inhalte

Was ist angesagt?

Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Iakiv Kramarenko
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱Suhyeon Jo
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScriptNascenia IT
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Edureka!
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Younghan Kim
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 Young-Ho Cho
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesLauren Yew
 
ListView RecyclerView.pptx
ListView RecyclerView.pptxListView RecyclerView.pptx
ListView RecyclerView.pptxOmakoiMalang
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Scott Wlaschin
 
Shared preferences
Shared preferencesShared preferences
Shared preferencesSourabh Sahu
 
Angular Dependency Injection
Angular Dependency InjectionAngular Dependency Injection
Angular Dependency InjectionNir Kaufman
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Aaron Gustafson
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 

Was ist angesagt? (20)

Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
Swing
SwingSwing
Swing
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
 
Spring boot
Spring bootSpring boot
Spring boot
 
Php session
Php sessionPhp session
Php session
 
Android Location and Maps
Android Location and MapsAndroid Location and Maps
Android Location and Maps
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin CoroutinesThreading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
Threading Made Easy! A Busy Developer’s Guide to Kotlin Coroutines
 
ListView RecyclerView.pptx
ListView RecyclerView.pptxListView RecyclerView.pptx
ListView RecyclerView.pptx
 
Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013
 
Shared preferences
Shared preferencesShared preferences
Shared preferences
 
Angular Dependency Injection
Angular Dependency InjectionAngular Dependency Injection
Angular Dependency Injection
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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 история одной миграции

Hinweis der Redaktion

  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();)