Middle
Čo je to vzorec Page Object?
sobes.tech AI
Odpoveď 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, bez potreby 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 odlíšená 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 interaguju 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 pre pole používateľského mena
self.password_input = (By.ID, "password") # Locator pre pole hesla
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Locator pre tlačidlo prihlásenia
self.error_message = (By.CSS_SELECTOR, ".error-message") # Locator pre chybové hlásenie
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 chybového hlásenia
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Importovanie 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") # Otvorenie stránky
self.login_page.enter_credentials("valid_user", "valid_password") # Zadanie údajov
self.login_page.click_login_button() # Klik na tlačidlo
# Ďalšie kontroly po úspešnom prihlásení
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Otvorenie stránky
self.login_page.enter_credentials("invalid_user", "wrong_password") # Zadanie údajov
self.login_page.click_login_button() # Klik na tlačidlo
error_text = self.login_page.get_error_message() # Získanie textu chyby
self.assertIn("Nesprávne používateľské meno alebo heslo", error_text) # Kontrola správy o chybe
if __name__ == "__main__":
unittest.main()
V tomto príklade predstavuje LoginPage Page Object pre stránku prihlásenia. Testy v test_login.py používajú metódy tejto triedy, čím sa skrývajú detaily interakcie s prvkami.
Model Page Object je štandardom v automatizácii testovania webových rozhraní vďaka svojim výhodám v oblasti údržby a čitateľnosti.