Ответ
В рамках автоматизации тестирования веб-приложения я активно использовал наследование для построения иерархии Page Object-классов. Это позволило избежать дублирования кода и улучшить поддерживаемость фреймворка.
Пример на Java:
- Базовый класс
BasePage, содержащий общую логику для всех страниц (инициализацию драйвера, ожидания, общие элементы типа хедера).
public class BasePage {
protected WebDriver driver;
protected WebDriverWait wait;
// Общий элемент хедера, присутствующий на всех страницах
protected By headerLogo = By.className("header-logo");
public BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
// Общий метод для клика с явным ожиданием
protected void clickElement(By locator) {
wait.until(ExpectedConditions.elementToBeClickable(locator)).click();
}
// Общий метод для проверки заголовка страницы
protected boolean isPageTitleContains(String titleFragment) {
return wait.until(ExpectedConditions.titleContains(titleFragment));
}
}
- Конкретный класс страницы
LoginPage, который наследуетBasePageи добавляет специфичную для страницы логики.
public class LoginPage extends BasePage {
// Локаторы, специфичные для страницы логина
private By usernameField = By.id("username");
private By passwordField = By.id("password");
private By loginButton = By.id("login-btn");
private By errorMessage = By.className("error");
public LoginPage(WebDriver driver) {
super(driver); // Вызов конструктора родительского класса
}
public HomePage loginWithValidCredentials(String user, String pass) {
driver.findElement(usernameField).sendKeys(user);
driver.findElement(passwordField).sendKeys(pass);
clickElement(loginButton); // Используем метод из BasePage
return new HomePage(driver);
}
public String getErrorMessageText() {
return wait.until(ExpectedConditions.visibilityOfElementLocated(errorMessage)).getText();
}
}
Преимущества, которые я получил:
- Устранение дублирования: Общие методы (
clickElement,isPageTitleContains) написаны один раз вBasePage. - Упрощение поддержки: Изменение логики ожиданий или добавление нового общего элемента требует правки только в
BasePage. - Четкая структура: Классы страниц становятся чище и отвечают только за свою уникальную логику.