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 "

Python All - Your Ultimate Source to Python Programming
How to Use Subplot in MATLAB for Creating Multiple Plots in One Figure
Java JetBrains: изучаем основы программирования и разработки приложений
Checked CSS: стиль и безопасность в одном
Server Stats - бот для отслеживания статистики сервера на Discord
NPM TypeScript: удобное средство для разработки на TypeScript
Как перевести string в int: простой и понятный способ
Как сделать div по центру
Управление цветом границ с помощью CSS