Sobes.tech
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.