Sobes.tech
Middle

Page Object үлгүсү эмне?

sobes.tech AI

AIден жооп

Page Object үлгісі — бұл жобалау үлгісі, ол веб-қосымшалардың тестілеу автоматтандыруында оқылуын, қолдауын жақсарту және кодтың қайталануын азайту үшін пайдаланылады. Бұл объектіге бағытталған тәсіл, онда әр бет (немесе маңызды компонент) жеке сыныпта көрсетіледі.

Page Object негізгі идеялары:

  • Беттің элементтері мен онымен орындалатын әрекеттерді инкапсуляциялау.
  • Элементтердің локаторларын және тесттердің бизнес-логикасын бөлу.
  • Бетпен өзара әрекеттесу үшін жоғары деңгейлі API ұсыну.

Page Object қолданудың артықшылықтары:

  • Тесттердің оқылымдылығын арттыру: Тесттер декларативті болып, бизнес тілімен өзара әрекеттесу қадамдарын сипаттайды.
  • Қолдауды жақсарту: UI өзгерген кезде (мысалы, элементтің локаторы өзгерсе), оны тек бір Page Object сыныбында өзгерту жеткілікті, ал оны қолданатын барлық тесттерде емес.
  • Кодтың қайталануын азайту: Жалпы әрекеттер Page Object әдістерінде инкапсуляцияланған және әртүрлі тесттерде қайта қолданылуы мүмкін.
  • Тестілеудің тұрақтылығын арттыру: UI-дің бөлшектерінен абстракциялау арқылы.

Құрылымның мысалы:

Келісейік, кіріс беті бар. Біз LoginPage сыныбын құра аламыз.

# 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()

Тестілеуде пайдалану:

# 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")
        # Сәтті кіруді тексеру

    def tearDown(self):
        self.driver.quit()

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

Мұнда LoginPage сыныбы кіріс бетіне байланысты локаторлар мен әрекеттерді инкапсуляциялайды. test_valid_login LoginPage-тің жоғары деңгейлі әдістері арқылы өзара әрекеттеседі login арқылы. Егер пайдаланушы аты өрісінің локаторы өзгерсе, оны тек LoginPage-де өзгерту жеткілікті.