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