Нет 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);