Senior
Was ist das Policy Model (PM)?
sobes.tech KI
Antwort von AI
Das Policy-Modell (PM) im Kontext automatisierter Tests ist eine Erweiterung des Page Object Model (POM). Die Hauptidee besteht darin, Politiken oder Geschäftsregeln für die Interaktion mit den Seitenelementen (und das damit verbundene Verhalten) von den eigentlichen Seitenobjekten zu trennen.
Anstatt Prüfungen und komplexe Logik direkt in Page Objects zu integrieren, werden diese Regeln in separate Klassen oder Module ausgelagert — Policy Objects.
Vorteile dieses Ansatzes:
- Verbesserte Lesbarkeit: Testszenarien werden einfacher und leichter verständlich, da sie sich auf die beschriebene Aktion konzentrieren und nicht auf deren Validierung.
- Wiederverwendbarkeit: Politiken können für verschiedene Page Objects oder in unterschiedlichen Testszenarien genutzt werden.
- Aufgabentrennung: Page Objects sind nur für die Interaktion mit den Seitenelementen verantwortlich, während Policy Objects die Regeln und Validierungen übernehmen.
- Wartungsvereinfachung: Änderungen an Geschäftsregeln erfordern nur die Änderung des Policy Objects, nicht aller Page Objects, in denen diese Regel angewendet wird.
- Bessere Skalierbarkeit: Es ist einfacher, eine größere Anzahl von Tests und Seiten zu verwalten, wenn die Anwendung wächst.
Die Struktur des PM könnte folgendermaßen aussehen:
- Page Objects: Stellen einzelne Seiten oder UI-Module dar. Enthalten Locator-Elemente und Methoden zur Interaktion (z.B.
click_button(),enter_text()). Enthalten keine Validierungslogik. - Policy Objects: Stellen Geschäftsregeln oder Politiken dar. Enthalten Methoden zur Überprüfung des UI-Zustands oder zur Ausführung von Aktionen basierend auf der Geschäftslogik (z.B.
is_user_logged_in(),can_submit_form(),perform_checkout()). Können ein oder mehrere Page Objects verwenden. - Tests: Verwenden Policy Objects, um Szenarien auszuführen, die Prüfungen und Geschäftslogik enthalten.
Beispiel (Pseudocode):
# Page Object
class LoginPage:
def enter_username(self, username):
# mit dem Benutzernamen-Feld interagieren
pass
def enter_password(self, password):
# mit dem Passwort-Feld interagieren
pass
def click_login_button(self):
# mit dem Login-Button interagieren
pass
# Policy Object
class AuthPolicy:
def __init__(self, driver):
self.login_page = LoginPage(driver)
self.dashboard_page = DashboardPage(driver) # Annahme, dass DashboardPage existiert
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()
# Eventuell hier oder in separaten Methoden Prüfungen hinzufügen
# return self.is_user_logged_in()
def is_user_logged_in(self):
# Überprüfen, ob Dashboard-Elemente sichtbar sind
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(), "Der Benutzer sollte eingeloggt sein"