Что такое 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?