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-ում։