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"