Page Object設計模式實踐
阿新 • • 發佈:2018-04-29
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 importBy 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設計模式實踐