Нет Page Object (No Page Object)
Низкоуровневые вызовы Selenium (driver.findElement, sendKeys, click) рассыпаны прямо по тест-методам без какой-либо инкапсуляции.
Симптомы
-
driver.findElement(By.id(...)).click()непосредственно в@Test-методе - Локаторы (
By.cssSelector(...),By.id(...)) дублируются в нескольких тестах - Тест-метод смешивает логику навигации и бизнес-проверки
- Нет классов с суффиксом
Page,Component,Fragmentв тестовом коде
Причины возникновения
- Тесты писались быстро «как скрипты», без проектирования архитектуры
- Команда только начала автоматизацию и ещё не знакома с паттерном Page Object
- Отсутствие code review для тест-кода
- Убеждение: «это же просто тесты, можно и попроще»
Почему это проблема
- Хрупкость: изменение одного локатора требует поиска и правки в десятках тест-методов
- Дублирование: одна и та же последовательность кликов копируется в каждый тест
- Нечитаемость: тест описывает «как» (find, click, sendKeys) вместо «что» (login, addToCart)
- Невозможно переиспользовать: каждый новый тест пишется с нуля
Решение
Инкапсулировать UI-взаимодействие в Page Object:
// ❌
driver.findElement(By.id("product-title")).click();
driver.findElement(By.cssSelector(".add-to-cart")).click();
String count = driver.findElement(By.cssSelector(".cart-count")).getText();
assertEquals("1", count);
// ✅
productPage.openFirstProduct().addToCart();
assertThat(header.getCartCount()).isEqualTo(1);