Какие методы вы реализовывали в базовом классе страницы (Base Page) при использовании Selenium/Selenide?

«Какие методы вы реализовывали в базовом классе страницы (Base Page) при использовании Selenium/Selenide?» — вопрос из категории Selenium и Selenide, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При работе с Selenide (на Java) я создавал абстрактный класс BasePage, который инкапсулировал общую логику для всех Page Objects. Вот ключевые методы, которые в нем были:

  1. Общие методы для элементов:

    • click(By locator) / click(String cssSelector) – обертки для клика с явным ожиданием.
    • setValue(By locator, String text) – ввод текста с предварительной очисткой поля.
    • getText(By locator) – безопасное получение текста элемента.
  2. Явные ожидания (Waits):

    protected SelenideElement waitForElement(By locator, int seconds) {
        return $(locator).shouldBe(visible, Duration.ofSeconds(seconds));
    }
    
    protected boolean isElementPresent(By locator) {
        return $(locator).is(visible);
    }
  3. Навигация:

    protected void openUrl(String path) {
        Selenide.open(Config.BASE_URL + path);
    }
  4. Работа с окнами и фреймами: Методы для переключения между окнами браузера и iframe.

  5. Утилиты для скриншотов и логирования: Автоматическое снятие скриншота при падении теста, привязанного к конкретной странице, и запись в лог действий.

  6. Инициализация элементов (для Selenium WebDriver): В чистом Selenium я добавлял в BasePage инициализацию WebDriver и WebDriverWait, а также аннотацию @FindBy для общих элементов, например, хедера или футера сайта.

Главная цель BasePage – устранить дублирование кода и сделать классы конкретных страниц чище и удобнее для поддержки.