1. 程式人生 > >selenium +python之Page Obiect設計模式

selenium +python之Page Obiect設計模式

失敗 布爾 sub 目的 nbt 布爾值 做的 rom spn

PageObject是selenium自動化測試項目開發實踐的最佳設計模式之一,它主要體現對界面交互細節的封裝,這樣可以使測試案例更關註於業務而非界面細節,從而提高測試案例的可讀性。

1.認識PageObject

PageObject設計模式的優點如下:

*減少代碼的重復

*提高測試用例的可讀性

*提高測試用例的可維護性,特別針對UI頻繁變動的項目。

當為web頁面編寫測試是,需要操作該web頁面上的元素。然而,如果在測試代碼中直接操作HTML元素,代碼是及其脆弱的,因為ui的變動性會很大。我們可以將page對象封裝成一個HTML頁面,然後通過提供應用程序特定的API來操作頁面元素。而不是在HTML中來定位。

page對象的一個基本經驗法則是:凡是人能夠做的事,page對象通過軟件客戶端都能夠做到。因此,他應該提供一個易於編程的接口並隱藏窗口底層的部件。所以訪問一個文本框應該通過一個訪問方法(accessor method)來實現字符串的獲取與返回,復選框應當使用布爾值,按鈕應當被表示為行為導向的方法名。page對象應當將在GUI控件上所有查詢和操作數據的行為封裝為方法

一個好的經驗法則是:即使改變具體的控件,page對象的接口也不應當發生改變

盡管該術語是:“頁面”對象,但是並不意味著需要針對每個頁面建立一個這樣的對象。例如:頁面有重要意義的元素可以獨立為一個page對象。經驗法則的目的是通過給頁面建模,時期對應用程序的使用者變得更有意義。

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 from time import sleep
 4 
 5 
 6 class Page(object):
 7     """
 8     基礎類,用於頁面對象類的繼承
 9     """
10     login_url = http://mail.163.com/
11 
12     def __init__(self, selenium_driver, base_url=login_url):
13         self.base_url = base_url
14 self.driver = selenium_driver 15 self.timeout = 30 16 17 def on_page(self): 18 return self.driver.current_url == (self.base_url + self.url) 19 20 def _open(self, url): 21 url = self.base_url + url 22 self.driver.get(url) 23 assert self.on_page(), Did not land on %s % url 24 25 def open(self): 26 self._open(self.url) 27 28 def find_element(self, *loc): 29 return self.driver.find_element(*loc) 30 31 32 class LoginPage(Page): 33 """ 34 126郵箱登陸頁面模型 35 """ 36 url = / 37 # 定位器 38 username_loc = (By.ID, "idInput") 39 password_loc = (By.ID, "pwdInput") 40 submit_loc = (By.ID, "loginBtn") 41 42 # Action 43 def type_username(self, username): 44 self.find_element(*self.username_loc).send_keys(username) 45 46 def type_password(self, password): 47 self.find_element(*self.password_loc).send_keys(password) 48 49 def submit(self): 50 self.find_element(*self.submit_loc).click() 51 52 53 def test_user_login(driver, username, password): 54 """ 55 測試獲取的用戶名/密碼是否可以登陸 56 """ 57 login_page = LoginPage(driver) 58 login_page.open() 59 login_page.type_username(username) 60 login_page.type_password(password) 61 login_page.submit() 62 63 64 def main(): 65 try: 66 driver = webdriver.Chrome() 67 username = [email protected] 68 password = fyr19910915 69 test_user_login(driver, username, password) 70 sleep(3) 71 text = driver.find_element_by_xpath("//span[@id = ‘spnUid‘]").text 72 assert (text == [email protected]), "用戶名稱不匹配,登陸失敗!" 73 finally: 74 # 關閉瀏覽器窗口 75 driver.close() 76 77 78 if __name__ == __main__: 79 main()

selenium +python之Page Obiect設計模式