selenium web自动化 - pageobjects的行为封装
# 自动化测试框架
1. 测试报告 - allure测试报告 : https://www.cnblogs.com/jizg/p/16021487.html
2. 测试用例
3. 日志、失败截图
4. 用例筛选
解决问题:
1) 日志,失败截图
日志: 记录用例的执行过程
失败截图: 用例失败了,在失败的操作截图当前页面
将 selenium webdriver api 封装为方法,在方法中加入 日志,失败截图,这样能够避免代码重复
# 封装哪些 api
class Basepage:
# 将log 日志封装为一个方法
logger = FileHandler(name=yaml_path['logger']['name'], level=yaml_path['logger']['level'],
log_file=yaml_path['logger']['log_url']+yaml_path['logger']['file'])
# 初始化Webdriver
def __init__(self, driver:WebDriver):
self.driver = driver
1. 等待可见
from selenium.webdriver.support import expected_conditions as EC
def wait_ele_visit(self, loc, img_name, timeout=20, poll_fre=0.5):
"""
:param loc: 元素
:param img_name: 图片名
:param timeout: 等待时间
:param poll_fre: 默认0.5秒寻找一次
:return:
"""
self.logger.info("等到元素可见:{}".format(loc))
try:
WebDriverWait(self.driver, timeout, poll_fre).until(EC.visibility_to_element_located(loc))
except:
# 失败后截图,打印日志并抛出异常
self.save_page_shot(img_name)
self.logger.exception("等待元素可见失败:{}".format(loc))
raise
2. 查找元素
def get_element(self, loc, img_name):
"""
:param loc: 元素
:param img_name: 图片名
:return:
"""
self.logger.info("在 {} 页面查找元素:{}".format(img_name, loc))
try:
self.driver.find_element(*loc)
except:
self.save_page_shot(img_name)
self.logger.exception("在 {}页面查找元素失败: {}".format(img_name, loc))
raise
3. 点击
def cilck_element(self, loc, img_name, timeout=20, poll_fre=0.5):
"""
:param loc: 元素
:param img_name: 图片名
:param timeout: 等待时间
:param poll_fre: 默认0.5秒寻找一次
:return:
"""
self.logger.info("在 {} 页面点击元素:{}".format(img_name, loc))
# 调用等待元素可见方法
self.wait_ele_visit(loc, imag_name, timeout, poll_fre)
ele = slef.get_element(loc)
try:
ele.click()
except:
self.save_page_shot(img_name)
self.logger.exception("点击元素{}失败!".format(loc))
raise
4. 输入
def wait_ele_visit(self, loc, img_name, value, timeout=20, poll_fre=0.5):
"""
:param loc: 元素
:param img_name: 图片名
:param timeout: 等待时间
:param poll_fre: 默认0.5秒寻找一次
:return:
"""
self.logger.info("在 {} 页面,输入框{},输入:{}".format(loc,img_name,value))
self.wait_ele_visit(loc, img_name)
ele.get_element(loc)
try:
ele.send_keys(value)
except:
self.save_page_shot(img_name)
self.logger.exception("文本框输入失败!{}".format(loc))
raise
5. 获取文本
def wait_ele_visit(self, loc, img_name, timeout=20, poll_fre=0.5):
"""
:param loc: 元素
:param img_name: 图片名
:param timeout: 等待时间
:param poll_fre: 默认0.5秒寻找一次
:return:
"""
self.logger.info("等到元素可见:{}".format(loc))
WebDriverWait(loc, img_name)
ele = self.get_element(loc)
try:
value = ele.text
except:
self.save_page_shot(img_name)
self.logger.exception("查找元素失败!")
raise
else:
self.logger.info("{}元素获取的文本值是:{}".format(img_name, value))
return value
6. 页面截图
def save_page_shot(self, img_name)
now_time = time.strftime("%Y-%m-%d %H_%M_%S")
file_name = "{}_{}.png".format(img_name, now_time)
self.driver.save_screenshot("存储路径。。。。" + file_name)
self.logger.info("图片保存在 {}".format("图片存储:"+file_name))