Sobes.tech
Middle

Kas yra Page Object modelis?

sobes.tech AI

Atsakymas iš AI

Page Object (PO) pavyzdys — tai projektavimo šablonas automatizuotam interneto sąsajų testavimui, kuris vaizduoja tinklalapius kaip klases. Kiekviena PO klasė įkapsuliuoja elementus ir veiksmus, kuriuos vartotojas atlieka konkrečioje puslapyje:

Privalumai:

  • Skaitomumas: Testo kodas tampa aiškesnis, nes jis sąveikauja su puslapiais ir jų elementais per aukšto lygio metodus:
  • Palaikymas: Kai puslapio elementų lokatoriai keičiasi, pakanka pataisyti tik atitinkamą Page Object klasę, nereikia perrašyti visų testų:
  • Pakartotinis naudojimas: Page Object metodai ir elementai gali būti naudojami įvairiuose testų scenarijuose:
  • Atsakomybės pasidalijimas: Sąveikos su UI logika atskirta nuo testų scenarijaus logikos:

Pagrindiniai komponentai:

  • Puslapių klasės: Atstovauja konkrečiam tinklalapiui.
  • Web elementai: Apibrėžiami puslapio klasėje naudojant lokatorius (XPath, CSS selektorius, ID ir kt.).
  • Metodai: Atstovauja veiksmus, kuriuos galima atlikti puslapyje (pvz., login(), addToCart(), search()). Šie metodai sąveikauja su web elementais:

Struktūros pavyzdys:

# 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")  # Vartotojo vardo lauko lokatorius
        self.password_input = (By.ID, "password")  # Slaptažodžio lauko lokatorius
        self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Prisijungimo mygtuko lokatorius
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Klaidos pranešimo lokatorius

    def open(self, url):
        self.driver.get(url) # Atidaro puslapį

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # Įveda vartotojo vardą
        self.driver.find_element(*self.password_input).send_keys(password) # Įveda slaptažodį

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Paspaudžia mygtuką

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Gauna klaidos pranešimo tekstą
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object klasės importas

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # Driiverio inicijavimas
        self.login_page = LoginPage(self.driver) # Page Object pavyzdys

    def tearDown(self):
        self.driver.quit() # Driverio uždarymas

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Puslapio atidarymas
        self.login_page.enter_credentials("valid_user", "valid_password") # Duomenų įvedimas
        self.login_page.click_login_button() # Mygtuko paspaudimas
        # Papildomi patikrinimai sėkmingam prisijungimui

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Puslapio atidarymas
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Duomenų įvedimas
        self.login_page.click_login_button() # Mygtuko paspaudimas
        error_text = self.login_page.get_error_message() # Klaidos teksto gavimas
        self.assertIn("Неверные учетные данные", error_text) # Žinutės patikrinimas

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

Šiame pavyzdyje LoginPage atstovauja prisijungimo puslapio Page Object'ą. test_login.py testai naudoja šio klaso metodus, slepiant elementų sąveikos detales:

Page Object šablonas yra standartinis automatinio testavimo modelis, pasižymintis savo privalumais palaikymo ir skaitomumo požiūriu.