Senior
Ce este Modelul de Politică (PM)?
sobes.tech AI
Răspuns de la AI
Modelul Politicii (PM) în contextul testelor automatizate este o extensie a Modelului Obiectului de Pagină (POM). Ideea principală este de a separa politicile sau regulile de afaceri pentru interacțiunea cu elementele paginii (și comportamentul asociat acestor politici) de obiectele de pagină în sine.
În loc să includă verificări și logică complexă direct în Obiectele de Pagină, aceste reguli sunt mutate în clase sau module separate — Obiecte de Politică.
Avantajele acestei abordări:
- Mai bună lizibilitate: Scenariile de testare devin mai simple și mai ușor de înțeles, deoarece se concentrează pe acțiunea descrisă, nu pe validarea acesteia.
- Reutilizare: Politicile pot fi utilizate pentru diferite Obiecte de Pagină sau în diferite scenarii de testare.
- Separarea responsabilităților: Obiectele de Pagină răspund doar pentru interacțiunea cu elementele paginii, în timp ce Obiectele de Politică se ocupă de reguli și validări.
- Ușurința întreținerii: Modificarea unei reguli de afaceri necesită schimbarea doar a Obiectului de Politică, nu a tuturor Obiectelor de Pagină în care se aplică această regulă.
- Mai bună scalabilitate: Este mai ușor să gestionezi un număr mai mare de teste și pagini pe măsură ce aplicația evoluează.
Structura PM poate arăta astfel:
- Obiecte de Pagină: Reprezintă pagini sau module UI individuale. Conțin localizatori de elemente și metode pentru interacțiune cu acestea (de exemplu,
click_button(),enter_text()). Nu conțin logică de validare. - Obiecte de Politică: Reprezintă reguli sau politici de afaceri. Conțin metode pentru verificarea stării UI sau efectuarea de acțiuni bazate pe logica de afaceri (de exemplu,
is_user_logged_in(),can_submit_form(),perform_checkout()). Pot folosi unul sau mai multe Obiecte de Pagină. - Teste: Utilizează Obiecte de Politică pentru a executa scenarii care includ verificări și logică de afaceri.
Exemplu (pseudocod):
# Obiect de Pagină
class LoginPage:
def enter_username(self, username):
# interacționează cu câmpul de nume de utilizator
pass
def enter_password(self, password):
# interacționează cu câmpul de parolă
pass
def click_login_button(self):
# interacționează cu butonul de login
pass
# Obiect de Politică
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Presupunem că DashboardPage există
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()
# Potențial adăugați verificări aici sau în metode separate
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Verifică dacă elementele panoului de control sunt vizibile
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(), "Utilizatorul ar trebui să fie conectat"