Middle
Ce este pattern-ul Page Object?
sobes.tech AI
Răspuns de la AI
Modelul Page Object (PO) — este un șablon de proiectare pentru testarea automată a interfețelor web, care reprezintă paginile web ca fiind clase. Fiecare clasă PO încapsulează elementele și acțiunile efectuate de utilizator pe o anumită pagină.
Beneficiile utilizării:
- Citibilitate: Codul testului devine mai ușor de înțeles, deoarece interacționează cu paginile și elementele lor prin metode de nivel înalt.
- Ușurința de întreținere: La schimbarea locatorilor elementelor de pe pagină, este suficient să se facă modificări doar în clasa corespunzătoare Page Object, fără a rescrie testele care utilizează aceste elemente.
- Reutilizare: Metodele și elementele din Page Object pot fi folosite în diferite scenarii de testare.
- Separarea responsabilităților: Logica de interacțiune cu elementele UI este separată de logica scenariului de test.
Componente principale:
- Clasele paginilor: Reprezintă o abstracție a unei pagini web specifice.
- Elemente web: Sunt definite în interiorul clasei paginii folosind locatorii (XPath, CSS-selectors, ID etc.).
- Metode: Reprezintă acțiuni care pot fi efectuate pe pagină (de exemplu,
login(),addToCart(),search()). Aceste metode interacționează cu elementele web.
Structură exemplu:
# 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") # Locator pentru câmpul de introducere a numelui de utilizator
self.password_input = (By.ID, "password") # Locator pentru câmpul de introducere a parolei
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Locator pentru butonul de login
self.error_message = (By.CSS_SELECTOR, ".error-message") # Locator pentru mesajul de eroare
def open(self, url):
self.driver.get(url) # Deschide pagina
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Introduce numele de utilizator
self.driver.find_element(*self.password_input).send_keys(password) # Introduce parola
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Apasă butonul de login
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Obține textul mesajului de eroare
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Importă clasa Page Object
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Inițializează driver-ul
self.login_page = LoginPage(self.driver) # Creează o instanță a Page Object
def tearDown(self):
self.driver.quit() # Închide driver-ul
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Deschide pagina
self.login_page.enter_credentials("valid_user", "valid_password") # Introduce datele
self.login_page.click_login_button() # Apasă butonul
# Verificări suplimentare după login cu succes
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Deschide pagina
self.login_page.enter_credentials("invalid_user", "wrong_password") # Introduce datele
self.login_page.click_login_button() # Apasă butonul
error_text = self.login_page.get_error_message() # Obține textul de eroare
self.assertIn("Numele de utilizator sau parola incorecte", error_text) # Verifică mesajul de eroare
if __name__ == "__main__":
unittest.main()
În acest exemplu, LoginPage reprezintă un Page Object pentru pagina de login. Testele din test_login.py utilizează metodele acestei clase, abstractizând detaliile de interacțiune cu elementele.
Modelul Page Object este un standard de facto în automatizarea testării interfețelor web datorită avantajelor sale în ceea ce privește întreținerea și lizibilitatea.