更新時(shí)間:2023年11月21日11時(shí)07分 來源:傳智教育 瀏覽次數(shù):
Page Object設(shè)計(jì)模式是一種用于測試自動化的軟件開發(fā)模式,特別是針對web應(yīng)用程序的UI測試。該模式將頁面的各個(gè)部分抽象為對象,使得測試用例可以通過操作這些對象來與頁面元素進(jìn)行交互,而不必直接操作頁面上的元素。這種抽象層的存在使得測試代碼更易維護(hù)、可讀性更高,并且當(dāng)頁面布局變化時(shí),只需更新相關(guān)的 Page Object,而不必修改整個(gè)測試用例。
接下來筆者通過一個(gè)簡單的示例來說明Page Object設(shè)計(jì)模式。假設(shè)有一個(gè)登錄頁面,其中包含用戶名、密碼輸入框和登錄按鈕。
首先,創(chuàng)建一個(gè)Page Object類來表示登錄頁面:
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()
然后,在測試用例中使用這個(gè)Page Object類:
from selenium import webdriver # 創(chuàng)建 WebDriver 實(shí)例 driver = webdriver.Chrome() # 實(shí)例化 LoginPage 類 login_page = LoginPage(driver) # 打開登錄頁面 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í)行其他測試步驟 # ... # 關(guān)閉瀏覽器 driver.quit()
在這個(gè)示例中,Page Object類LoginPage封裝了登錄頁面的元素和操作。測試用例中的代碼更清晰易讀,而且當(dāng)頁面元素的定位或名稱發(fā)生變化時(shí),只需更新LoginPage類中的元素定位信息即可,而不必修改測試用例的其余部分。
北京校區(qū)