Page Object Model (POM) — это архитектурный паттерн для организации кода автотестов, особенно в UI-тестировании. Он предлагает выделять отдельные классы или объекты для логического представления каждой страницы приложения, определяя методы для работы с элементами и действиями на них.
История вопроса: Ранее автотесты писали “как есть” — прямо взаимодействуя с локаторами элементов в самих тестах, что приводило к дублированию кода и сложной поддержке. С введением POM стало возможным выносить всё, что связано с определённой страницей, в отдельный класс, делая автотесты легче в сопровождении.
Проблема: Без структурирования тестов в крупных проектах быстро копится "беспорядочный" код. Любое изменение в интерфейсе требует обновления многочисленных тестов, что приводит к высокой стоимости поддержки.
Решение: POM позволяет централизованно управлять действиями и элементами, уменьшает дублирование, упрощает масштабирование тестовой инфраструктуры. Например, если вам нужно изменить локатор кнопки, правка производится только в одном месте — в Page Object, а не во всех тестах.
Ключевые особенности:
Можно ли реализовать автотесты без паттерна POM?
Можно, но такой подход приведёт к дублированию кода, высокой стоимости поддержки и невозможности масштабирования.
Обязательно ли каждый элемент страницы выносить в отдельный Page Object?
Нет, Page Object создаётся для логических страниц, включающих связанные элементы и действия, иногда для небольших повторяющихся блоков можно использовать отдельные вспомогательные сущности (например, компоненты).
POM решает все архитектурные вопросы автотестов?
Нет, он помогает структурировать логику работы с интерфейсами, но не определяет полную архитектуру фреймворка для тестирования — например, обработку данных, генерацию отчётов и управление состоянием приложения.
Автотесты писались без POM — все действия прописывались прямо в тестовых методах. В результате простое изменение id кнопки на одной странице потребовало правки 35 тестов, многие из которых стали некорректными, другие просто перестали запускаться.
Плюсы:
Минусы:
В новом проекте тесты построили по POM: добавили классы страниц, инкапсулировали работу с элементами, использовали наследование для общих паттернов.
Плюсы:
Минусы: