Паттерн Page Object – это подход в автоматизации тестирования веб-приложений, который позволяет упростить и структурировать код, повысить его понятность и поддерживаемость. Он основан на принципе, что каждая страница веб-приложения является отдельным объектом, и для каждой страницы создается отдельный класс, содержащий все методы и элементы управления этой страницы.
Такой подход позволяет абстрагировать работу с веб-страницами от самих тестовых случаев и упростить их написание. Вместо того чтобы в каждом тестовом случае выполнять одинаковые действия – например, открытие страницы, заполнение полей формы и нажатие кнопки отправки – можно создать методы в классе Page Object, которые будут выполнять эти действия. Тесты становятся более читаемыми и компактными, поскольку основная логика теста выносится в отдельную единицу – класс Page Object.
Паттерн Page Object также позволяет упростить поддержку автотестов. Если изменяется верстка или логика на странице, достаточно изменить соответствующий класс Page Object, а не каждый тестовый случай, где используется эта страница. Это уменьшает вероятность возникновения ошибок и повышает надежность автотестов.
Принципы и преимущества паттерна Page Object
Основными принципами паттерна Page Object являются:
- Разделение логики автоматизированных тестов и работы с пользовательским интерфейсом.
- Создание классов-оберток для каждой веб-страницы, которые инкапсулируют элементы и методы работы с ними.
- Использование объектно-ориентированного подхода для создания классов-оберток.
- Создание базового класса, который предоставляет общие методы и функциональность для всех страниц.
Преимущества паттерна Page Object включают в себя:
- Улучшенная читаемость кода автотестов. Раздельное хранение логики тестов и элементов пользовательского интерфейса позволяет с легкостью читать и понимать код автотестов, что упрощает поддержку и развитие проекта.
- Уменьшение дублирования кода. Повторное использование классов-оберток для элементов пользовательского интерфейса позволяет избежать дублирования кода в автотестах и ускоряет процесс разработки.
- Устойчивость тестов к изменениям интерфейса. При изменении интерфейса веб-приложения достаточно внести изменения только в класс-обертку для данной страницы, что позволяет сократить время и усилия, затрачиваемые на обслуживание автотестов.
- Легкость масштабирования. Паттерн Page Object позволяет с легкостью добавлять новые страницы веб-приложения и расширять функциональность автотестов.
Структура и основные составляющие паттерна Page Object
Структура паттерна Page Object обычно состоит из двух основных компонентов: класса страницы и класса теста или набора тестов.
Класс страницы
Класс страницы представляет собой абстракцию отдельной страницы веб-приложения. Он содержит методы и свойства, которые описывают элементы и взаимодействие с ними на этой странице. Обычно каждый элемент на странице представлен отдельным методом, который возвращает объект, позволяющий взаимодействовать с этим элементом.
Кроме того, класс страницы может содержать вспомогательные методы для выполнения операций, связанных с данной страницей, например, заполнение форм, нажатие кнопок и т. д.
Класс теста
Класс теста или набор тестов представляет собой набор тестовых сценариев, которые выполняются в рамках данной страницы. Он использует методы класса страницы для взаимодействия с элементами и выполнения необходимых операций.
Класс теста может содержать методы, которые описывают конкретные тестовые шаги или сценарии. Каждый шаг может использовать методы класса страницы для взаимодействия с элементами и проверки ожидаемых результатов.
Преимущества паттерна Page Object
- Улучшает читаемость кода тестовых сценариев.
- Обеспечивает централизованное управление локаторами элементов.
- Упрощает сопровождение и изменение тестовых сценариев.
- Снижает дублирование кода и повторное использование.
- Повышает надежность и стабильность автоматизированных тестов.
- Улучшает переиспользование кода и расширяемость.
- Облегчает взаимодействие между членами команды разработки.
Преимущества использования паттерна Page Object
Использование паттерна Page Object имеет несколько преимуществ:
1. | Улучшение читаемости и поддерживаемости тестового кода. С помощью Page Object можно разделить логику теста и логику страницы. Такой подход делает код более понятным и легко поддающимся модификации при изменениях в структуре или дизайне страницы. |
2. | Ускорение процесса разработки тестов. При использовании Page Object разработчик может сконцентрироваться на тестировании логики приложения, не задумываясь о деталях взаимодействия с элементами страницы. Это позволяет сэкономить время и упростить процесс написания и поддержки автотестов. |
3. | Снижение затрат на исправление ошибок. Page Object позволяет быстро определить и внести изменения в код автотестов в случае, если элементы страницы изменятся или будут добавлены новые элементы. Благодаря строгому разделению логики навигации и взаимодействия с элементами страницы от логики теста, исправления можно вносить только в классы Page Object, не затрагивая основной код тестов. |
4. | Повышение стабильности и надежности тестов. Page Object позволяет изолировать тестовый код от изменений структуры и дизайна страницы, что позволяет более уверенно выполнять автоматические проверки после каждого нового релиза. Также данный подход способствует уменьшению количества дублирующегося кода, что улучшает качество и надежность автоматических тестов. |
Использование паттерна Page Object является хорошей практикой в автоматизации тестирования веб-приложений и может значительно упростить процесс разработки и поддержки автотестов.
Примеры реализации паттерна Page Object в автоматизации тестирования
Пример 1: тестирование формы авторизации
- Создаем класс LoginPage, который представляет страницу авторизации. В нем определяем элементы страницы — поля ввода логина и пароля, кнопку «Войти».
- Добавляем методы в класс LoginPage для ввода значений в поля, нажатия на кнопку «Войти» и валидации результатов авторизации.
- Создаем класс LoginTest, который использует объект LoginPage для взаимодействия со страницей авторизации.
- В рамках теста LoginTest вызываем методы LoginPage для заполнения полей логина и пароля, нажатия на кнопку «Войти» и проверки результатов авторизации.
Пример 2: тестирование корзины покупок
- Создаем класс HomePage, который представляет главную страницу интернет-магазина. В нем определяем элементы страницы — ссылку на корзину покупок, количество товаров в корзине.
- Добавляем методы в класс HomePage для перехода на страницу корзины покупок и получения количества товаров в корзине.
- Создаем класс CartPage, который представляет страницу корзины покупок. В нем определяем элементы страницы — список товаров, кнопку для удаления товаров.
- Добавляем методы в класс CartPage для получения списка товаров в корзине, удаления товаров и получения общей стоимости покупки.
- Создаем класс CartTest, который использует объекты HomePage и CartPage для взаимодействия с главной страницей и страницей корзины покупок.
- В рамках теста CartTest запускаем методы HomePage для перехода на страницу корзины, затем вызываем методы CartPage для работы с корзиной — получения списка товаров, удаления товаров и проверки общей стоимости покупки.
В таком формате реализации паттерна Page Object каждая страница веб-приложения представлена отдельным классом, в котором методы и элементы страницы объединены вместе. Это позволяет упростить создание автотестов, обеспечить их структурированность и легкость поддержки при изменении интерфейса приложения.