Middle
Mis on Page Object muster?
sobes.tech AI
Vastus AI-lt
Page Object (PO) muster — see on automatiseeritud veebiliidese testimise disainimuster, mis kujutab veebilehti klassidena. Iga PO klass kapseldab elemendid ja tegevused, mida kasutaja konkreetsel lehel teeb:
Eelised:
- Lugemise lihtsus: Testi kood muutub arusaadavam, kuna see suhtleb lehtede ja nende elementidega kõrgetasemeliste meetodite kaudu:
- Hooldus: Kui lehe elementide lokaatoreid muudetakse, piisab ainult vastava Page Object klassi muutmisest, testide ümberkirjutamine pole vajalik:
- Taaskasutus: Page Object meetodid ja elemendid võivad olla kasutusel erinevates teststsenaariumides:
- Vastutuse jaotus: UI elementidega suhtlemise loogika on eraldatud teststsenaariumi loogikast:
Peamised komponendid:
- Lehtede klassid: Esindavad konkreetset veebilehte.
- Veebielemendid: Määratletakse lehe klassis lokaatoreid kasutades (XPath, CSS valijad, ID jms).
- Meetodid: Esindavad tegevusi, mida saab lehel teha (nt
login(),addToCart(),search()). Need meetodid suhtlevad veebielementidega:
Näidistruktuur:
# 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") # Kasutajanime välja lokator
self.password_input = (By.ID, "password") # Parooli välja lokator
self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Sisselogimise nupu lokator
self.error_message = (By.CSS_SELECTOR, ".error-message") # Vea sõnumi lokator
def open(self, url):
self.driver.get(url) # Ava leht
def enter_credentials(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username) # Sisestab kasutajanime
self.driver.find_element(*self.password_input).send_keys(password) # Sisestab parooli
def click_login_button(self):
self.driver.find_element(*self.login_button).click() # Klõpsab nuppu
def get_error_message(self):
return self.driver.find_element(*self.error_message).text # Saab vea sõnumi teksti
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object klassi import
class LoginTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # Drajiveri initsialiseerimine
self.login_page = LoginPage(self.driver) # Page Object näide
def tearDown(self):
self.driver.quit() # Drajiveri sulgemine
def test_valid_login(self):
self.login_page.open("http://example.com/login") # Lehe avamine
self.login_page.enter_credentials("valid_user", "valid_password") # Andmete sisestamine
self.login_page.click_login_button() # Nupule klõps
# Täiendavad kontrollid edukaks sisselogimiseks
def test_invalid_login(self):
self.login_page.open("http://example.com/login") # Lehe avamine
self.login_page.enter_credentials("invalid_user", "wrong_password") # Andmete sisestamine
self.login_page.click_login_button() # Nupule klõps
error_text = self.login_page.get_error_message() # Vea sõnumi saamine
self.assertIn("Неверные учетные данные", error_text) # Sõnumi kontroll
if __name__ == "__main__":
unittest.main()
Selles näites esindab LoginPage veebilehe objekti. test_login.py testid kasutavad selle klassi meetodeid, varjates elementidega suhtlemise detaile:
Page Object on standardne automaatse testimise muster, mille eelised on hooldus- ja lugemise lihtsuse poolest.