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ý"