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("截圖失敗")