Middle
Was ist das Page Object Pattern?
sobes.tech KI
Antwort von AI
Das Page Object (PO)-Muster ist ein Entwurfsmuster für die Automatisierungstests von Webschnittstellen, das Webseiten als Klassen darstellt. Jede PO-Klasse kapselt die Elemente und Aktionen, die der Benutzer auf einer bestimmten Seite ausführt.
Vorteile der Verwendung:
- Lesbarkeit: Der Testcode wird verständlicher, da er mit den Seiten und deren Elementen über High-Level-Methoden interagiert.
- Wartbarkeit: Bei Änderungen an den Element-Lokatoren auf der Seite müssen nur die entsprechenden Page-Object-Klassen angepasst werden, ohne die Tests zu ändern.
- Wiederverwendbarkeit: Methoden und Elemente des Page Object können in verschiedenen Testszenarien genutzt werden.
- Aufgabentrennung: Die Logik der Interaktion mit UI-Elementen ist von der Testlogik getrennt.
Hauptkomponenten:
- Seitenklassen: Stellen eine Abstraktion einer konkreten Webseite dar.
- Web-Elemente: Werden innerhalb der Seitenklasse mit Lokatoren (XPath, CSS-Selektoren, ID usw.) definiert.
- Methoden: Repräsentieren Aktionen, die auf der Seite ausgeführt werden können (z.B.
login(),addToCart(),search()). Diese Methoden interagieren mit den Web-Elementen.
Beispielstruktur:
# login_page.py
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username") # Locator für das Eingabefeld für den Benutzernamen
self.password_input = (By.ID, "password") # Locator für das Eingabefeld für das Passwort
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Locator für den Login-Button
self.error_message = (By.CSS_SELECTOR, ".error-message") # Locator für die Fehlermeldung
def open(self, url):
self.driver.get(url) # Öffnet die Seite
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Gibt den Benutzernamen ein
self.driver.find_element(*self.password_input).send_keys(password) # Gibt das Passwort ein
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Klickt auf den Login-Button
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Holt den Text der Fehlermeldung
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Import der Page Object-Klasse
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Initialisiert den WebDriver
self.login_page = LoginPage(self.driver) # Erstellt eine Instanz des Page Objects
def tearDown(self):
self.driver.quit() # Schließt den WebDriver
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Öffnet die Seite
self.login_page.enter_credentials("valid_user", "valid_password") # Gibt die Daten ein
self.login_page.click_login_button() # Klickt auf den Button
# Zusätzliche Überprüfungen nach erfolgreichem Login
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Öffnet die Seite
self.login_page.enter_credentials("invalid_user", "wrong_password") # Gibt die Daten ein
self.login_page.click_login_button() # Klickt auf den Button
error_text = self.login_page.get_error_message() # Holt den Fehlertext
self.assertIn("Ungültige Anmeldedaten", error_text) # Überprüft die Fehlermeldung
if __name__ == "__main__":
unittest.main()
Dieses Beispiel zeigt, wie LoginPage als Page Object für die Login-Seite dient. Die Tests in test_login.py verwenden die Methoden dieser Klasse, um die Interaktion zu abstrahieren.
Das Page Object Muster ist ein De-facto-Standard in der Automatisierung von Web-Interface-Tests, das durch seine Vorteile in Wartbarkeit und Lesbarkeit geprägt ist.