Middle
Co je to vzorec Page Object?
sobes.tech AI
Odpověď od AI
Vzor Page Object (PO) je návrhový vzor pre automatizované testovanie webových rozhraní, ktorý predstavuje webové stránky ako triedy. Každá trieda PO kapsuluje prvky a akcie vykonávané používateľom na konkrétnej stránke.
Výhody používania:
- Čitateľnosť: Testovací kód je prehľadnejší, pretože interaguje so stránkami a ich prvkami cez vysokorúrovňové metódy.
- Udržiavateľnosť: Pri zmene locatorov prvkov na stránke stačí upraviť len príslušnú triedu Page Object, nie je potrebné prepisovať testy, ktoré tieto prvky používajú.
- Opätovná použiteľnosť: Metódy a prvky Page Object môžu byť použité v rôznych testovacích scenároch.
- Rozdelenie zodpovedností: Logika interakcie s UI prvkami je oddelená od logiky testovacieho scenára.
Hlavné komponenty:
- Triedy stránok: Predstavujú abstrakciu konkrétnej webovej stránky.
- Webové prvky: Sú definované v triede stránky pomocou locatorov (XPath, CSS selektory, ID a pod.).
- Metódy: Predstavujú akcie, ktoré je možné vykonať na stránke (napríklad
login(),addToCart(),search()). Tieto metódy interagujú s webovými prvkami.
Príklad štruktúry:
# 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") # Locator poľa pre používateľské meno
self.password_input = (By.ID, "password") # Locator poľa pre heslo
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Locator tlačidla prihlásenia
self.error_message = (By.CSS_SELECTOR, ".error-message") # Locator chybovej správy
def open(self, url):
self.driver.get(url) # Otvorí stránku
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Zadá používateľské meno
self.driver.find_element(*self.password_input).send_keys(password) # Zadá heslo
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Klikne na tlačidlo prihlásenia
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Získa text chybovej správy
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Import triedy Page Object
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Inicializácia ovládača
self.login_page = LoginPage(self.driver) # Vytvorenie inštancie Page Object
def tearDown(self):
self.driver.quit() # Ukončenie ovládača
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Otvorí stránku
self.login_page.enter_credentials("valid_user", "valid_password") # Zadá údaje
self.login_page.click_login_button() # Klikne na tlačidlo
# Ďalšie kontroly po úspešnom prihlásení
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Otvorí stránku
self.login_page.enter_credentials("invalid_user", "wrong_password") # Zadá údaje
self.login_page.click_login_button() # Klikne na tlačidlo
error_text = self.login_page.get_error_message() # Získa text chyby
self.assertIn("Nesprávne používateľské meno alebo heslo", error_text) # Kontrola správy chyby
if __name__ == "__main__":
unittest.main()
V tomto príklade predstavuje LoginPage Page Object pre prihlasovaciu stránku. Testy v test_login.py používajú metódy tejto triedy, čím sa skrývajú detaily interakcie s prvkami.
Vzor Page Object je štandardom v automatizácii testovania webových rozhraní vďaka svojim výhodám v oblasti údržby a čitateľnosti.