教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

什么是page object設(shè)計(jì)模式?

更新時(shí)間:2023年11月21日11時(shí)07分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  Page Object設(shè)計(jì)模式是一種用于測(cè)試自動(dòng)化的軟件開(kāi)發(fā)模式,特別是針對(duì)web應(yīng)用程序的UI測(cè)試。該模式將頁(yè)面的各個(gè)部分抽象為對(duì)象,使得測(cè)試用例可以通過(guò)操作這些對(duì)象來(lái)與頁(yè)面元素進(jìn)行交互,而不必直接操作頁(yè)面上的元素。這種抽象層的存在使得測(cè)試代碼更易維護(hù)、可讀性更高,并且當(dāng)頁(yè)面布局變化時(shí),只需更新相關(guān)的 Page Object,而不必修改整個(gè)測(cè)試用例。

  接下來(lái)筆者通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明Page Object設(shè)計(jì)模式。假設(shè)有一個(gè)登錄頁(yè)面,其中包含用戶名、密碼輸入框和登錄按鈕。

  首先,創(chuàng)建一個(gè)Page Object類來(lái)表示登錄頁(yè)面:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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.ID, 'login-btn')

    def open(self, url):
        self.driver.get(url)

    def enter_username(self, username):
        username_field = WebDriverWait(self.driver, 10).until(
            EC.visibility_of_element_located(self.username_input)
        )
        username_field.clear()
        username_field.send_keys(username)

    def enter_password(self, password):
        password_field = WebDriverWait(self.driver, 10).until(
            EC.visibility_of_element_located(self.password_input)
        )
        password_field.clear()
        password_field.send_keys(password)

    def click_login(self):
        login_btn = WebDriverWait(self.driver, 10).until(
            EC.element_to_be_clickable(self.login_button)
        )
        login_btn.click()

  然后,在測(cè)試用例中使用這個(gè)Page Object類:

from selenium import webdriver

# 創(chuàng)建 WebDriver 實(shí)例
driver = webdriver.Chrome()

# 實(shí)例化 LoginPage 類
login_page = LoginPage(driver)

# 打開(kāi)登錄頁(yè)面
login_page.open('https://example.com/login')

# 輸入用戶名和密碼,點(diǎn)擊登錄按鈕
login_page.enter_username('your_username')
login_page.enter_password('your_password')
login_page.click_login()

# 進(jìn)行其他操作,執(zhí)行其他測(cè)試步驟
# ...

# 關(guān)閉瀏覽器
driver.quit()

  在這個(gè)示例中,Page Object類LoginPage封裝了登錄頁(yè)面的元素和操作。測(cè)試用例中的代碼更清晰易讀,而且當(dāng)頁(yè)面元素的定位或名稱發(fā)生變化時(shí),只需更新LoginPage類中的元素定位信息即可,而不必修改測(cè)試用例的其余部分。

0 分享到:
和我們?cè)诰€交談!