Использование паттерна Page Object Selenium Webdriver

IT Образование

Использование паттерна Page Object Selenium Webdriver

Это позволяет упростить разработку, тестирование и поддержку программы. В заключение хочу отметить, что Atlas — это гибкий инструмент с большими возможностями. Его автоматизация ui тестов box можно настроить под конкретный тестовый проект так, как удобно вашей команде и вам. Заняться разработкой кроссплатформенных тестов и т.д.Доступны видеозаписи докладов о нём с конференций Heisenbug, Selenium Camp и Nexign QA Meetup. Есть Telegram-чат @atlashelp.С помощью данного инструмента вы сможете сократить значительное количество строк кода (проверено на проектах таких компаний, как Яндекс, СберТех и Тинькофф).

Page Objects vs Page Components

Функция помощника testState проверяет оба элемента — первый должен быть завершен, а второй — нет. Использование app actions — это просто использование JavaScript-функций, а использование функций — просто. Окончательный исходный код этой записи блога вы можете найти в Application Actions. Вы также можете увидеть одни и те же тесты, реализованные в разных стилях, включая Page Object и App Actions в repo bahmutov/test-todomvc-using-app-actions.

Революция или эволюция Page Object Model?

Чего недостает в Page Objects

После того, как элементы идентифицированы, следующий шаг – инициализировать их, используя сниппет ниже. Первая строка импортирует библиотеку Selenium, которая используется для взаимодействия с веб-страницами. При широком использовании этот паттерн также делает тесты невероятно сложными для чтения. Он скрывает происходящее и заставляет читателя щелкать по множеству различных мест, чтобы понять ожидаемое поведение теста. Это пересекается с темой DRY vs DAMP, которую мы рассмотрим позже. Объекты страницы предоставляют интерфейс, который должен значительно ускорить разработку тестов в будущем.

В чём разница между веткой разработки и тестирования и средой разработки и тестирования?

  • Класс может использоваться в коде тестов, использующих элементы этого класса.
  • Это делается с помощью метода is_error_message_displayed(), который был также определен в классе LoginPage.
  • Пожалуйста, ознакомьтесь с руководством pytest по хорошим интеграционным практикам для получения более подробной информации.
  • В части “после тестов” мы вызываем функцию quit, которая завершает сессию и убивает экземпляр webdriver.

Таким образом можно запрограммировать требуемое поведение в элементе. Повторные попытки (Retry)В Atlas есть встроенные повторные попытки. Вам не нужно заботиться о таких исключениях, как NotFoundException, StaleElementReferenceException и WebDriverException, а также можно забыть о применении явных и неявных ожиданий Selenium API. Предположим, у нас есть страница входа с полями для ввода имени пользователя и пароля, а также кнопкой входа. Если вы интересуетесь тест-автоматизацией, то в какой-то момент зададитесь одним (или всеми) из следующих вопросов – что такое Page Object Model (POM)?

Чего недостает в Page Objects

Как писать тест-кейсы: полное руководство

@FindBy могу принять имя тега, частичный текст ссылки, имя, текст ссылки, идентификатор, CSS, имя класса, xpath как атрибуты. Как вы можете заметить, все, что мы делаем, — это находим элементы и заполняем значения для этих элементов. Таким образом, при использовании POM ваши автоматические тесты становятся более структурированными, читаемыми и поддерживаемыми. Затем происходит проверка, отображается ли сообщение об ошибке. Это делается с помощью метода is_error_message_displayed(), который был также определен в классе LoginPage. Это зависит от характера вашего приложения и даже от языка, на котором реализована ваша автоматизация.

Page Object Model + Webdriver. Пример реализации на одном тесте

Чего недостает в Page Objects

Нет параллельного состояния (внутри page objects), нет логики условного тестирования — просто прямая ссылка на код приложения, как это можно сделать из консоли DevTools. При использовании app actions для выполнения нескольких операций, ваши тесты могут выполняться раньше запуска приложения. Например, если приложение сохраняет добавленные todos на сервере до их локального сохранения, вы не можете сразу пометить их как «завершенные». Page Objects 1, 2 предназначены для того, чтобы делать сквозные тесты читабельными и простыми в эксплуатации. Вместо ad-hoc интеракций со страницей, тест управляет страницей с помощью экземпляра приложения, который представляет собой пользовательский интерфейс страницы. Например, здесь абстракция страницы входа взята непосредственно со страницы Selenium Wiki.

Строка ShopperActor.logonAndSelectItem(); говорит мне именно то, что мне нужно знать, чтобы понять, что делает тест. Этот принцип называется DAMP — Descriptive and Meaningful Phrases (понятные и осмысленные фразы). Он отдает приоритет многословию для удобочитаемости, а не дублированию, и должен стать вашим руководящим принципом в тестах. Такова цель каждого паттерна проектирования, о котором вы когда-либо читали. В этом случае мы можем переместить utility функцию allItems и селектор ALL_ITEMS в общий файл утилита и импортировать allItems из всех specs файлов, которые нам нужны. Таким образом, мы можем использовать атрибут registered_user_data как обычную переменную.

Связанность интерфейсов Page Object

В 99% случаев разработки программного обеспечения DRY очень полезен и уместен. В этом примере страница FrenchSearchResultsPage будет наследоваться от BaseSearchResultsPage. BaseSearchResultsPage определяет интерфейс, используемый каждой SearchResultsPage, и реализует все методы, на которые не влияет локализация. Затем каждая страница для конкретного языка будет реализовывать специфические для нее методы. Для начала необходимо реализовать инициализацию для WebDriver.

Лучшим подходом к обслуживанию скриптов является создание отдельного файла класса, который будет находить веб-элементы, заполнять их или проверять. Этот класс можно повторно использовать во всех сценариях, использующих этот элемент. В будущем, если в веб-элементе произойдут изменения, нам нужно будет внести изменения всего в 1 файл класса, а не в 10 разных скриптов. Запуск автоматизации пользовательского интерфейса в Selenium WebDriver — НЕ сложная задача. Локатор LINK_DIVS следует паттерну кортежа, но локатор PHRASE_RESULTS ему не следует.

Эти названия взаимозаменяемы, и я видел, как этот паттерн называли по-разному, но независимо от названия все они служат одной цели. Помечаем ее декоратором @pytest.fixture и передаем параметр scope со значением session. Это означает что данная функция-фикстура будет исполнятся только 1 раз за тестовую сессию. Для понимания статьи необходимо знать базовые конструкции Python, ООП, понимать принципы и функции Selenium.

Это делает тесты более устойчивыми к изменениям в приложении и облегчает поддержку кода. Последний момент важен — наши тесты медленные из-за внесения трех элементов через пользовательский интерфейс перед каждым тестом. Три теста в приведенном выше контексте “Отметить все как выполнено”  (“Mark all as completed”)  обычно занимают от 4 до 5 секунд. Page objects и HTML слабо связаны, вот почему я провел границу, используя ~ ~. Они используют селекторы, чтобы найти элементы, который НЕ проверяются каким-либо линтером или компиляром кода.

В вышеприведенной реализации код приложения не может выполнить вход в систему тем же методом, что и cy.request. Таким образом, сквозные тесты должны вызывать cy.request(), а не вызывать app actions. Это позволяет избежать использования шаблона объекта страницы —  и для этого достаточно выполнить пользовательскую команду или простую функцию.

Основное преимущество такого подхода в том, что возможно сразу открыть требуемую страницу без прокликивания до неё. Чтобы не хранить весь этот код в классе шагов, возможно поместить его рядом с элементом в виде метода по умолчанию. В целом можно создать больше слоёв и подключить их к нужной странице. В примере ниже подключаем с главной странице слои header, footer, sidebar.

Страницы представлены как классы с атрибутами локаторов и методами взаимодействия. Вместо сырых вызовов WebDriver тесты вызывают методы объекта страницы. Паттерн Page Object, в целом, наиболее распространенный паттерн Web UI-автоматизации. Существует множество способов внедрения этого паттерна, но по большей части они очень похожи. Если вы знакомы с любым видом фронтенд-веб-разработки, то, возможно, сталкивались с Document Object Model (DOM). DOM широко признан как тип API для документов HTML и XML, позволяющий получать доступ к логической структуре документа и манипулировать ей.

Для всех элементов поиск будет происходить в течение 3 секунд, а в случае с одним составит 20. Основная проблема с обслуживанием скриптов заключается в том, что если 10 разных скриптов используют один и тот же элемент страницы, то при любом изменении этого элемента вам придется изменить все 10 скриптов. По мере того, как вы добавляете в код все больше и больше строк, все становится сложнее. В следующий раз мы научимся конфигурировать выбор браузера и ожидания вне кода автоматизации, используя config-файлы.

IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ here.