Паттерн Page Object Model (POM) в Selenium Webdriver

Паттерн Page Object Model (POM) в Selenium Webdriver

Перед тем, как изучать паттерн Page Object Model, давайте разберем, почему его нужно использовать?

Начинать автоматизировать тесты используя Selenium WebDriver – кажеться простым заданием. Необходимо лишь находить элементы, выполнять действия над ними и т.д.

Рассмотрим простой пример логина на сайт:

Как можно заметить, все, что мы делаем, – это находим элементы на странице и делаем над ними определенные действия.

Это небольшой скрипт. Его поддержка выглядит простой, но с увеличением количества тестов, добавляя все больше строк кода, – она становится сложнее.

Наибольшей проблемой поддержки есть то, что 10 разных скриптов используют тот же самый код. И изменения одного элемента (например, изменение верстки сайта девелоперами), приведет к изменению всех 10 тестов.

Более лучший подход в поддержке тестов – это создание отдельного класса, который будет находить элементы на странице, заполнять или проверять их. Класс может использоваться в коде тестов, использующих элементы этого класса. В будущем в случае изменений нам необходимо будет только сделать правки в одном классе, а не во всех 10 тестах.

Этот подход называется Page Object Model(POM). POM паттер делает код более читабельным, поддерживаемым и повторно используемым.

pom-1

Что такое POM?

  • Page Object Model – это паттер проектирования для создания Object Repository для веб элементов UI.
  • Согласно этому паттерну – для каждой страницы приложения/сайта должен быть определен соответствующий класс.
  • Этот класс Page будет искать все WebElements на странице и также содержать методы для работы с ними.
  • Названия этих методов должны соответствовать действиям, который они выполняют, например метод ожидания, пока элемент появится – waitForPaymentScreenDisplay().

Конечный проект выглядит следующим образом:

login2

Преимущества POM

  1. Page Object Patten объявляет элементы отдельно от реализации теста. Эта концепция деалет наш код более понятным.
  2. Вторым преимуществом есть то, что независимость класса объектов от реализации теста позволяет использовать этот репозиторий в разных целях и с разными для выполнения тестов. Например, мы можем интегрировать POM с TestNG/JUnit для функционального тестирования, а также с JBehave/Cucumber для приемочного тестирования.
  3. Кода становится меньше и он более оптимизирован. Его можно повторно использовать.
  4. Методы получают более реальные имена и отображают выполненное действие на UI, например, gotoHomePage().

Как внедрить POM ?

Ниже представлена базовая структура Page object model (POM), где все элементы  и  методы вынесены в отдельный класс.  Операции, такие как проверка должны быть отделены от тестового метода.

login

Рассмотрим на примере

Мы будем работать над 2 страницами:

  1. Страница входа
  2. Главная страница

Согласно этому мы создадим 2 POM класса:

 Класс AutoQALogin:

Класс AutoQAHomePage:

Класс тестов TestAutoQALogin :

Скачать проект можно по ссылке. Он также содержит наработке по другому паттерну Page Factory, который мы рассмотрим в следующей статье.

RelatedPost