Sobes.tech
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.