Sobes.tech
Middle

Ce este modelul Page Object?

sobes.tech AI

Răspuns de la AI

Modelul Page Object este un model de proiectare utilizat pentru a îmbunătăți lizibilitatea, întreținerea și pentru a reduce duplicarea codului în automatizarea testelor pentru aplicațiile web. Este o abordare orientată pe obiecte, în care fiecare pagină (sau componentă semnificativă) a aplicației web este reprezentată de o clasă separată.

Idei principale ale Page Object:

  • Încapsularea elementelor paginii și a acțiunilor care pot fi efectuate cu acestea.
  • Separarea localizatorilor elementelor de logica de business a testelor.
  • Oferirea unei API de nivel înalt pentru interacțiunea cu pagina.

Avantajele utilizării Page Object:

  • Îmbunătățirea lizibilității testelor: Testele devin mai declarative, descriind pașii de interacțiune cu interfața utilizatorului în limbaj de business.
  • Îmbunătățirea întreținerii: Când UI-ul se schimbă (de exemplu, localizatorul unui element), este suficient să faci modificarea doar într-o singură clasă Page Object, nu în fiecare test care utilizează acel element.
  • Reducerea duplicării de cod: Acțiunile comune cu pagina sunt încapsulate în metodele Page Object și pot fi reutilizate în diferite teste.
  • Creșterea stabilității testelor: Datorită abstractizării detaliilor de implementare UI.

Exemplu de structură:

Presupunând că avem o pagină de autentificare. Putem crea o clasă 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(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()

Utilizare în 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")
        # Verificare login reușit

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

Aici, clasa LoginPage încapsulează localizatorii și acțiunile legate de pagina de login. Testul test_valid_login interacționează cu LoginPage prin metode de nivel înalt precum login. Dacă localizatorul câmpului de utilizator se schimbă, trebuie actualizat doar în LoginPage.