Wat is het Page Object-patroon?
sobes.tech AI
Antwoord van AI
Het Page Object-patroon is een ontwerppatroon dat wordt gebruikt om de leesbaarheid, onderhoudbaarheid te verbeteren en duplicatie van code te verminderen bij het automatiseren van tests voor webapplicaties. Het is een objectgeoriënteerde aanpak waarbij elke pagina (of belangrijke component) van de webapplicatie wordt weergegeven door een aparte klasse.
Belangrijkste ideeën van het Page Object:
- Encapsulatie van pagina-elementen en acties die ermee kunnen worden uitgevoerd.
- Scheiding van element-lokalisatoren en de bedrijfslogica van de tests.
- Bieden van een high-level API voor interactie met de pagina.
Voordelen van het gebruik van het Page Object:
- Verbeterde leesbaarheid van tests: Tests worden meer declaratief, waarbij de stappen van interactie met de gebruikersinterface worden beschreven in zakelijke taal.
- Verbeterde onderhoudbaarheid: Wanneer de UI verandert (bijvoorbeeld de locator van een element), hoeft dit slechts op één plek in de Page Object-klasse te worden aangepast, niet in elke test die dat element gebruikt.
- Vermindering van code duplicatie: Gemeenschappelijke acties met de pagina worden ingekapseld in Page Object-methoden en kunnen in verschillende tests worden hergebruikt.
- Verhoogde stabiliteit van tests: Dankzij abstractie van UI-implementatiedetails.
Voorbeeldstructuur:
Stel dat we een inlogpagina hebben. We kunnen een LoginPage-klasse maken.
# 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(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()
Gebruik in de 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")
# Controleer succesvolle login
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Hier kapselt de klasse LoginPage de locators en acties gerelateerd aan de inlogpagina. De test test_valid_login werkt via de hoge-niveau methoden zoals login. Als de locator van het gebruikersnaamveld verandert, hoeft dat alleen in LoginPage te worden aangepast.