Что такое паттерн Page Object в автоматизации тестирования?

«Что такое паттерн Page Object в автоматизации тестирования?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Page Object (Page Object Model, POM) — это паттерн проектирования для автоматизации UI-тестов, который инкапсулирует структуру и поведение веб-страницы в отдельном классе.

Основная идея: Отделить тестовую логику от деталей взаимодействия с элементами страницы (локаторов, методов WebDriver).

Преимущества:

  • Повторное использование кода: Логика работы со страницей пишется один раз.
  • Устойчивость к изменениям: При изменении UI правки вносятся только в класс Page Object, а не во все тесты.
  • Читаемость: Тесты становятся более декларативными и понятными.

Пример класса Page Object для страницы логина (Java + Selenium):

public class LoginPage {
    private WebDriver driver;
    private By usernameField = By.id("username");
    private By passwordField = By.id("password");
    private By loginButton = By.id("login-btn");

    public LoginPage(WebDriver driver) {
        this.driver = driver;
    }

    public void enterUsername(String username) {
        driver.findElement(usernameField).sendKeys(username);
    }

    public void enterPassword(String password) {
        driver.findElement(passwordField).sendKeys(password);
    }

    public HomePage clickLogin() {
        driver.findElement(loginButton).click();
        return new HomePage(driver); // Возвращает Page Object следующей страницы
    }

    // Композитный метод для частого сценария
    public HomePage loginAs(String username, String password) {
        enterUsername(username);
        enterPassword(password);
        return clickLogin();
    }
}

Использование в тесте:

LoginPage loginPage = new LoginPage(driver);
HomePage homePage = loginPage.loginAs("testUser", "password123");
assertTrue(homePage.isUserLoggedIn());