Альтернативы Page Object в тестировании

January 21, 2025

Альтернативы Page Object в тестировании

🚀 В автоматизации тестирования важно организовать код так, чтобы он был простым для чтения, лёгким в поддержке и удобным для повторного использования. Для этого используются разные архитектурные подходы, такие как Page Object Model и его альтернативы.

Вот зачем они нужны и как их применять:


Почему хороша Page Object модель

  • 📖 Читаемость: Код становится проще для восприятия благодаря структурированию логики страниц.
  • ♻️ Повторное использование: Методы страниц можно использовать в разных тестах.
  • 🛠️ Лёгкость поддержки: Обновления интерфейса требуют изменения только в Page Object классах.
  • 🔒 Инкапсуляция: Локаторы и действия с ними скрыты внутри класса.

Пример:

public class LoginPage {
    private WebDriver driver;
    private By emailField = By.id("email");
    private By loginButton = By.id("login-btn");

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

    public void login(String email) {
        driver.findElement(emailField).sendKeys(email);
        driver.findElement(loginButton).click();
    }
}

1. Screenplay Pattern

🎭 Фокус на действиях пользователя, а не на страницах.

Пример:

actor.attemptsTo(
    Click.on(LoginPage.LOGIN_BUTTON),
    Enter.theValue("user@example.com").into(LoginPage.EMAIL_FIELD)
);

Плюсы: читаемость, повторное использование. Минусы: сложность освоения.


2. UI Mapping

🗺️ Централизованный файл для хранения локаторов.

Пример:

Map<String, By> UI_MAP = Map.of(
    "loginButton", By.id("login-btn"),
    "emailField", By.id("email")
);

driver.findElement(UI_MAP.get("loginButton")).click();

Плюсы: простота реализации. Минусы: потеря структуры на больших проектах.


3. Component Object Model

🔧 Разбивка на компоненты (например, таблицы, выпадающие списки).

Пример:

public class Dropdown {
    private WebElement dropdown;

    public Dropdown(WebElement dropdown) {
        this.dropdown = dropdown;
    }

    public void selectByValue(String value) {
        new Select(dropdown).selectByValue(value);
    }
}

Плюсы: удобство тестирования компонентов. Минусы: сложность интеграции.


Совмещение подходов

  • Page Object + Component Object: Используйте компоненты внутри Page Object классов для упрощения работы с повторяющимися элементами.
  • Page Object + UI Mapping: Локаторы из UI Mapping могут использоваться в Page Object классах для снижения дублирования кода.
  • Screenplay + Page Object: Можно интегрировать акторов и задачи из Screenplay для работы с Page Object.

Пример совмещения:

public class LoginPage {
    private WebDriver driver;
    private Dropdown languageDropdown;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
        this.languageDropdown = new Dropdown(driver.findElement(By.id("language")));
    }

    public void selectLanguage(String language) {
        languageDropdown.selectByValue(language);
    }
}

Выбор подхода зависит от задач проекта.

Для гибкости подойдёт 🎭 Screenplay, для быстрого старта — 🗺️ UI Mapping, для работы с компонентами — 🔧 Component Object Model. Page Object остаётся хорошей основой, которую можно совмещать с другими методологиями.


Profile picture

Written by Dmitry Yarygin Test Engineer and a Digital Nomad.
Follow me on Medium
Personal WebSite

© 2025 Dmitry Yarygin