Sobes.tech
Senior

Wat is het Policy Model (PM)?

sobes.tech AI

Antwoord van AI

Het Policy Model (PM) in de context van geautomatiseerde tests is een uitbreiding van het Page Object Model (POM). Het belangrijkste idee is om beleidslijnen of bedrijfsregels voor interactie met de pagina-elementen (en het gedrag dat met deze beleidslijnen verband houdt) te scheiden van de pagina-objecten zelf.

In plaats van controles en complexe logica direct in Page Objects te integreren, worden deze regels ondergebracht in aparte klassen of modules — Policy Objects.

Voordelen van deze aanpak:

  • Betere leesbaarheid: Testscenario's worden eenvoudiger en makkelijker te begrijpen, omdat ze zich richten op de beschreven actie, niet op de validatie ervan.
  • Herbruikbaarheid: Beleidslijnen kunnen voor verschillende Page Objects of in verschillende testscenario's worden gebruikt.
  • Verantwoordelijkheden scheiden: Page Objects zijn alleen verantwoordelijk voor interactie met de pagina-elementen, terwijl Policy Objects verantwoordelijk zijn voor regels en validaties.
  • Onderhoudsgemak: Het wijzigen van een bedrijfsregel vereist alleen het aanpassen van het Policy Object, niet alle Page Objects waar deze regel wordt toegepast.
  • Betere schaalbaarheid: Het is makkelijker om een groter aantal tests en pagina's te beheren naarmate de applicatie groeit.

De structuur van PM kan er als volgt uitzien:

  • Page Objects: Vertegenwoordigen afzonderlijke pagina's of UI-modules. Bevatten locators van elementen en methoden voor interactie ermee (bijvoorbeeld click_button(), enter_text()). Bevatten geen validatielogica.
  • Policy Objects: Vertegenwoordigen bedrijfsregels of beleidslijnen. Bevatten methoden om de UI-status te controleren of acties uit te voeren op basis van bedrijfslogica (bijvoorbeeld is_user_logged_in(), can_submit_form(), perform_checkout()). Ze kunnen één of meerdere Page Objects gebruiken.
  • Tests: Gebruiken Policy Objects om scenario's uit te voeren die controles en bedrijfslogica bevatten.

Voorbeeld (pseudocode):

# Page Object
class LoginPage:
    def enter_username(self, username):
        # interactie met gebruikersnaamveld
        pass

    def enter_password(self, password):
        # interactie met wachtwoordveld
        pass

    def click_login_button(self):
        # interactie met loginknop
        pass

# Policy Object
class AuthPolicy:
    def __init__(self, driver):
        self.login_page = LoginPage(driver)
        self.dashboard_page = DashboardPage(driver) # Aangenomen dat DashboardPage bestaat

    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()
        # Mogelijk hier of in aparte methoden controles toevoegen
        # return self.is_user_logged_in()

    def is_user_logged_in(self):
        # Controleer of dashboard-elementen zichtbaar zijn
        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(), "Gebruiker zou ingelogd moeten zijn"