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("截图失败")
原文地址:https://www.cnblogs.com/wsk1988/p/12738619.html