Sobes.tech
Senior

Co je to Policy Model (PM)?

sobes.tech AI

Odpověď od AI

Model politiky (PM) v kontextu automatizovaného testování je rozšířením Page Object Model (POM). Hlavní myšlenkou je oddělení politik nebo obchodních pravidel interakce s prvky stránky (a chování s tím spojené) od samotných objektů stránek.

Namísto začlenění kontrol a složité logiky přímo do Page Objectů jsou tato pravidla přesunuta do samostatných tříd nebo modulů — Policy Objects.

Výhody tohoto přístupu:

  • Zlepšená čitelnost: Testovací scénáře jsou jednodušší a srozumitelnější, protože se zaměřují na popisované akce, nikoli na jejich validaci.
  • Opakované použití: Politiky mohou být použity pro různé Page objekty nebo v různých testovacích scénářích.
  • Oddělení odpovědností: Page objekty odpovídají pouze za interakci s prvky stránky, zatímco Policy objekty za pravidla a validaci.
  • Zjednodušení údržby: Změna obchodního pravidla vyžaduje změnu pouze Policy Object, nikoli všech Page objektů, kde je pravidlo použito.
  • Lepší škálovatelnost: Snadnější správa většího množství testů a stránek s rozvojem aplikace.

Struktura PM může vypadat takto:

  • Page objekty: Představují jednotlivé stránky nebo UI moduly. Obsahují lokátory prvků a metody pro jejich interakci (např. click_button(), enter_text()). Neobsahují logiku kontrol.
  • Policy objekty: Představují obchodní pravidla nebo politiky. Obsahují metody pro kontrolu stavu UI nebo provádění akcí založených na obchodní logice (např. is_user_logged_in(), can_submit_form(), perform_checkout()). Mohou používat jeden nebo více Page objektů.
  • Testy: Používají Policy objekty k provádění scénářů, které zahrnují kontroly a obchodní logiku.

Příklad (pseudokód):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # interakce s polem uživatelského jména
        pass

    def enter_password(self, password):
        # interakce s polem hesla
        pass

    def click_login_button(self):
        # interakce s tlačítkem přihlášení
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Předpokládá se existence DashboardPage

    def login_as_user(self, username, password):
        self.login_page.enter_username(username)
        self.login_page.enter_password(password)
        self.login_page.click_login_button()
        # Přidat kontroly zde nebo v samostatných metodách
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Kontrola, zda jsou viditelné prvky dashboardu
        return self.dashboard_page.is_dashboard_displayed()

# Test
class LoginTest:
    def test_successful_login(self, driver):
        auth_policy = AuthPolicy(driver)
        auth_policy.login_as_user("test_user", "password123")
        assert auth_policy.is_user_logged_in(), "Uživatel by měl být přihlášen"