Sobes.tech
Middle

Kas yra Page Object modelis?

sobes.tech AI

Atsakymas iš AI

Page Object šablonas yra dizaino modelis, naudojamas gerinti skaitymą, palaikymą ir sumažinti kodo dubliavimą interneto programų testų automatizavime. Tai objektų orientuotas požiūris, kuriame kiekviena puslapis (arba svarbus komponentas) yra atstovaujama atskiru klasiu.

Pagrindinės Page Object idėjos:

  • Puslapio elementų ir su jais atliekamų veiksmų inkapsuliacija.
  • Elementų lokatorių ir testų verslo logikos atskyrimas.
  • Aukšto lygio API teikimas puslapio sąveikai.

Page Object naudojimo privalumai:

  • Testų skaitomumo didinimas: Testai tampa deklaratyvesni, aprašydami sąveikos žingsnius verslo kalba.
  • Palaikymo gerinimas: Kai UI keičiasi (pvz., elemento lokatorius), pakanka pakeisti tik vieną Page Object klasę, o ne kiekvieną testą, kuris naudoja tą elementą.
  • Kodo dubliavimosi mažinimas: Bendra veikla su puslapiu yra inkapsuliuota Page Object metoduose ir gali būti pakartotinai naudojama įvairiuose testuose.
  • Testų stabilumo didinimas: Dėl abstrakcijos nuo UI įgyvendinimo detalių.

Pavyzdinė struktūra:

Tarkime, turime prisijungimo puslapį. Galime sukurti LoginPage klasę.

# 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()

Naudojimas teste:

# 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")
        # Patikrinimas, ar sėkmingai prisijungta

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

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

Čia LoginPage klasė inkapsuliuoja susijusius lokatorius ir veiksmus, susijusius su prisijungimo puslapiu. Testas test_valid_login sąveikauja su LoginPage per aukšto lygio metodus login. Jei naudotojo vardo lauko lokatorius pasikeistų, pakaktų pakeisti tik LoginPage klasėje.