Qu'est-ce que le pattern Page Object?
sobes.tech IA
Réponse de l'IA
Le modèle Page Object est un patron de conception utilisé pour améliorer la lisibilité, la maintenabilité et réduire la duplication de code dans l'automatisation des tests d'applications web. Il s'agit d'une approche orientée objet où chaque page (ou composant significatif) de l'application web est représentée par une classe.
Idées principales du Page Object :
- Encapsulation des éléments de la page et des actions pouvant être effectuées avec eux.
- Séparation des localisateurs d'éléments et de la logique métier des tests.
- Fournir une API de haut niveau pour interagir avec la page.
Avantages de l'utilisation du Page Object :
- Amélioration de la lisibilité des tests : Les tests deviennent plus déclaratifs, décrivant les étapes d'interaction avec l'interface utilisateur en langage métier.
- Amélioration de la maintenabilité : Lorsqu'il y a un changement dans l'UI (par exemple, le localisateur d'un élément), il suffit de faire la modification dans une seule classe Page Object, plutôt que dans chaque test utilisant cet élément.
- Réduction de la duplication de code : Les actions communes avec la page sont encapsulées dans des méthodes de Page Object et peuvent être réutilisées dans différents tests.
- Augmentation de la stabilité des tests : Grâce à l'abstraction des détails de l'implémentation UI.
Exemple de structure :
Supposons que nous ayons une page de connexion. Nous pouvons créer une classe LoginPage.
# 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()
Utilisation dans le 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")
# Vérification de la connexion réussie
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Ici, la classe LoginPage encapsule les localisateurs et actions liés à la page de connexion. Le test test_valid_login interagit avec LoginPage via des méthodes de haut niveau comme login. Si le localisateur du champ utilisateur change, il suffira de le modifier uniquement dans LoginPage.