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("Добро пожаловать");