1. 程式人生 > >Page Object設計模式實踐

Page Object設計模式實踐

base_url elf ear .get self. xxxxx self ron open

  Page Object模式是使用Selenium的廣大同行最為公認的一種設計模式。在設計測試時,把元素和方法按照頁面抽象出來,分離成一定的對象,然後再進行組織。

  Page Object模式,創建一個對象來對應頁面的一個應用。故我們可以為每個頁面定義一個類,並為每個頁面的屬性和操作構建模型。體現在對界面交互細節的封裝,測試在更上層使用頁面對象,在底層的屬性或者操作的更改不會中斷測試。減少代碼重復,提高測試代碼的可讀性和可維護性。

  下面將以登錄qq郵箱為例,通過Page Object設計模式來實現。代碼如下:

from selenium import webdriver
from selenium.webdriver.common.by import
By from time import sleep #創建基礎類 class BasePage(object): #初始化 def __init__(self, driver): self.base_url = https://mail.qq.com/ self.driver = driver self.timeout = 30 #打開頁面 def _open(self): url = self.base_url self.driver.get(url) self.driver.switch_to.frame(
login_frame) #切換到登錄窗口的iframe def open(self): self._open() #定位方法封裝 def find_element(self,*loc): return self.driver.find_element(*loc) #創建LoginPage類 class LoginPage(BasePage): username_loc = (By.ID, "u") password_loc = (By.ID, "p") login_loc = (By.ID, "login_button
") #輸入用戶名 def type_username(self,username): self.find_element(*self.username_loc).clear() self.find_element(*self.username_loc).send_keys(username) #輸入密碼 def type_password(self,password): self.find_element(*self.password_loc).send_keys(password) #點擊登錄 def type_login(self): self.find_element(*self.login_loc).click() #創建test_user_login()函數 def test_user_login(driver, username, password): """測試用戶名/密碼是否可以登錄""" login_page = LoginPage(driver) login_page.open() login_page.type_username(username) login_page.type_password(password) login_page.type_login() #創建main()函數 def main(): driver = webdriver.Edge() username = 3494xxxxx #qq號碼 password = kemixxxx #qq密碼 test_user_login(driver, username, password) sleep(3) driver.quit() if __name__ == __main__: main()

  雖然該實現方法看上去復雜多了,但其中的設計好處是不同層關心不同的問題。頁面對象只關心元素的定位,測試用例只關心測試數據。

Page Object設計模式實踐