Senior
Cos'è il Modello di Policy (PM)?
sobes.tech AI
Risposta dell'AI
Il Modello di Politica (PM) nel contesto dei test automatizzati è un'estensione del Modello di Oggetto Pagina (POM). L'idea principale è separare le politiche o regole di business per interagire con gli elementi della pagina (e il comportamento associato a queste politiche) dagli oggetti di pagina stessi.
Invece di includere verifiche e logica complessa direttamente negli Oggetti di Pagina, queste regole vengono spostate in classi o moduli separati — Oggetti di Politica.
Vantaggi di questo approccio:
- Migliore leggibilità: Gli scenari di test diventano più semplici e facili da comprendere, poiché si concentrano sull'azione descritta, non sulla sua validazione.
- Riutilizzo: Le politiche possono essere utilizzate per diversi Oggetti di Pagina o in scenari di test differenti.
- Separazione delle responsabilità: Gli Oggetti di Pagina si occupano solo dell'interazione con gli elementi della pagina, mentre gli Oggetti di Politica si occupano delle regole e delle validazioni.
- Facilità di manutenzione: Modificare una regola di business richiede di modificare solo l'Oggetto di Politica, non tutti gli Oggetti di Pagina in cui questa regola viene applicata.
- Migliore scalabilità: È più facile gestire un numero maggiore di test e pagine man mano che l'applicazione si sviluppa.
La struttura del PM può essere così:
- Oggetti di Pagina: Rappresentano pagine o moduli UI singoli. Contengono localizzatori di elementi e metodi per interagire con essi (ad esempio,
click_button(),enter_text()). Non contengono logica di validazione. - Oggetti di Politica: Rappresentano regole o politiche di business. Contengono metodi per verificare lo stato dell'UI o eseguire azioni basate sulla logica di business (ad esempio,
is_user_logged_in(),can_submit_form(),perform_checkout()). Possono usare uno o più Oggetti di Pagina. - Test: Utilizzano Oggetti di Politica per eseguire scenari che includono verifiche e logica di business.
Esempio (pseudocodice):
# Oggetto di Pagina
class LoginPage:
def enter_username(self, username):
# interagire con il campo username
pass
def enter_password(self, password):
# interagire con il campo password
pass
def click_login_button(self):
# interagire con il pulsante di login
pass
# Oggetto di Politica
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Supponendo che DashboardPage esista
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()
# Potenzialmente aggiungere controlli qui o in metodi separati
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Controlla se gli elementi del dashboard sono visibili
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(), "L'utente dovrebbe essere loggato"