Middle
Паттерни Page Object чист?
sobes.tech AI
Ҷавоб аз AI
Шаблони Page Object (PO) як намуна барои тарҳрезии автоматизатсияии озмоишҳои интерфейси веб мебошад, ки саҳифаҳои вебро ҳамчун синфҳо муаррифӣ мекунад. Ҳар як синфи PO элементҳо ва амалҳоро, ки корбар дар саҳифаи муайян иҷро мекунад, инкапсулейт мекунад.
Афзалиятҳои истифода:
- Қитъасозӣ: Кодекси озмоишӣ ба осонӣ фаҳмидан мешавад, зеро он бо саҳифаҳо ва элементҳои онҳо тавассути усулҳои сатҳи баланд муошират мекунад.
- Дастгирӣ: Ҳангоми тағирёбии локаторҳои элементҳо дар саҳифа, ислоҳот танҳо дар синфи мувофиқи Page Object анҷом дода мешавад, бе ниёз ба навиштани дубора тестҳо, ки ин элементҳоро истифода мебаранд.
- Истифодаи такрорӣ: Усули ва элементҳои Page Object метавонанд дар сценарийҳои гуногуни тест истифода шаванд.
- Таҳлили масъулиятҳо: Логикаи муошират бо элементҳои UI аз логикаи сценарии тест ҷудо карда шудааст.
Компонентҳои асосӣ:
- Классҳои саҳифа: Абстраксияи саҳифаи веб муайянро муаррифӣ мекунанд.
- Элементҳои веб: Дар дохили синфи саҳифа бо истифода аз локаторҳо (XPath, CSS-селекторҳо, ID ва ғайра) муайян карда мешаванд.
- Усули: Амалҳое, ки метавон дар саҳифа иҷро кард (масалан,
login(),addToCart(),search()). Ин усулҳо бо элементҳои веб муошират мекунанд.
Намунаи сохтор:
# login_page.py
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.XPATH, "//button[contains(text(), 'Login')]") # Локатор барои тугмаи воридшавӣ
self.error_message = (By.CSS_SELECTOR, ".error-message") # Локатор барои паёми хато
def open(self, url):
self.driver.get(url) # Омадани саҳифа
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Ворид кардани номи корбар
self.driver.find_element(*self.password_input).send_keys(password) # Ворид кардани парол
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Касб кардани тугмаи воридшавӣ
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Гирифтани матни паёми хато
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Импорти синфи Page Object
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Инициализатсияи драйвер
self.login_page = LoginPage(self.driver) # Эҷоди намунаи Page Object
def tearDown(self):
self.driver.quit() # Баста кардани драйвер
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Омадани саҳифа
self.login_page.enter_credentials("valid_user", "valid_password") # Ворид кардани маълумот
self.login_page.click_login_button() # Касб кардани тугма
# Санҷишҳои иловагӣ пас аз воридшавии муваффақ
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Омадани саҳифа
self.login_page.enter_credentials("invalid_user", "wrong_password") # Ворид кардани маълумот
self.login_page.click_login_button() # Касб кардани тугма
error_text = self.login_page.get_error_message() # Гирифтани матни хато
self.assertIn("Номи корбар ё парол нодуруст аст", error_text) # Санҷиши паёми хато
if __name__ == "__main__":
unittest.main()
Дар ин мисол, LoginPage намояндагии Page Object барои саҳифаи воридшавӣ мебошад. Тестҳо дар test_login.py усулҳои ин синфро истифода мебаранд, то тафсилоти муошират бо элементҳоро пинҳон кунанд.
Модели Page Object дар автоматизатсияи тестҳои интерфейси веб ҳамчун стандарт қабул шудааст, ки ба он дар нигоҳдории тестҳо ва хонданашон кӯмак мекунад.