Sobes.tech
Middle

Kas ir Page Object modelis?

sobes.tech AI

Atbilde no AI

Page Object (PO) paraugs — tas ir projektēšanas šablons automatizētai tīmekļa saskarnes testēšanai, kas attēlo tīmekļa lapas kā klases. Katra PO klase ietver elementus un darbības, ko lietotājs veic konkrētā lapā:

Priekšrocības:

  • Lasāmība: Testa kods kļūst saprotamāks, jo tas sadarbojas ar lapām un to elementiem caur augsta līmeņa metodēm:
  • Atbalsts: Ja lapas elementu lokatori mainās, pietiek tikai labot attiecīgo Page Object klasi, nav nepieciešams pārrakstīt visus testus:
  • Atkārtota izmantošana: Page Object metodes un elementi var tikt izmantoti dažādos testu scenārijos:
  • Atbildības sadalījums: UI elementu mijiedarbības loģika ir atdalīta no testa scenārija loģikas:

Galvenās sastāvdaļas:

  • Lapu klases: Attēlo konkrētu tīmekļa lapu.
  • Web elementus: Definē lapas klasē, izmantojot lokatorus (XPath, CSS selektori, ID utt.).
  • Metodes: Attēlo darbības, kuras var veikt lapā (piemēram, login(), addToCart(), search()). Šīs metodes sadarbojas ar web elementiem:

Struktūras piemērs:

# 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")  # Lietotājvārda lauka lokators
        self.password_input = (By.ID, "password")  # Paroles lauka lokators
        self.login_button = (By.XPATH, "//button[contains(text(), 'Login')]") # Pieslēgšanās pogas lokators
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Kļūdas ziņojuma lokators

    def open(self, url):
        self.driver.get(url) # Atver lapu

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # Ievada lietotājvārdu
        self.driver.find_element(*self.password_input).send_keys(password) # Ievada paroli

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Noklikšķina uz pogas

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Saņem kļūdas ziņojuma tekstu
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object klases imports

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # Džeksona draivera inicializācija
        self.login_page = LoginPage(self.driver) # Page Object instances

    def tearDown(self):
        self.driver.quit() # Draivera aizvēršana

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Lapā atver
        self.login_page.enter_credentials("valid_user", "valid_password") # Ievada datus
        self.login_page.click_login_button() # Noklikšķina
        # Papildu pārbaudes veiksmīgai pieteikšanai

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Lapā atver
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Ievada datus
        self.login_page.click_login_button() # Noklikšķina
        error_text = self.login_page.get_error_message() # Saņem kļūdas tekstu
        self.assertIn("Неверные учетные данные", error_text) # Pārbauda ziņojumu

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

Šajā piemērā LoginPage ir pārstāvēta kā lapas objekts. test_login.py testi izmanto šīs klases metodes, lai slēptu elementu mijiedarbības detaļas:

Page Object ir standarta veids, kā automatizēt web interfeisa testēšanu, ar priekšrocībām uzturēšanas un lasāmības ziņā.