Page Object Model

Page Object Model (сокр. POM, рус. модель объектов страницы) — шаблон проектирования, применяемый при автоматизации тестирования веб-приложений. Он предполагает представление каждой веб-страницы или её логически обособленного фрагмента отдельным классом, который инкапсулирует локаторы элементов пользовательского интерфейса и методы для взаимодействия с ними[1]. Такой подход отделяет тестовую логику от деталей реализации UI и облегчает сопровождение тестов[2][3].

Общие сведения

Определение

Page Object Model представляет собой архитектурный подход, в котором:

  1. Каждая веб-страница или её значимая часть оформляется как отдельный класс (Page Object).
  2. Класс содержит:
    1. локаторы (XPath, CSS-селекторы и др.) для элементов страницы;
    2. методы для выполнения действий над этими элементами (клики, ввод текста, проверки состояния).
  3. Тестовые сценарии обращаются только к методам Page Objects, не взаимодействуя напрямую с элементами UI.
  4. Изменение структуры страницы требует модификации лишь соответствующего класса Page Object, а не всех тестов[1][2].

К ключевым принципам POM относятся:

  • Разделение ответственности (Separation of Concerns) — логика взаимодействия с UI отделена от тестовой логики[3].
  • Инкапсуляция — детали элементов и взаимодействий скрыты внутри Page Objects, что упрощает поддержку[2].
  • Повторное использование кода — один Page Object может применяться в десятках тестовых сценариев[4].
  • Масштабируемость — по мере роста приложения добавляются новые классы, не затрагивая существующие[2]

Структурные элементы модели Page Object Model

Шаблон строится из нескольких взаимодополняющих слоёв и компонентов[5].[6].[7][8][9]

  • Объекты страниц (Page Objects / Page Classes) — ядро модели; инкапсулируют локаторы и методы конкретной страницы.
  • Элементы страницы (Page Elements) — отдельные UI-объекты (поля ввода, кнопки, ссылки), определяемые внутри Page Object.
  • Методы страницы (Page Methods) — действия, выполняемые над элементами (нажатия, ввод данных, считывание значений).
  • Сервисный слой (Service Layer) — надстройка над Page Objects, объединяющая методы нескольких страниц для реализации бизнес-сценариев (например, «войти в систему»). Он выполняет роль «оркестратора» и отличается от методов страниц более высокой абстракцией[9].
  • Тестовый слой (Test Layer) — содержит только тестовые сценарии и проверки; взаимодействует с приложением через сервисный слой или Page Objects.
  • Утилитарный слой (Utility Layer) — вспомогательные классы (запуск браузера, ожидания, логирование), используемые во всём фреймворке.
  • Page Component Objects — переиспользуемые компоненты UI (например, навигационное меню), встречающиеся на разных страницах[8].

Этапы работы

Практическое внедрение POM обычно включает несколько последовательных шагов[10][3].

1. Настройка среды

Устанавливаются необходимые инструменты: Selenium WebDriver, выбранный фреймворк тестирования (например, JUnit, TestNG, PyTest), драйверы браузеров и вспомогательные библиотеки[10].

2. Создание классов страниц

Для каждой веб-страницы создаётся класс, в котором объявляются локаторы элементов и базовые операции над ними[1].

3. Реализация методов пользователя

Внутри Page Objects описываются действия пользователя (заполнить форму, кликнуть кнопку). При переходе на новую страницу методы могут возвращать другой Page Object, отражающий изменившийся контекст[7].

4. Формирование сервисного слоя

Объединяются вызовы различных Page Objects в бизнес-ориентированные сценарии (например, оформление заказа), что упрощает тестовую логику и повышает повторное использование кода[9].

5. Написание тестовых сценариев

Тесты используют только публичные методы сервисного слоя или Page Objects, концентрируясь на проверках бизнес-требований[2].

6. Поддержка и развитие

При изменениях UI требуется обновить лишь соответствующие Page Objects; тестовые сценарии остаются нетронутыми, что сокращает расходы на сопровождение[3].

Сравнение и отличия от смежных технологий

POM — лишь один из популярных паттернов автоматизации UI-тестов.

  • Screenplay Pattern (Serenity/JS) моделирует систему в терминах «Акторов», «Задач» и «Вопросов». Он детальнее описывает намерения пользователя, но требует более сложной архитектуры и кривой обучения[11]..
  • Component Object Model и Page Component Object Model фокусируются на переиспользуемых UI-компонентах (виджеты, меню), что снижает дублирование при сложных интерфейсах[12].
  • App Actions (Cypress) позволяет описывать действия напрямую в тестах; однако при росте проекта без структуры POM тесты сложнее поддерживать[13].

Таким образом, POM остаётся универсальным и менее трудоёмким в освоении решением, хотя для специфических задач могут подойти альтернативы.

Преимущества и недостатки

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

  • Упрощённое сопровождение: изменение UI требует коррекции только в одном классе[1]
  • Повторное использование кода и снижение дублирования[4]..
  • Улучшенная читаемость и понятность тестов за счёт высокого уровня абстракции[2]
  • Масштабируемость фреймворка при росте числа страниц и сценариев[3]
  • Повышенная стабильность тестов за счёт централизованных локаторов.[14]..

Недостатки

  • Первоначальные затраты времени на проектирование структуры и создание классов[15].
  • Риск усложнения иерархий при нарушении принципа «чем проще, тем лучше»[9]
  • Ситуации, где альтернативные паттерны (Screenplay, Component Objects) оказываются более уместными[11]..

Сферы применения

POM используется в автоматизации интерфейсных тестов веб-приложений различной сложности[14].

  • Сложные многостраничные системы электронной коммерции.
  • Проекты с частыми изменениями дизайна, где нужна быстрая адаптация тестов.
  • Корпоративные приложения, требующие масштабируемых, модульных фреймворков.
  • Команды с разделением ролей (разработчики / тестировщики), где важно чёткое разграничение ответственности[16].

Инструменты для использования в Page Object Model

Различные фреймворки и библиотеки облегчают реализацию POM и интеграцию его с другими средствами тестирования.

  • Selenium WebDriver — классический инструмент для автоматизации браузера; аннотация @FindBy и класс PageFactory упрощают инициализацию элементов[17].
  • Playwright (чаще всего с TypeScript) — поддерживает модульную структуру файлов и поощряет применение POM в крупных проектах[18].
  • Cypress — несмотря на наличие App Actions, рекомендован к использованию совместно с POM для повышения поддерживаемости[13].
  • Katalon Studio — обеспечивает встроенный репозиторий объектов, уменьшая нагрузку на традиционный POM[19].
  • NightwatchJS, TestCafe, WebdriverIO — JavaScript-фреймворки, предоставляющие структуру для реализации Page Objects.
  • Интеграция с BDD-фреймворками (Cucumber, SpecFlow) позволяет описывать шаги на бизнес-языке, скрывая реализацию в Page Objects[19].

Примечания

  1. 1 2 3 4 A Beginner’s Guide to Page Object Model (POM) and PageFactory. Software-Testing.Ru. Дата обращения: 4 июля 2025.
  2. 1 2 3 4 5 6 Understanding the Page Object Model in Test Automation. Medium. Дата обращения: 4 июля 2025.
  3. 1 2 3 4 5 Page Object Model pattern for effective automation testing. Spyrosoft Blog. Дата обращения: 4 июля 2025.
  4. 1 2 Page Object Model (POM): a popular approach for test automation. Medium. Дата обращения: 4 июля 2025.
  5. Page Object Model / Page Object Pattern. Moropo Blog. Дата обращения: 4 июля 2025.
  6. The four layers of the Page Object Model. Medium. Дата обращения: 4 июля 2025.
  7. 1 2 Design patterns: Page Object Model. Digital.ai Docs. Дата обращения: 4 июля 2025.
  8. 1 2 Page Object Models. Selenium Documentation. Дата обращения: 4 июля 2025.
  9. 1 2 3 4 Большой гайд по Page Object Model. TestEngineer.ru. Дата обращения: 4 июля 2025.
  10. 1 2 Page Object Model in Selenium. QA Touch Blog. Дата обращения: 4 июля 2025.
  11. 1 2 Почему Page Object может быть плохой практикой. Habr. Дата обращения: 4 июля 2025.
  12. Page Object Model vs Page Component Object Model. Gorilla Logic Blog. Дата обращения: 4 июля 2025.
  13. 1 2 Cypress Page Object Model. BrowserStack. Дата обращения: 4 июля 2025.
  14. 1 2 Введение в Page Object Model. Medium. Дата обращения: 4 июля 2025.
  15. Почему Page Object не всегда идеален. Habr (Jugru). Дата обращения: 4 июля 2025.
  16. Page Object, Page Factory и альтернативы. Habr (OTUS). Дата обращения: 4 июля 2025.
  17. Page Object Model in Selenium. BrowserStack. Дата обращения: 4 июля 2025.
  18. Page Object Model with Playwright and TypeScript. CodiLime Blog. Дата обращения: 4 июля 2025.
  19. 1 2 Page Object Model in action. Medium. Дата обращения: 4 июля 2025.

Категории

© Правообладателем данного материала является АНО «Интернет-энциклопедия «РУВИКИ».
Использование данного материала на других сайтах возможно только с согласия АНО «Интернет-энциклопедия «РУВИКИ».