def __init__(self, page) -> None:

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

def init(self, page) -> None: super().init(page)

# ищу заголовок именно внутри блока контента
# в layout выше по дереву висит плашка с сообщением, и если туда когда-нибудь
# добавят ещё один заголовок, голый locator("h2") станет неоднозначным
self.heading = page.locator("#content h2")
self.subheader = page.locator("#content h4.subheader")

# в задании этот элемент назван кнопкой, но в вёрстке это ссылка
# <a class="button secondary radius" href="/logout">, просто стилизованная под кнопку
# поэтому роль тут link, get_by_role("button", name="Logout") ничего не найдёт
self.logout_button = page.get_by_role("link", name="Logout")

self.flash_message = page.locator("#flash")

def logout(self): # импортирую внутри метода, а не сверху файла # причина: login_page уже импортирует secure_page, и если тут добавить обратный # импорт на уровне модуля, получится кольцо и питон упадёт на старте from pages.login_page import LoginPage

Ответ

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

Типичные методы и свойства:

  • Конструктор: принимает WebDriver или аналогичный объект для взаимодействия с браузером.
  • Метод ожидания элемента: например, waitForElement(locator), который ждет появления элемента на странице.
  • Метод клика по элементу: click(locator) с дополнительной проверкой доступности элемента.
  • Метод ввода текста: enterText(locator, text) для заполнения полей.
  • Метод получения текста элемента: getText(locator).
  • Метод проверки видимости элемента: isVisible(locator).
  • Общие свойства: например, базовый URL, таймауты ожидания.

Пример на Python с Selenium:

class BasePage:
    def __init__(self, driver):
        self.driver = driver

    def wait_for_element(self, locator, timeout=10):
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC
        return WebDriverWait(self.driver, timeout).until(EC.presence_of_element_located(locator))

    def click(self, locator):
        element = self.wait_for_element(locator)
        element.click()

    def enter_text(self, locator, text):
        element = self.wait_for_element(locator)
        element.clear()
        element.send_keys(text)

    def get_text(self, locator):
        element = self.wait_for_element(locator)
        return element.text

    def is_visible(self, locator):
        try:
            element = self.wait_for_element(locator)
            return element.is_displayed()
        except:
            return False

Такой класс служит основой для всех страниц, от которых наследуются конкретные Page Object классы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее