Java: Selenium

Теория: Page Object Model

Page Object Model помогает отделить логику теста от деталей страницы. В этом уроке разберем создание объектов страниц и тесты поверх POM.

Идея POM

Каждая страница описывается отдельным классом. Внутри класса находятся локаторы и действия, а тесты работают через методы этого класса.

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

  • Чище тесты
  • Меньше дублирования
  • Проще менять локаторы

Пример: LoginPage и DashboardPage

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

class LoginPage {
    private final WebDriver driver;

    private final By username = By.name("username");
    private final By password = By.name("password");
    private final By submit = By.id("submit");

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

    void open() {
        driver.get("https://example.com/login");
    }

    void login(String user, String pass) {
        driver.findElement(username).sendKeys(user);
        driver.findElement(password).sendKeys(pass);
        driver.findElement(submit).click();
    }
}

class DashboardPage {
    private final WebDriver driver;

    DashboardPage(WebDriver driver) {
        this.driver = driver;
    }

    String getHeading() {
        return driver.findElement(By.tagName("h1")).getText();
    }
}

Тест выглядит проще:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import static org.junit.jupiter.api.Assertions.assertEquals;

class LoginTest {
    @Test
    void userCanLogin() {
        var driver = new ChromeDriver();

        LoginPage login = new LoginPage(driver);
        login.open();
        login.login("tester", "12345");

        DashboardPage dashboard = new DashboardPage(driver);
        assertEquals("Dashboard", dashboard.getHeading());

        driver.quit();
    }
}

Разделение локаторов и действий

Если классы страниц становятся слишком большими, локаторы и действия можно вынести в отдельные классы. Например, pages/locators и pages/actions. Такой подход помогает поддерживать крупные проекты.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845