Какие функции реализовывал в Base Page?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Функциональность Base Page в паттерне Page Object
В качестве Senior QA Automation Engineer с более чем 10-летним опытом, я рассматриваю Base Page как фундаментальный абстракционный слой в архитектуре фреймворка автоматизации, реализующий DRY (Don't Repeat Yourself) принцип и обеспечивающий единую точку контроля для общих операций и поведения всех страниц приложения.
Ключевые категории функций, реализуемых в Base Page:
1. Инициализация и базовые свойства драйвера:
- Хранение и предоставление ссылки на экземпляр WebDriver (или другого клиента, например, для мобильной или API-автоматизации).
- Инициализация драйвера через конструктор и его корректное завершение (хотя часто это ответственность уровня тестов).
- Предоставление свойства для быстрого доступа к драйверу из классов-наследников.
# Python + Selenium пример
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage:
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10)
self.base_url = "https://example.com"
# Свойство для удобного доступа
@property
def webdriver(self):
return self.driver
2. Обертки (Wrappers) для взаимодействия с элементами: Это наиболее критичная часть. Мы создаем стабильные, самовосстанавливающиеся и логируемые методы для замены прямых вызовов API фреймворка (например, Selenium).
- Поиск элемента (
find_element,find_elements): Добавление явных ожиданий, кастомных локаторов, логирования. - Клики (
click,js_click): Ожидание кликабельности, обработка исключений (например,ElementClickInterceptedException), резервные клики через JavaScript. - Ввод текста (
type,set_value): Очистка поля, посимвольный ввод с паузами для сложных полей, логирование вводимого значения. - Получение атрибутов и текста (
get_text,get_attribute): Ожидание видимости элемента, обрезка пробелов, приведение к нужному типу.
// Java + Selenium пример
public abstract class BasePage {
protected WebDriver driver;
protected WebDriverWait wait;
public BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver, Duration.ofSeconds(15));
}
// Обертка для клика с ожиданием
public void click(WebElement element) {
wait.until(ExpectedConditions.elementToBeClickable(element));
log.debug("Clicking on element: " + element);
element.click();
}
// Обертка для ввода текста
public void type(WebElement element, String text) {
wait.until(ExpectedConditions.visibilityOf(element));
element.clear();
log.debug("Typing text '" + text + "' into element: " + element);
element.sendKeys(text);
}
}
3. Навигация и управление окнами:
- Открытие URL (
open(path)), с комбинацией base_url и относительного пути. - Переключение между окнами, вкладками и фреймами (
switch_to_window,switch_to_frame). - Навигация вперед/назад, обновление страницы.
- Управление куками и localStorage.
4. Ожидания (Waits):
- Кастомные ожидания для специфичных условий приложения (например, исчезновение лоадера, появление определенного текста).
- Явные ожидания для готовности страницы (не только
document.readyState, но и кастомные JS-флаги).
// JavaScript + WebdriverIO пример
class BasePage {
// Ожидание кастомного условия загрузки страницы
async waitForPageLoaded() {
await browser.waitUntil(
async () => {
const state = await browser.execute(() => document.readyState);
const customFlag = await browser.execute(() => window.appIsReady);
return state === 'complete' && customFlag === true;
},
{
timeout: 30000,
timeoutMsg: 'Page failed to load within 30 seconds'
}
);
}
}
5. Логирование и отчетность:
- Инициализация логгера, общего для всех страниц.
- Автоматическое логирование ключевых действий (открытие страницы, клики, ввод данных).
- Прикрепление скриншотов к отчету при неудачных действиях (часто через listeners, но базовый метод может быть здесь).
6. Вспомогательные утилиты:
- Генерация тестовых данных (рандомные строки, emails).
- Работа с датами и временем в формате приложения.
- Методы для скроллинга (
scroll_to_element). - Методы для JavaScript-исполнения (
execute_script).
7. Проверки (Assertions):
- Базовые проверки присутствия/видимости элемента на странице.
- Проверка, что текущий URL соответствует ожидаемому (
is_page_opened).
Эволюционный взгляд:
В современных сложных SPA (Single Page Application) или микросервисных архитектурах роль Base Page расширяется. Она может содержать:
- API-клиент для выполнения фоновых запросов, необходимых для подготовки состояния приложения.
- Методы для работы с WebSocket уведомлениями.
- Адаптеры для переключения контекста (например, веб-версия ↔ мобильная версия).
Итоговая цель — создать надежный, поддерживаемый и расширяемый фундамент, который скрывает нюансы низкоуровневого API от Page Objects, делая их код чистым, сфокусированным на бизнес-логике и устойчивым к мелким изменениям в UI. Правильно реализованный Base Page сокращает объем кода в тестах на 30-40% и значительно упрощает его поддержку.