Page Object: принципы, примеры и лучшие практики

Page Object - это шаблон проектирования в автоматизации тестирования, который помогает создавать поддерживаемые и удобочитаемые тесты. Он позволяет абстрагировать логику каждой страницы в отдельный класс, который содержит все эле­менты управления и действия, доступные на этой странице.

Page Object включает в себя следующие элементы:

1. Локаторы - это селекторы, которые используются для идентификации элементов управления на странице. Локаторы можно использовать для поиска элементов с помощью CSS селекторов, XPath выражений, id и т. д. Примеры локаторов:

CSS Selector: `input[type='text']`

XPath: `//*[@id='element_id']`

ID: `element_id`

2. Элементы - это объекты, которые представляют отдельные элементы управления на странице, такие как кнопки, текстовые поля, выпадающие списки и т. д. Для каждого элемента управления создается соответствующий объект Page Object. Примеры элементов:

python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = driver.find_element(By.CSS_SELECTOR, 'input[name="username"]')
        self.password_input = driver.find_element(By.CSS_SELECTOR, 'input[name="password"]')
        self.login_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
class HomePage:
    def __init__(self, driver):
        self.driver = driver
        self.logout_button = driver.find_element(By.CSS_SELECTOR, 'a[href="/logout"]')
        self.username_label = driver.find_element(By.CSS_SELECTOR, '.username-label')
        self.dropdown_list = Select(driver.find_element(By.CSS_SELECTOR, 'select[name="dropdown"]'))

3. Методы - это функции, которые выполняют определенные действия на странице, такие как заполнение полей, клики на кнопки, выбор значений из выпадающих списков и т. д. Методы Page Object могут использовать элементы и локаторы для выполнения этих действий. Примеры методов:

python
class LoginPage:
    # ...
    def enter_username(self, username):
        self.username_input.clear()
        self.username_input.send_keys(username)
    def enter_password(self, password):
        self.password_input.clear()
        self.password_input.send_keys(password)
    def click_login_button(self):
        self.login_button.click()
class HomePage:
    # ...
    def click_logout_button(self):
        self.logout_button.click()
    def get_username_label_text(self):
        return self.username_label.text
    def select_dropdown_option(self, value):
        self.dropdown_list.select_by_value(value)

С использованием Page Object позволяет создавать более читаемые и удобные тесты, так как логика каждой страницы инкапсулирована в соответствующем классе Page Object, а методы предоставляют удобный интерфейс для взаимодействия с элементами управления на странице. Кроме того, это позволяет легко поддерживать автоматизированные тесты при внесении изменений в пользовательский интерфейс, так как все изменения можно вносить только в соответствующие классы Page Object без необходимости вносить изменения во всех тестах связанных с этой страницей.

Пример использования Page Object в автоматизированном тесте:

python
from selenium import webdriver
from pages import LoginPage, HomePage
# Инициализация драйвера и открытие страницы
driver = webdriver.Chrome()
driver.get("https://www.example.com/login")
# Создание экземпляра Page Object для страницы входа
login_page = LoginPage(driver)
# Заполнение полей ввода и нажатие кнопки входа
login_page.enter_username("user123")
login_page.enter_password("password")
login_page.click_login_button()
# Создание экземпляра Page Object для домашней страницы
home_page = HomePage(driver)
# Проверка, что пользователь авторизован
assert home_page.get_username_label_text() == "Welcome, user123"
# Выполнение других действий на домашней странице
home_page.click_logout_button()
# Закрытие браузера
driver.quit()

Таким образом, использование Page Object позволяет упростить и структурировать автоматизированные тесты, делая их более надежными и легкими в поддержке и расширении.

Похожие вопросы на: "page object "

Ульти-кирпичи страницы: всё о применении ul на сайте
Что такое bool и как он работает в программировании?
Browser Version Checker
Left Outer Join: Understanding its Role in SQL Joins
JS проверка на число: Как проверить, является ли значение числом с помощью JavaScript
Kotlin Data Class - Streamline Your Code with Built-in Methods
Drag the Elements: The Ultimate Tool for Effortless Design Creation
Git: как отменить коммит
localecompare: сравнение локалей для многоязычных веб-сайтов
MySQL Connect - простой гайд по подключению к базе данных MySQL