Разбухший Page Object (God Object Page Object)
Один класс Page Object описывает несколько страниц или весь сайт сразу. Размер класса — сотни и тысячи строк, он знает обо всём.
Симптомы
- Page Object больше 300–500 строк
- В одном классе методы для логина, поиска, корзины, чекаута и профиля
- Название класса размытое:
SitePage,ApplicationPage,MainPage - Десятки
@FindBy-полей, большинство не используются конкретным тестом - Методы возвращают
thisвместо конкретного объекта следующей страницы
Причины возникновения
- Page Object начинался разумно, но рос вместе с проектом без рефакторинга
- «Не хочу создавать новый файл» — всё добавляется в существующий класс
- Нет договорённости о границах ответственности страницы
- Слияние нескольких шагов флоу в один «удобный» объект
Почему это проблема
- Конфликты в git: все разработчики правят один файл — постоянные мёрж-конфликты
- Медленная компиляция и навигация: IDE теряется в огромном классе
- Нарушение SRP: класс меняется по десяткам причин одновременно
- Невозможно тестировать изолированно: изменение логина ломает код чекаута в том же классе
- Скрытые зависимости: тест обращается к методам страницы B через объект страницы A
Решение
Один класс — одна страница (или один переиспользуемый компонент):
// ❌ 500+ строк, описывает всё
public class SitePage { ... }
// ✅
public class LoginPage { ... }
public class ProductPage { ... }
public class CartPage { ... }
public class CheckoutPage { ... }
public class HeaderComponent { ... }