Sobes.tech
Middle

Mis on Page Object muster?

sobes.tech AI

Vastus AI-lt

Page Object muster on disainimuster, mida kasutatakse veebirakenduste testautomaatikas lugemise, hooldatavuse parandamise ja koodi dubleerimise vähendamise eesmärgil. See on objektorienteeritud lähenemine, kus iga leht (või oluline komponent) esindatakse eraldi klassina.

Page Objecti põhiteesid:

  • Lehe elementide ja nendele tehtavate toimingute kapseldamine.
  • Elementide lokalisaatorite ja testide äriloogika eraldamine.
  • Pakub kõrgetasemelist API-d lehega suhtlemiseks.

Page Objecti kasutamise eelised:

  • Testide loetavuse tõstmine: Testid muutuvad deklaratiivsemaks, kirjeldades sammud kasutajaliidiga suhtlemiseks ärikeeles.
  • Hooldatavuse parandamine: Kui UI muutub (näiteks elemendi lokalisaator), piisab ainult ühe Page Object klassi muutmisest, mitte iga testi muutmisest, mis seda elementi kasutab.
  • Koodi dubleerimise vähendamine: Ühised toimingud lehega on kapseldatud Page Object meetoditesse ja neid saab taaskasutada erinevates testides.
  • Testide stabiilsuse tõstmine: Tänu abstraktsioonile UI üksikasjadest.

Näidistruktuur:

Oletame, et meil on sisselogimise leht. Saame luua LoginPage klassi.

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

Testis kasutamine:

# 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")
        # Eduka sisselogimise kontroll

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

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

Siin kapseldab LoginPage klass lehega seotud lokalisaatorid ja tegevused. Test test_valid_login suhtleb LoginPage-ga kõrgema taseme meetodite kaudu login. Kui kasutajanime välja lokalisaator muutub, tuleb seda muuta ainult LoginPage-s.