web自動化測試中的PO模式(三)----提取basepage及封裝基本函數


1、封裝基礎函數---執行日志、異常處理、失敗截圖等操作

2、提取所有頁面公共的部分

新建一個包Common,在包中新建一個basepage.py

1、提取初始化函數

1 class BasePage:
2     # 初始化函數
3     def __init__(self,driver):
4         self.driver=driver
5         self.log=MyLogger()

2、封裝基礎函數

 1 from selenium.webdriver.support import expected_conditions as EC
 2 from selenium.webdriver.support.wait import WebDriverWait
 3 import os
 4 from Common.tools.get_file_path import *
 5 import datetime
 6 class BasePage:
 7     # 初始化函數
 8     def __init__(self,driver):
 9         self.driver=driver
10         self.log=MyLogger()
11 
12     # 等待元素可見
13     def wait_eleVisible(self,locator,times=30,poll_frequency=0.5,doc=''):
14         '''
15         :param locator: 元素定位。元組形式(元素定位類型,元素定位方式)
16         :param times: 等待時間
17         :param poll_frequency: 等待時間間隔 ,每0.5秒查看一次
18         :param doc: 截屏函數的形參
19         :return:
20         '''
21         self.log.info("等待元素{0}可見".format(locator))
22         try:
23             # 開始等待的時間
24             start=datetime.datetime.now()
25             WebDriverWait(self.driver,times,poll_frequency).until(EC.visibility_of_element_located(locator))
26             #結束等待的時間
27             end = datetime.datetime.now()
28             #等待時長
29             wait_time=(end-start).seconds
30             self.log.info('等待結束,等待時長為:{0}'.format(wait_time))
31         except:
32             self.log.error("等待元素可見失敗,異常為:{0}".format(e))
33             #截圖
34             self.save_screenshot(doc)#失敗截圖操作
35             raise
36 
37     #截圖操作
38     def save_screenshot(self,name):
39         # 圖片名稱:模塊名_頁面名稱_操作名稱_時間(年-月-日_時分秒).png
40         file_name=os.path.join(GetFilePath.screenshots_path,'{0}_{1}.png').format(name,datetime.datetime.now().strftime('%c'))#時間格式化輸出
41         self.driver.save_screenshot(file_name)
42         self.log.info("截取網頁成功。文件路徑為:{0}".format(file_name))

 3、提取的basepage.py中的封裝函數在頁面對象中使用

1、使用basepage.py之前的代碼

 1 from selenium.webdriver.support import expected_conditions as EC
 2 from selenium.webdriver.support.wait import WebDriverWait
 3 from PageLocators.loginpage_locators import LoginPageLocator as loc
 4 class LoginPage:
 5     def __init__(self,driver):
 6         self.driver=driver
 7 
 8     def login(self,username,pwd,remember_user=True):
 9         # 等待定位元素出現
10         WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc.user_text))
11         # 輸入用戶名
12         self.driver.find_element(*loc.user_text).send_keys(username)
13         # 輸入密碼
14         self.driver.find_element(*loc.pwd_text).send_keys(pwd)
15         # 定位記住手機號元素
16         remember_ele=self.driver.find_element(*loc.remember)
17         # 判斷時候記住手機號
18         if remember_user==True:
19             remember_ele.checked=True
20         else:
21             remember_ele.checked=False
22         # 點擊登錄
23         self.driver.find_element(*loc.login_btn).click()

    2、使用basepage.py之后的代碼

 1 from PageLocators.loginpage_locators import LoginPageLocator as loc
 2 from Common.basepage import BasePage
 3 class LoginPage(BasePage):
 4     def login(self,username,pwd,remember_user=True):
 5         doc='登錄頁面_登錄功能'
 6         # 等待定位元素出現
 7         self.wait_eleVisible(loc.user_text,doc=doc)
 8         # 輸入用戶名
 9         self.input_text(loc.user_text,username,doc=doc)
10         # 輸入密碼
11         self.input_text(loc.pwd_text, pwd, doc=doc)
12         # 定位記住手機號元素
13         remember_ele=self.get_element(loc.remember)
14         # 判斷時候記住手機號
15         if remember_user==True:
16             remember_ele.checked=True
17         else:
18             remember_ele.checked=False
19         # 點擊登錄
20         self.click_element(loc.login_btn,doc=doc)

  basepage.py文件中初始化函數和封裝基礎函數,在封裝基礎函數的同時,將異常捕獲、日志信息、失敗截圖等操作都封裝到了自定義的函數中,調用后不用再對函數進行異常捕獲,使用起來比較方便、簡介、結構清晰、出現問題容易查找問題等

  4、失敗截屏操作函數

1     #截圖操作
2     def save_screenshot(self,doc):
3         # 圖片名稱:模塊名_頁面名稱_操作名稱_時間(年-月-日_時分秒).png
4         file_name=os.path.join(GetFilePath.screenshots_path,'{0}_{1}.png').format(doc,datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))
5         try:
6             file=self.driver.save_screenshot(file_name)
7             self.log.info("截取網頁成功。文件路徑為:{0}".format(file_name))
8         except:
9             self.log.error("截圖失敗")

 


免責聲明!

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



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