Наиболее распространенные шаблоны проектирования в тестировании
Page Object
Page Object - это паттерн проектирования, который используется для управления веб-страницами в автоматизированных тестах. Основная идея заключается в том, что каждая страница вашего веб-приложения представлена объектом (Page Object), который инкапсулирует логику взаимодействия с элементами на этой странице.
Преимущества:
Облегчает обслуживание кода: Если изменится внешний вид или логика работы страницы, нужно будет вносить изменения только в соответствующий Page Object, а не в каждый тест.
Повышает читаемость тестов: Логика взаимодействия с элементами вынесена в методы объекта страницы, что делает тесты более читаемыми и понятными.
Пример:
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_field = "username"
self.password_field = "password"
self.login_button = "loginButton"
def login(self, username, password):
self.driver.find_element_by_id(self.username_field).send_keys(username)
self.driver.find_element_by_id(self.password_field).send_keys(password)
self.driver.find_element_by_id(self.login_button).click()
Page Factory
Page Factory - это паттерн, который расширяет концепцию Page Object, добавляя возможность автоматического инициализации элементов страницы. Он позволяет автоматизировать процесс инициализации элементов и делает код Page Object более модульным.
Преимущества:
Упрощает код: Использование Page Factory позволяет избавиться от дублирования кода и сделать его более чистым и модульным.
Снижает вероятность ошибок: Паттерн позволяет избежать ошибок, связанных с неправильным обращением к элементам страницы.
Пример:
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:
def __init__(self, driver):
self.driver = driver
self.username_field = (By.ID, "username")
self.password_field = (By.ID, "password")
self.login_button = (By.ID, "loginButton")
def login(self, username, password):
self.driver.find_element(*self.username_field).send_keys(username)
self.driver.find_element(*self.password_field).send_keys(password)
self.driver.find_element(*self.login_button).click()
def is_login_page_loaded(self):
return WebDriverWait(self.driver, 10).until(EC.presence_of_element_located(self.username_field))
Singleton
Singleton - это паттерн проектирования, который позволяет создавать только один экземпляр класса и предоставлять к нему глобальную точку доступа. В контексте автоматизации тестирования он может использоваться для создания единственного экземпляра WebDriver, который будет использоваться во всех тестах.
Преимущества:
Гарантирует наличие только одного экземпляра класса: Это позволяет избежать создания лишних экземпляров и экономит ресурсы.
Обеспечивает глобальный доступ: Экземпляр класса доступен из любой точки программы.
Пример:
from selenium import webdriver
class WebDriverSingleton:
_instance = None
@classmethod
def get_instance(cls):
if cls._instance is None:
cls._instance = webdriver.Chrome() # Или любой другой браузер
return cls._instance
# Использование:
driver = WebDriverSingleton.get_instance()
driver.get("http://www.example.com")
Last updated
Was this helpful?