Sobes.tech
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"