Ответ
При работе с Selenide (на Java) я создавал абстрактный класс BasePage, который инкапсулировал общую логику для всех Page Objects. Вот ключевые методы, которые в нем были:
-
Общие методы для элементов:
click(By locator)/click(String cssSelector)– обертки для клика с явным ожиданием.setValue(By locator, String text)– ввод текста с предварительной очисткой поля.getText(By locator)– безопасное получение текста элемента.
-
Явные ожидания (Waits):
protected SelenideElement waitForElement(By locator, int seconds) { return $(locator).shouldBe(visible, Duration.ofSeconds(seconds)); } protected boolean isElementPresent(By locator) { return $(locator).is(visible); } -
Навигация:
protected void openUrl(String path) { Selenide.open(Config.BASE_URL + path); } -
Работа с окнами и фреймами: Методы для переключения между окнами браузера и iframe.
-
Утилиты для скриншотов и логирования: Автоматическое снятие скриншота при падении теста, привязанного к конкретной странице, и запись в лог действий.
-
Инициализация элементов (для Selenium WebDriver): В чистом Selenium я добавлял в BasePage инициализацию
WebDriverиWebDriverWait, а также аннотацию@FindByдля общих элементов, например, хедера или футера сайта.
Главная цель BasePage – устранить дублирование кода и сделать классы конкретных страниц чище и удобнее для поддержки.