Selenium_Page Object設計模式


Page Object 介紹

Page Object設計模式的優點如下:

  •   減少代碼的重復
  •   提高測試用例的可讀性
  •   提高測試用例的可維護性,特別是針對UI頻繁變化的項目

  當Web頁面編寫測試時,需要操作該Web頁面上的元素,如果在測試代碼中直接操作HTML元素,那么代碼比較脆弱,因為UI頻繁變動。可用到page對象封裝成一個HTML頁面,通過提供的API來操作頁面元素。

Page Object 實例

下面以登錄163郵箱為例實現:

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

     上述代碼定義了open()方法用於打開URL網站,但它本身未做的事情,而是交由_open()方法來實現,關於URL斷言則交由on_page()方法來實現,而find_element()方法用於元素的定位。LoginPage類中主要對登錄頁面上元素進行封裝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM