Разбухший 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 { ... }