webium: page objects in python
TRANSCRIPT
Webium: Page Object в Python
Игорь Хрол
QA Automation Team Lead
Wargaming.NET
О себе
• Игорь Хрол
• QA Automation Team Lead в Wargaming.NET
• 9 лет в отрасли
• Инженер, архитектор, менеджер, консультант, тренер
• Постоянный участник SeleniumCamp
• www.khroliz.com
Предыстория вопроса
• Не нашлось нужных решений в Python
• Навеяно HtmlElements(http://htmlelements.qatools.ru/)
Хотелки• Расширение WebElement’a, а не создание
своей «обёртки»
• Поддержка поиска одного и многих (find_element и find_elements)
• Вложенный поиск какой угодно глубины
• Ленивая инициализация
Существующие аналоги
Аналоги - Robot Framework Page Objects
https://github.com/ncbi/robotframework-pageobjects
Аналоги - holmium.corehttps://github.com/alisaifee/holmium.core
Аналоги - wtframeworkhttps://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уже есть готовые
компоненты!
Контейнеры
Контейнеры
• Вложенный поиск
• Реиспользование на всех страницах, где появляется
• Любой типизированный элемент, наследник WebElement
Контейнеры
Логические контейнеры
is_element_present
• Типовое действие при написании автотестов
• Каждый делает свой велосипед
• Не так просто сделать корректно http://seleniumcamp.com/archive/selenium-camp-2013/materials/mistakes-of-beginners/
is_element_present
>> True
>> False
is_element_present
• Метод есть у BasePage и у любого контейнера
• Параметры:
– element_name – имя элемента
– just_in_dom – можно проверять только наличие в DOM’e
– timeout – ждать True на протяжении таймаута
Динамические страницы
Динамические страницы
• Добавление элементов в страницу «на лету»
• Страница определена во время выполнения
• Явное задание контекста поиска
– параметр context в Find
Синхронизация
• 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-плагин по закрытию браузера
• Можно работать со своим, передавая в BasePage
Спасибо!Q&A
• Ссылки:– https://github.com/wgnet/webium
– http://wgnet.github.io/webium/
– https://pypi.python.org/pypi/webium
• Контакты:Игорь Хрол
skype: igor.khrol
http://www.khroliz.com