Sobes.tech
Middle

Ի՞նչ է Page Object ձևանմուշը։

sobes.tech AI

Պատասխան AI-ից

Page Object (PO) դիզայնի օրինակ — դա ավտոմատացված թեստավորման համար նախագծման ձևաչափ է, որը ներկայացնում է վեբ-էջերը որպես դասեր: Յուրաքանչյուր PO դաս պարունակում է տարրեր և գործողություններ, որոնք օգտագործողը կատարում է կոնկրետ էջում:

Օգտակարությունները:

  • Կարդալություն: Թեստի կոդը դառնում է ավելի հասկանալի, քանի որ այն փոխազդում է էջերի և դրանց տարրերի հետ բարձր մակարդակի մեթոդների միջոցով:
  • Աջակցություն: Երբ էջի տարրերի դիրքորոշումները փոխվում են, բավարար է միայն փոփոխել համապատասխան Page Object դասը, այլ ոչ թե ամբողջ թեստերը:
  • Կրկնվող օգտագործում: Page Object մեթոդներն ու տարրերը կարող են օգտագործվել տարբեր թեստային սցենարներում:
  • Պատասխանատվության բաժանում: UI տարրերի փոխազդեցության տրամաբանությունը բաժանված է թեստային սցենարի տրամաբանությունից:

Հիմնական բաղադրիչները:

  • Էջերի դասեր: Ներկայացնում են կոնկրետ վեբ-էջի աբստրակցիա:
  • Վեբ-տարրեր: Դրանք սահմանվում են էջի դասում օգտագործելով դիրքորոշումներ (XPath, CSS-սելեկտորներ, ID և այլն):
  • Մեթոդներ: Ներկայացնում են գործողություններ, որոնք կարելի է կատարել էջում (օրինակ, login(), addToCart(), search())։ Այս մեթոդները փոխազդում են վեբ-տարրերի հետ:

Նմուշային կառուցվածք:

# 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[contains(text(), 'Login')]") # Մուտք գործելու կոճակի դիրքորոշում
        self.error_message = (By.CSS_SELECTOR, ".error-message") # Հաղորդագրության դիրքորոշում

    def open(self, url):
        self.driver.get(url) # Բացում է էջը

    def enter_credentials(self, username, password):
        self.driver.find_element(*self.username_input).send_keys(username) # Մուտքագրում է օգտանունը
        self.driver.find_element(*self.password_input).send_keys(password) # Մուտքագրում է գաղտնաբառը

    def click_login_button(self):
        self.driver.find_element(*self.login_button).click() # Կոճակին սեղմում է

    def get_error_message(self):
        return self.driver.find_element(*self.error_message).text # Վերցնում է հաղորդագրության տեքստը
# test_login.py
import unittest
from selenium import webdriver
from login_page import LoginPage # Page Object դասի ներմուծում

class LoginTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome() # Դրայվերի ինիցիալիզացիա
        self.login_page = LoginPage(self.driver) # Page Object օրինակ ստեղծում

    def tearDown(self):
        self.driver.quit() # Դրայվերի փակում

    def test_valid_login(self):
        self.login_page.open("http://example.com/login") # Էջի բացում
        self.login_page.enter_credentials("valid_user", "valid_password") # Մուտքագրում տվյալներ
        self.login_page.click_login_button() # Կոճակին սեղմում
        # Ավելացրեք ստուգումներ հաջող մուտքի համար

    def test_invalid_login(self):
        self.login_page.open("http://example.com/login") # Էջի բացում
        self.login_page.enter_credentials("invalid_user", "wrong_password") # Մուտքագրում տվյալներ
        self.login_page.click_login_button() # Կոճակին սեղմում
        error_text = self.login_page.get_error_message() # Հաղորդագրության տեքստը ստանում է
        self.assertIn("Неверные учетные данные", error_text) # Հաղորդագրության ստուգում

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

Այս օրինակով LoginPage ներկայացնում է մուտքի էջի Page Object-ը: test_login.py թեստերը օգտագործում են այս դասի մեթոդները՝ փոխհատուցելով տարրերի փոխազդեցության մանրամասները:

Page Object դիզայնի օրինակն է՝ ավտոմատացված վեբ-էջերի թեստավորման ստանդարտը՝ իր առավելություններով պահպանման և կարդալության տեսանկյունից։