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.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 уже есть готовые компоненты!
Контейнеры
Контейнеры • Вложенный поиск • Реиспользование на всех страницах, где появляется • Любой типизированный элемент, наследник 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 • Контакты: Игорь Хрол i_khrol@wargaming.net khroliz@gmail.com skype: igor.khrol http://www.khroliz.com

Webium: Page Objects in Python