Assert в Page Object (Assert in Page Object)

Page Object содержит assert-вызовы или жёстко проверяет ожидаемое состояние системы вместо того, чтобы просто предоставлять доступ к UI.

Симптомы

  • assertEquals(...), assertTrue(...), assertThat(...) внутри метода Page Object
  • Метод называется verifyWelcomeMessageDisplayed() и живёт в PO
  • Page Object бросает AssertionError вместо возврата значения или следующего объекта страницы
  • Тест-метод не содержит ни одного assert — все скрыты в PO

Причины возникновения

  • Желание «упростить» тест-метод, вынеся проверки в PO
  • Смешение ответственностей: PO воспринимается как «тест-хелпер» общего назначения
  • Незнание паттерна «Page Object возвращает следующую страницу»
  • Копирование практик из устаревших туториалов по Selenium

Почему это проблема

  • Нарушение SRP: Page Object отвечает и за навигацию, и за утверждения
  • Скрытые ожидания: читая тест, невозможно понять, что именно проверяется — проверки спрятаны в PO
  • Негибкость: нельзя переиспользовать метод логина для негативного сценария (ожидаем ошибку, а не успех)
  • Сложная диагностика: при падении AssertionError трассировка указывает внутрь PO, а не на тест
  • Нельзя использовать SoftAssertions: скрытый assert прерывает выполнение немедленно

Решение

PO возвращает состояние или следующую страницу, а проверки — в тест-методе:

// ❌ Assert внутри PO
public void login(String u, String p) {
    submitButton.click();
    assertEquals("Добро пожаловать", driver.findElement(By.id("greeting")).getText());
}

// ✅ PO возвращает следующую страницу
public DashboardPage login(String u, String p) {
    submitButton.click();
    return new DashboardPage(driver);
}

// Проверка — в тесте
assertThat(loginPage.login("user", "pass").getGreeting()).contains("Добро пожаловать");