Что такое PageObject и PageFactory?
1️⃣ Page Object (POM — Page Object Model)
Page Object — это паттерн проектирования, который описывает веб-страницу как объект в коде.
В классе Page Object хранятся:
элементы страницы (кнопки, поля ввода, ссылки)
методы для работы с ними (клики, ввод текста, проверки)
✅ Преимущества:
Код становится читабельным и поддерживаемым
Повторное использование: один раз описал метод, используешь в любом тесте
Легко менять локаторы — не нужно править тесты
Пример на Python + Selenium:
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.ID, "login-btn")
def enter_username(self, username):
self.driver.find_element(*self.username_input).send_keys(username)
def enter_password(self, password):
self.driver.find_element(*self.password_input).send_keys(password)
def click_login(self):
self.driver.find_element(*self.login_button).click()
2️⃣ PageFactory
PageFactory — это утилита/шаблон, который помогает автоматически инициализировать элементы страницы.
Обычно используется с аннотациями или специальными декораторами, чтобы не писать каждый
find_element
вручную.
✅ Преимущества:
Меньше шаблонного кода
Элементы инициализируются только при обращении к ним (lazy load)
Поддерживается в Java (Selenium) и Python (selenium.webdriver.support.page_factory)
Пример на Python:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.page_factory import PageFactory
class LoginPage(PageFactory):
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.ID, "login-btn")
После этого можно обращаться к элементам без явного
find_element
каждый раз.
🔹 Разница между POM и PageFactory:
Page Object
Страница как класс с методами и локаторами
Явно пишем find_element
в методах
PageFactory
Автоматическая инициализация элементов
Локаторы инициализируются автоматически, меньше кода
💡 Простая аналогия:
Page Object — это твоя карта страницы с руками, чтобы ты сам нажимал кнопки.
PageFactory — это робот, который сам нажимает кнопки по твоей карте, когда нужно.
Last updated
Was this helpful?