Sobes.tech
Senior

Čo je Policy Model (PM)?

sobes.tech AI

Odpoveď od AI

Model politiky (PM) v kontexte automatizovaného testovania je rozšírením Page Object Model (POM). Hlavná myšlienka je oddeliť politiky alebo obchodné pravidlá interakcie s prvkami stránky (a správanie s týmito politikami) od samotných objektov stránok.

Namiesto toho, aby sme zahrnuli kontroly a zložitú logiku priamo do Page Objects, tieto pravidlá sa presúvajú do samostatných tried alebo modulov — Policy Objects.

Výhody tohto prístupu:

  • Zlepšená čitateľnosť: Testovacie scenáre sú jednoduchšie a ľahšie na pochopenie, pretože sa zameriavajú na opisovanú akciu, nie na jej validáciu.
  • Opakovateľné použitie: Politiky môžu byť použité pre rôzne Page objekty alebo v rôznych testovacích scenároch.
  • Oddelenie zodpovedností: Page objekty sú zodpovedné iba za interakciu s prvkami stránky, zatiaľ čo Policy objekty za pravidlá a validáciu.
  • Zjednodušenie údržby: Zmena obchodného pravidla si vyžaduje zmenu iba v Policy Object, nie vo všetkých Page objektoch, kde sa toto pravidlo aplikuje.
  • Lepšia škálovateľnosť: Jednoduchšie spravovanie väčšieho množstva testov a stránok s rozvojom aplikácie.

Struktúra PM môže vyzerať takto:

  • Page objekty: Predstavujú jednotlivé stránky alebo UI moduly. Obsahujú lokátory prvkov a metódy na ich interakciu (napr. click_button(), enter_text()). Neobsahujú logiku kontrol.
  • Policy objekty: Predstavujú obchodné pravidlá alebo politiky. Obsahujú metódy na kontrolu stavu UI alebo vykonávanie akcií založených na obchodnej logike (napr. is_user_logged_in(), can_submit_form(), perform_checkout()). Môžu používať jeden alebo viac Page objektov.
  • Testy: Používajú Policy objekty na vykonanie scenárov, ktoré zahŕňajú kontroly a obchodnú logiku.

Príklad (pseudokód):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # interakcia s poľom používateľského mena
        pass

    def enter_password(self, password):
        # interakcia s poľom hesla
        pass

    def click_login_button(self):
        # interakcia s tlačidlom prihlásenia
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Predpokladá sa, že DashboardPage existuje

    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()
        # Môžete pridať kontroly tu alebo v samostatných metódach
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Kontrola, či sú viditeľné 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(), "Používateľ by mal byť prihlásený"