Cos'è il pattern Page Object?
sobes.tech AI
Risposta dell'AI
Il pattern Page Object è un modello di progettazione utilizzato per migliorare la leggibilità, la manutenibilità e ridurre la duplicazione del codice nell'automazione dei test di applicazioni web. È un approccio orientato agli oggetti in cui ogni pagina (o componente significativo) dell'applicazione web è rappresentata da una classe.
Idee principali del Page Object:
- Incapsulamento degli elementi della pagina e delle azioni che possono essere eseguite con essi.
- Separazione dei localizzatori degli elementi e della logica di business dei test.
- Fornire un'API di alto livello per interagire con la pagina.
Vantaggi dell'uso del Page Object:
- Miglioramento della leggibilità dei test: I test diventano più dichiarativi, descrivendo i passaggi di interazione con l'interfaccia utente in linguaggio di business.
- Miglioramento della manutenibilità: Quando cambia l'UI (ad esempio, il localizzatore di un elemento), basta modificare in una sola classe Page Object, invece di in ogni test che utilizza quell'elemento.
- Riduzione della duplicazione del codice: Le azioni comuni con la pagina sono incapsulate in metodi di Page Object e possono essere riutilizzate in diversi test.
- Aumento della stabilità dei test: Grazie all'astrazione dei dettagli di implementazione dell'UI.
Esempio di struttura:
Supponiamo di avere una pagina di login. Possiamo creare una 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()
Utilizzo nel 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")
# Verifica login riuscito
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Qui, la classe LoginPage incapsula i localizzatori e le azioni relative alla pagina di login. Il test test_valid_login interagisce con LoginPage tramite metodi di alto livello come login. Se il localizzatore del campo username cambia, basta modificarlo solo in LoginPage.