Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Webium: Page Object в Python
Игорь Хрол
QA Automation Team Lead
Wargaming.NET
О себе
• Игорь Хрол
• QA Automation Team Lead в
Wargaming.NET
• 9 лет в отрасли
• Инженер, архитектор,
менеджер, консульта...
Предыстория вопроса
• Не нашлось нужных решений в Python
• Навеяно HtmlElements
(http://htmlelements.qatools.ru/)
Хотелки
• Расширение WebElement’a, а не создание
своей «обёртки»
• Поддержка поиска одного и многих
(find_element и find_e...
Существующие аналоги
Аналоги - Robot Framework Page Objects
https://github.com/ncbi/robotframework-pageobjects
Аналоги - holmium.core
https://github.com/alisaifee/holmium.core
Аналоги - wtframework
https://github.com/wiredrive/wtframework
A что же Webium?
BasePage – базовая
страница
• Можно передавать url страницы
• Если нужно – свой driver
• Описываем стуктуру через Find
Find
• by – как ищем
• value – значение поиска
• Вернёт WebElement в момент обращения
к полю
Пример использования
страницы
text_field и button – обычные WebElement’ы
Типизация
• Наследуемся от WebElement’a
• Доопределяем/переопределяем, что нам надо
Типизация
>> Text to search: webium
Расширенный WebElement с нашими
«хотелками»
Finds
Работает, как Find, но возвращает список
Finds
Поддерживается типизация
В webium.controls
уже есть готовые
компоненты!
Контейнеры
Контейнеры
• Вложенный поиск
• Реиспользование на всех страницах, где
появляется
• Любой типизированный элемент,
наследник...
Контейнеры
Логические контейнеры
is_element_present
• Типовое действие при написании
автотестов
• Каждый делает свой велосипед
• Не так просто сделать корр...
is_element_present
>> True
>> False
is_element_present
• Метод есть у BasePage и у любого
контейнера
• Параметры:
– element_name – имя элемента
– just_in_dom ...
Динамические страницы
Динамические страницы
• Добавление элементов в страницу «на
лету»
• Страница определена во время
выполнения
• Явное задани...
Синхронизация
• https://pypi.python.org/pypi/waiting/
• Обработка WebDriverException
Ну и на десерт напоследок…
Настройки
• webium.settings
– wait_timeout = 30
– default_search_type = By.ID
• local_webium_settings – можно
доопределить...
implicitly_wait
• webium.settings.implicit_timeout
• По умолчанию 30 секунд
• Автоматически выключается в Finds
Управление webdriver’ом
• webium.settings.driver_class
• nose-плагин по закрытию браузера
• Можно работать со своим, перед...
Спасибо!
Q&A
• Ссылки:
– https://github.com/wgnet/webium
– http://wgnet.github.io/webium/
– https://pypi.python.org/pypi/w...
Upcoming SlideShare
Loading in …5
×

Webium: Page Objects in Python

48,905 views

Published on

Out-of-the-box WebDriver API provides two main classes: WebDriver and WebElement. Webium library helps you to extend it to whatever deep UI object structure you need. You can describe basic elements (e.g. Button, Input), construct complex elements (e.g. Calendar) from small pieces and at the end put it all together into your Page Objects. Webium is free and open-source. In my speech I’ll present your how to use it effectively if you want to write Selenium tests in Python.

Published in: Technology

Webium: Page Objects in Python

  1. 1. Webium: Page Object в Python Игорь Хрол QA Automation Team Lead Wargaming.NET
  2. 2. О себе • Игорь Хрол • QA Automation Team Lead в Wargaming.NET • 9 лет в отрасли • Инженер, архитектор, менеджер, консультант, тренер • Постоянный участник SeleniumCamp • www.khroliz.com
  3. 3. Предыстория вопроса • Не нашлось нужных решений в Python • Навеяно HtmlElements (http://htmlelements.qatools.ru/)
  4. 4. Хотелки • Расширение WebElement’a, а не создание своей «обёртки» • Поддержка поиска одного и многих (find_element и find_elements) • Вложенный поиск какой угодно глубины • Ленивая инициализация
  5. 5. Существующие аналоги
  6. 6. Аналоги - Robot Framework Page Objects https://github.com/ncbi/robotframework-pageobjects
  7. 7. Аналоги - holmium.core https://github.com/alisaifee/holmium.core
  8. 8. Аналоги - wtframework https://github.com/wiredrive/wtframework
  9. 9. A что же Webium?
  10. 10. BasePage – базовая страница • Можно передавать url страницы • Если нужно – свой driver • Описываем стуктуру через Find
  11. 11. Find • by – как ищем • value – значение поиска • Вернёт WebElement в момент обращения к полю
  12. 12. Пример использования страницы text_field и button – обычные WebElement’ы
  13. 13. Типизация • Наследуемся от WebElement’a • Доопределяем/переопределяем, что нам надо
  14. 14. Типизация >> Text to search: webium Расширенный WebElement с нашими «хотелками»
  15. 15. Finds Работает, как Find, но возвращает список
  16. 16. Finds Поддерживается типизация В webium.controls уже есть готовые компоненты!
  17. 17. Контейнеры
  18. 18. Контейнеры • Вложенный поиск • Реиспользование на всех страницах, где появляется • Любой типизированный элемент, наследник WebElement
  19. 19. Контейнеры
  20. 20. Логические контейнеры
  21. 21. is_element_present • Типовое действие при написании автотестов • Каждый делает свой велосипед • Не так просто сделать корректно http://seleniumcamp.com/archive/selenium- camp-2013/materials/mistakes-of-beginners/
  22. 22. is_element_present >> True >> False
  23. 23. is_element_present • Метод есть у BasePage и у любого контейнера • Параметры: – element_name – имя элемента – just_in_dom – можно проверять только наличие в DOM’e – timeout – ждать True на протяжении таймаута
  24. 24. Динамические страницы
  25. 25. Динамические страницы • Добавление элементов в страницу «на лету» • Страница определена во время выполнения • Явное задание контекста поиска – параметр context в Find
  26. 26. Синхронизация • https://pypi.python.org/pypi/waiting/ • Обработка WebDriverException
  27. 27. Ну и на десерт напоследок…
  28. 28. Настройки • webium.settings – wait_timeout = 30 – default_search_type = By.ID • local_webium_settings – можно доопределить своими значениями
  29. 29. implicitly_wait • webium.settings.implicit_timeout • По умолчанию 30 секунд • Автоматически выключается в Finds
  30. 30. Управление webdriver’ом • webium.settings.driver_class • nose-плагин по закрытию браузера • Можно работать со своим, передавая в BasePage
  31. 31. Спасибо! Q&A • Ссылки: – https://github.com/wgnet/webium – http://wgnet.github.io/webium/ – https://pypi.python.org/pypi/webium • Контакты: Игорь Хрол i_khrol@wargaming.net khroliz@gmail.com skype: igor.khrol http://www.khroliz.com

×