Was ist das Page Object Pattern?
sobes.tech KI
Antwort von AI
Das Page Object-Muster ist ein Entwurfsmuster, das verwendet wird, um die Lesbarkeit, Wartbarkeit zu verbessern und die Code-Duplikation bei der Testautomatisierung von Webanwendungen zu reduzieren. Es ist ein objektorientierter Ansatz, bei dem jede Seite (oder bedeutendes Element) der Webanwendung durch eine Klasse dargestellt wird.
Hauptideen des Page Object:
- Kapselung der Seitenelemente und der Aktionen, die mit ihnen durchgeführt werden können.
- Trennung der Element-Lokatoren und der Geschäftslogik der Tests.
- Bereitstellung einer High-Level-API für die Interaktion mit der Seite.
Vorteile der Verwendung von Page Object:
- Verbesserung der Lesbarkeit der Tests: Tests werden deklarativer, indem sie die Schritte der Interaktion mit der Benutzeroberfläche in Business-Sprache beschreiben.
- Verbesserung der Wartbarkeit: Wenn sich die UI ändert (z.B. der Lokator eines Elements), muss die Änderung nur in einer einzigen Page-Object-Klasse vorgenommen werden, nicht in jedem Test, der dieses Element verwendet.
- Reduzierung der Code-Duplikation: Gemeinsame Aktionen mit der Seite sind in Page-Object-Methoden gekapselt und können in verschiedenen Tests wiederverwendet werden.
- Erhöhung der Stabilität der Tests: Durch Abstraktion der UI-Implementierungsdetails.
Beispielstruktur:
Angenommen, wir haben eine Login-Seite. Wir können eine Klasse LoginPage erstellen.
# 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")
self.password_input = (By.ID, "password")
self.login_button = (By.XPATH, "//button[text()='Login']")
def set_username(self, username):
self.driver.find_element(*self.username_input).send_keys(username)
def set_password(self, password):
self.driver.find_element(*self.password_input).send_keys(password)
def click_login_button(self):
self.driver.find_element(*self.login_button).click()
def login(self, username, password):
self.set_username(username)
self.set_password(password)
self.click_login_button()
Verwendung im Test:
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("http://example.com/login")
def test_valid_login(self):
login_page = LoginPage(self.driver)
login_page.login("valid_user", "valid_password")
# Überprüfung des erfolgreichen Logins
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Hier kapselt die Klasse LoginPage die Lokatoren und Aktionen im Zusammenhang mit der Login-Seite. Der Test test_valid_login interagiert mit LoginPage über hochrangige Methoden wie login. Wenn sich der Lokator des Benutzernamensfeldes ändert, muss nur dieser in LoginPage angepasst werden.