В классе Base Page обычно реализуют базовые методы и свойства, которые будут использоваться на всех страницах в тестах автоматизации. Это помогает избежать дублирования кода и упростить поддержку.
def __init__(self, page) -> None:
В классе 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 классы.