在做web ui自动化的过程中,经常发现这样一种情况,执行时case报错啦,再重新执行一遍又成功了。

如果不解决这个问题,脚本稳定性就会变差,很让人蛋疼,怎么解决呢:

思路:

写一个装饰器,装饰在case方法上,case一但出错就抛出错误。能过装饰器去捕获,来控制重新执行case。

代码:

def replayCaseFail(num=3):
def _warpper(func):
def warpper(*args,**kwargs):
raise_info = None
rnum = 0
for i in range(num):
rnum +=1
try:
ret = func(*args,**kwargs)
if rnum > 1:
print('重试{}次成功'.format(rnum))
return ret
except Exception as ex:
raise_info = ex
print('重试{}次,全部失败'.format(rnum))
raise raise_info
return warpper
return _warpper

以上代码,经实际使用没有问题,也可以结合着unittest使用,或者ddt驱动装饰器使用,但要注意位置。

要放在最底层的,最靠近函数的位置。否则其它装饰器有可能会报错。

示例代码:

    @unittest.skipIf(getRunFlag('CHARGE', 'testCase2') == 'N', '验证执行配置')
@ddt.data(*FillData)
@replayCaseFail(num=3) #case执行失败后,重新执行num次
def testCase2(self,data):
"""储值并补开发票""" # 调用储值功能函数
self.chargeFunc(data) """补开发票"""
#单击 补开发票按钮
self.charge.clickFillReceipt
#获取 未开票金额
notFillPresent = self.charge.getNotFillPresent(data['txtName'])
#输入 开票金额
self.charge.inputFillPresent(notFillPresent)
#单击 确定 开发票
self.charge.clickFillConfirmBtn

selenium case报错重新执行的更多相关文章

  1. selenium启动报错“ incorrect JSON status mapping for 'unknown error' (500 expected)”

    前面讲了工程启动报错“selenium启动报错Unable to read VR Path Registry from C:\Users\clinva\AppData\Local\openvr\ope ...

  2. PLSQL报错:"动态执行表不可访问,本会话的自动统计被禁止"

      PLSQL报错:"动态执行表不可访问,本会话的自动统计被禁止" CreationTime--2018年7月16日19点26分 Author:Marydon 1.情景展示 2.解 ...

  3. selenium+phantomjs报错:Unable to find a free port的分析和解决

    selenium+phantomjs报错:Unable to find a free port的分析和解决 Table of Contents 1. 现象 2. 分析 3. 解决办法 1 现象 在做项 ...

  4. selenium python 报错“ unable to find binary in default location”

    selenium python 报错如下: raise exception_class(message, screen, stacktrace)selenium.common.exceptions.W ...

  5. 【Selenium】【BugList7】执行driver.find_element_by_id("kw").send_keys("Selenium"),报错:selenium.common.exceptions.InvalidArgumentException: Message: Expected [object Undefined] undefined to be a string

    [版本] selenium:3.11.0 firefox:59.0.3 (64 位) python:3.6.5 [代码] #coding=utf-8 from selenium import webd ...

  6. python+selenium运行报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    使用python+selenium运行自动化脚本时,打印某一段文字出现UnicodeEncodeError: 'ascii' codec can't encode characters in posi ...

  7. 使用Selenium模块报错的解决办法 (FileNotFound,WebDriverException)

    添加Chrome浏览器程序的目录到系统Path变量中: C:\Users\%USERNAME%\AppData\Local\Google\Chrome\Application ,使用pip3 inst ...

  8. 【Selenium】【BugList11】启动selenium server报错:Unsupported major.minor version 52.0

    [环境信息] python:3.6.5 平台:win7 selenium:3.11.0 selenium server:selenium-server-standalone-3.11.0.jar jd ...

  9. python selenium phantomjs 报错

    报错: webdriver.PhantomJS() raise exception_class(value)selenium.common.exceptions.WebDriverException: ...

随机推荐

  1. Android Studio项目导入aar包报错

    最近在试着接入TrPay的sdk,根据它家文档需要导入它们的aar包(paysdk-release-1.2.2.aar). 在AS中怎么给安卓项目导入aar包,网上搜一下就能看到无非也就下面三步: 1 ...

  2. Java多线程:Java内存模型

    参考资料: 程晓明:Java内存模型 <Java并发编程的艺术> <深入理解Java虚拟机:JVM高级特性与最佳实践>

  3. [转]application.properties详解 --springBoot配置文件

    本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...

  4. 【规范】前端编码规范——javascript 规范

    全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这一举措可防止全局命名空间被污 ...

  5. Vue:生命周期

    一.什么是vue的生命周期 Vue中的生命周期是指组件从创建到销毁的一系列过程.看下面这张官方文档的图: 从图片中可以看出Vue的整个生命周期包括8个状态,按照先后顺序分别为: beforeCreat ...

  6. halcon 创建region的最大尺寸问题

    gen_region 之类的创建region 之前需要提前设置region的最大尺寸,设置方法如下: set_system('width',2000)set_system('height',2000) ...

  7. linux和windows强制用户第一次登陆修改密码

    linux: passwd -e root windows: 计算机右键->管理->本地用户和组->用户->administrator->下一次登陆修改密码 如果密码复杂 ...

  8. spingboot中的美女banner.txt

    .::::. .::::::::. ::::::::::: ..:::::::::::' '::::::::::::' .:::::::::: '::::::::::::::.. ..:::::::: ...

  9. python 中 __init__方法

    注意1,__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了. class A(object): def __init__(self,name): self.name=name ...

  10. java基础---->自定义gradle的插件

    这里面简单的介绍一下gradle插件的编写. 自定义gradle插件 我们编写的gradle脚本一般是放在build.gradle文件中.所以首先创建一下build.gradle文件,下面的例子都是在 ...