Kas ir Page Object modelis?
sobes.tech AI
Atbilde no AI
Page Object paraugs ir ir dizaina paraugs, kas tiek ir paredzēts, lai uzlabotu lasāmību, uzturēšanu un samazinātu koda dublēšanos tīmekļa lietojumprogrammu testu automatizācijā. Tas ir objektorientēts pieejas veids, kur katra lapa (vai nozīmīgs komponent) ir pārstāvēta ar atsevišķu klasi.
Galvenās Page Object idejas:
- Lapas elementu un ar tiem veicamo darbību inkapsulācija.
- Elementu lokalizatoru un testu biznesa loģikas atdalīšana.
- Nodrošināt augsta līmeņa API lapas ar mijiedarbībai.
Page Object izmantošanas priekšrocības:
- Testu lasāmības uzlabošana: Testi kļūst deklaratīvāki, aprakstot mijiedarbības soļus biznesa valodā.
- Uzturēšanas uzlabošana: Ja UI mainās (piemēram, elementa lokalizators), pietiek mainīt tikai vienu Page Object klasi, nevis katru testu, kas izmanto šo elementu.
- Koda dublēšanās samazināšana: Kopējās darbības ar lapu ir inkapsulētas Page Object metodēs un var tikt atkārtoti izmantotas dažādos testos.
- Testu stabilitātes uzlabošana: Pateicoties abstrakcijai no UI īstenošanas detaļām.
Piemēra struktūra:
Pieņemsim, mums ir ienāksanas lapa. Mēs varam izveidot LoginPage klasi.
# 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()
Lietojums 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")
# Pārbaude, vai veiksmīgi pieslēgts
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
unittest.main()
Šeit LoginPage klase inkapsulē saistītos lokalizatorus un darbības, kas saistītas ar pieslēgšanās lapu. Tests test_valid_login mijiedarbojas ar LoginPage caur augsta līmeņa metodēm login. Ja lietotāja vārda lauka lokalizators mainīsies, to nepieciešams mainīt tikai LoginPage.