Паттерны в автоматизации тестирования

GoF паттерны, SOLID принципы
Николай Алименков - паттерны проектирования

Page Object
элементы страницы (поля) и логика взаимодействия с элементами (методы) описаны в отдельном классе

Page Element
повторяющиеся элементы (хедер, футер, меню, фильтр) описаны в отдельном классе. Паттерн убирает дублирование, упрощает поддержку. Связь со страницей через композицию

Page Factory
создание объекта страницы и ленивая инициализация всех элементов, которые описаны на этой странице

Envorement Factory
создание среды тестирования из связанных объектов (тест/препрод/прод, источник/бд/апи/фронт)

Factory Method
создание объекта через метод, который может содержать дополнительные действия/проверки. Driver Factory Method - создание экземпляра WebDriver вынесено в отдельный класс, список браузеров приведен в Enum

Object Pool (Flyweight)
чтобы не создавать каждый раз тяжелые объекты, а использовать их пул, например, пул браузеров, пул страниц, пул БД


Steps
создание методов, которые соответствуют логическим шагам, например, открыть страницу, заполнить форму. Описание приближено к тест-кейсам, все технические подробности скрыты в реализации этих шагов

Fluent/Chain of invocations
цепочка событий. Используется вместе с шагами, помогает построить определенный поток действий (выстроить методы в цепочку, вызывая друг за другом), предоставляет подсказки

Strategy
когда нужны несколько реализаций одного и того же, например, регистрация через web/api

Builder
позволяет использовать только те поля формы, которые нужны в данный момент

Decorator
динамическое добавление новых возможностей к существующему объекту. Используется при наличии множества комбинаций, является альтернативой наследованию. Наследование используется на этапе проектирования, Decorator - при динамическом получении данных во время выполнения программы, например, чай+сахар, чай+молоко, чай+сахар+молоко. Для Decorator используется предлог "с" (чай с сахором)

Proxy
позволяет включить/отключить ресурсы/страницы, собрать http-трафик, закешировать картинки/css

Bridge
позволяет связать иерархию абстракции с иерархией реализации

Property Reader
считывает параметры из файла

Value Object
передача параметров ввиде объекта, например, User user вместо String name, int age

Data Registry
позволяет генерировать уникальные данные и следить за их уникальностью

Data Provider
выполнение тестов с разными данными, которые вшиты в провайдер или подтягиваются из файла

Assert Object
размещение повторяющихся проверок в отдельном статическом методе или классе. Убирает дублирование, упрощает поддержку