Ответ
Page Object Model (POM) — это паттерн проектирования для автоматизации UI-тестов, который представляет каждую веб-страницу (или её компонент) в виде отдельного класса. Этот класс инкапсулирует:
- Локаторы элементов страницы (селекторы).
- Методы для взаимодействия с этими элементами.
Пример реализации на Python с Selenium:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class LoginPage:
# Локаторы элементов вынесены в атрибуты класса
USERNAME_INPUT = (By.ID, "username")
PASSWORD_INPUT = (By.ID, "password")
SUBMIT_BUTTON = (By.ID, "loginBtn")
ERROR_MESSAGE = (By.CLASS_NAME, "alert-error")
def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10)
# Метод, инкапсулирующий действие "логин"
def login(self, username, password):
self.driver.find_element(*self.USERNAME_INPUT).send_keys(username)
self.driver.find_element(*self.PASSWORD_INPUT).send_keys(password)
self.driver.find_element(*self.SUBMIT_BUTTON).click()
# Метод для получения текста ошибки
def get_error_message(self):
element = self.wait.until(EC.visibility_of_element_located(self.ERROR_MESSAGE))
return element.text
Преимущества POM:
- Повторное использование кода: Локаторы и методы страницы используются во всех тестах.
- Устойчивость к изменениям: Если изменится селектор, правка вносится только в одном классе Page Object.
- Читаемость тестов: Тестовые сценарии становятся краткими и понятными.
# Тест использует Page Object login_page = LoginPage(driver) login_page.login("test_user", "wrong_pass") assert "Invalid credentials" in login_page.get_error_message()