Middle
Qu'est-ce que le pattern Page Object?
sobes.tech IA
Réponse de l'IA
Le modèle Page Object (PO) est un patron de conception pour l’automatisation des tests d’interfaces web, qui représente les pages web sous forme de classes. Chaque classe PO encapsule les éléments et actions effectués par l’utilisateur sur une page spécifique.
Avantages de son utilisation :
- Lisibilité : Le code de test devient plus compréhensible, car il interagit avec les pages et leurs éléments via des méthodes de haut niveau.
- Facilité de maintenance : Lorsqu’un localisateur d’un élément change sur la page, il suffit de modifier la classe Page Object correspondante, sans avoir à réécrire les tests qui utilisent ces éléments.
- Réutilisation : Les méthodes et éléments du Page Object peuvent être utilisés dans différents scénarios de test.
- Séparation des responsabilités : La logique d’interaction avec les éléments UI est séparée de la logique du scénario de test.
Composants principaux :
- Classes de pages : Représentent une abstraction d’une page web spécifique.
- Éléments web : Définis à l’intérieur de la classe de la page en utilisant des localisateurs (XPath, sélecteurs CSS, ID, etc.).
- Méthodes : Représentent des actions pouvant être effectuées sur la page (par exemple,
login(),addToCart(),search()). Ces méthodes interagissent avec les éléments web.
Exemple de structure :
# 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") # Localisateur du champ de saisie du nom d’utilisateur
self.password_input = (By.ID, "password") # Localisateur du champ de saisie du mot de passe
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Localisateur du bouton de connexion
self.error_message = (By.CSS_SELECTOR, ".error-message") # Localisateur du message d’erreur
def open(self, url):
self.driver.get(url) # Ouvre la page
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Saisit le nom d’utilisateur
self.driver.find_element(*self.password_input).send_keys(password) # Saisit le mot de passe
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Clique sur le bouton de connexion
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Récupère le texte du message d’erreur
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Import de la classe Page Object
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Initialisation du driver
self.login_page = LoginPage(self.driver) # Création d’une instance de Page Object
def tearDown(self):
self.driver.quit() # Fermeture du driver
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Ouverture de la page
self.login_page.enter_credentials("valid_user", "valid_password") # Saisie des données
self.login_page.click_login_button() # Clic sur le bouton
# Vérifications supplémentaires après une connexion réussie
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Ouverture de la page
self.login_page.enter_credentials("invalid_user", "wrong_password") # Saisie des données
self.login_page.click_login_button() # Clic sur le bouton
error_text = self.login_page.get_error_message() # Récupération du texte d’erreur
self.assertIn("Identifiants incorrects", error_text) # Vérification du message d’erreur
if __name__ == "__main__":
unittest.main()
Dans cet exemple, LoginPage représente un Page Object pour la page de connexion. Les tests dans test_login.py utilisent les méthodes de cette classe, abstraites des détails d’interaction avec les éléments.
Le pattern Page Object est une norme de facto dans l’automatisation des tests d’interfaces web grâce à ses avantages en termes de maintenabilité et de lisibilité.