自动化异常处理机制
自动化异常处理机制
1. 简介
在移动端自动化测试过程中,会出现各种弹窗:广告窗口,升级窗口,评价窗口。弹窗的出现,极大的干扰了自动化测试的正常流程,测试会卡死甚至退出,此时需要对已有的 page_object 框架进行改造,加入弹窗处理机制。
2. 使用
查找元素前,需要检测是否有弹窗,如果出现弹窗则进行处理(点击弹窗的确定按钮或者关闭按钮)。下面代码对函数进行异常处理,如果出现弹窗,就会找不到元素抛出异常,异常处理会关闭弹窗,然后继续查找元素(使用递归),通常会维护一个黑名单(表示弹窗),由于代码过长,省略次要内容:
logging.basicConfig(level=logging.INFO)
_driver: WebDriver
_black_list = [
(By.ID, 'tv_agree'),
(By.XPATH, '//*[@text="确定"]'),
(By.ID, 'image_cancel'),
(By.XPATH, '//*[@text="下次再说"]')
]
_error_max = 10
_error_count = 0
_params={}
def find(self, locator, value: str = None):
logging.info(locator)
logging.info(value)
try:
# 寻找控件
element = self._driver.find_element(*locator) \
if isinstance(locator, tuple) else \
self._driver.find_element(locator, value)
# 如果成功,清空错误计数
self._error_count = 0
return element
except Exception as e:
# 如果次数太多,就退出异常逻辑,直接报错
if self._error_count > self._error_max:
raise e
# 记录一直异常的次数
self._error_count += 1
# 对黑名单里的弹框进行处理
for element in self._black_list:
logging.info(element)
elements = self._driver.find_elements(*element)
if len(elements) > 0:
elements[0].click()
# 继续寻找原来的正常控件
return self.find(locator, value)
# 如果黑名单也没有,就报错
logging.warn("black list no one found")
raise e
需要注意代码中的计数器,每次执行会对异常次数进行计算,比如使用 _error_count ,如果发现异常错误大于限制的次数 _error_max ,则抛出异常。
小结
以上,掌握了这些测试进阶技巧,恭喜你的测试开发技术又向前迈出了一个台阶。接下来,我们一起来掌握更多进阶测试实战技能。
测试高薪必备:移动APP自动化测试入门到实战 文章被收录于专栏
<p> 专刊包含了10+年经验测试架构师对测试职业发展的深度解读 帮助你掌握当下 BAT 流行的 App 自动化测试技术基础技能和工具使用;以及从入门到进阶的自动化测试实战经验,在面试中能够脱颖而出。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p> <p> <br /> </p>
查看11道真题和解析