Senior
Kas ir Policy Model (PM)?
sobes.tech AI
Atbilde no AI
Politikas modeļa (PM) automatizētās testēšanas kontekstā ir Page Object Model (POM) paplašinājums. Galvenā ideja ir atdalīt politikas vai biznesa noteikumus, kas saistīti ar lapas elementu mijiedarbību (un ar šo politiku saistīto uzvedību), no pašu lapas objektiem.
Tā vietā, lai tieši iekļautu pārbaudes un sarežģītu loģiku Page Objectos, šie noteikumi tiek izdalīti atsevišķās klasēs vai moduļos — Policy Objects.
Šāda pieeja sniedz šādus ieguvumus:
- Labāka lasāmība: Testa scenāriji kļūst vienkāršāki un vieglāk saprotami, jo tie koncentrējas uz aprakstīto darbību, nevis uz tās validāciju.
- Atkārtota izmantošana: Politikas var tikt izmantotas dažādiem Page Objectiem vai dažādos testu scenārijos.
- Atbildības sadalījums: Page Objecti ir atbildīgi tikai par mijiedarbību ar lapas elementiem, bet Policy Objects — par noteikumiem un validāciju.
- Uzturēšanas vienkāršošana: Izmaiņas biznesa noteikumā prasa izmaiņas tikai Policy Object, nevis visos Page Objectos, kuros šis noteikums tiek piemērots.
- Labāka mērogojamība: Ir vieglāk pārvaldīt lielu skaitu testu un lapu, attīstoties lietotnei.
PM struktūra varētu izskatīties šādi:
- Page Objecti: Attēlo atsevišķas lapas vai UI moduļus. Satur elementu lokalizatorus un metodes to ar tiem mijiedarboties (piem.,
click_button(),enter_text()). Nav iekļauta pārbaudes loģika. - Policy Objecti: Attēlo biznesa noteikumus vai politikas. Satur metodes UI stāvokļa pārbaudei vai darbību veikšanai, balstoties uz biznesa loģiku (piem.,
is_user_logged_in(),can_submit_form(),perform_checkout()). Var izmantot vienu vai vairākus Page Objectus. - Testi: Izmanto Policy Objectus scenāriju īstenošanai, kas ietver pārbaudes un biznesa loģiku.
Piemērs (pseidonods):
# Page Object
class LoginPage:
def enter_username(self, username):
# mijiedarbība ar lietotāja vārda lauku
pass
def enter_password(self, password):
# mijiedarbība ar paroles lauku
pass
def click_login_button(self):
# mijiedarbība ar pieslēgšanās pogu
pass
# Policy Object
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Pieņem, ka DashboardPage pastāv
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()
# Šeit vai citur var pievienot pārbaudes
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Pārbaude, vai ir redzami dashboard elementi
return self.dashboard_page.is_dashboard_displayed()
# Tests
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(), "Lietotājs ir jābūt pieslēgtam"