原生的unittest框架是不支持case失败后自动截图的功能的,网上看了大家的解决办法,大体上分为两种:
1、要么加装饰器
2、也有人封装断言
这里我们看看还有没有其他的更加方便的方法值得大家一起探讨一下:

找不到元素后自动截图

如果使用selenium的话(相比于selenium,我更加喜欢airtest,这个后面的文章会提到airtest的UI自动化设计),我们知道不管是sendkeys、click、doubleclick 等操作还是assert都会去调用find_element 方法,我们完全可以在找不到元素的时候就进行截图呀,这样需要重新封装一下find_element方法即可。如下就是一个解决方案:

def find_element(self, *loc):
"""
重封装的find方法,接受元祖类型的参数,默认等待元素5秒,寻找失败时自动截图
:param loc:元组类型,必须是(By.NAME, 'username')这样的结构
:return:元素对象webelement
"""
try:
webelement = WebDriverWait(self.operate_driver, 5).until(lambda x: x.find_element(*loc))
return webelement
#except (TimeoutException, NoSuchElementException,AttributeError) as e:
except Exception as e:
# 截图路保存径,绝对路径,也可以用相对路径
SCREENSHOTURL = r"C:\Users\Administrator\Desktop\UItest\screenshot\\"
# 时间样式
ISOTIMEFORMAT = '%Y%m%d%H%M%S'
#寻找失败时自动截图至指定目录sreenshot,截图名称为调用方法名(测试用例名)+ 时间戳 + png后缀
self.operate_driver.get_screenshot_as_file(SCREENSHOTURL + sys._getframe(1).f_code.co_name + '_' + time.strftime(ISOTIMEFORMAT, time.localtime(time.time()))+".png")
 

用例执行失败后自动截图

上面所说的当找不到元素的时候会自动截图的方法只能部分的解决的用例失败的截图问题,有时候可能元素能够找到但是case依然会失败。这个时候就需要下面的一种方法:用例执行失败后自动截图。这种方法也更加适合UI自动化设计的原始目的。
Unittest支持setup和teardown,是否可以创建一个主类,主类里面设计好每条case执行前要做什么,每条case执行后要做什么。暂且我们先不管setup,要满足在每条case失败后自动截图的功能,我们可以只在teardown里面下点功夫即可。话不多说直接上代码:

# 主测试类继承自测试框架unittest
class MainCase(unittest.TestCase):
# 声明一个webdriver
#driver = WebChrome()
driver = webdriver
base_url = ReadWritePara('common', 'base_url').get_value()
#在allure报告中初始化环境信息 def setUp(self):
# 测试之前,启动浏览器,打开一个设定好的网址
self.driver = webdriver.Chrome()
#print(self.driver)
self.driver.get(self.base_url)
#最大化窗口,防止下窗口情况下图片不匹配
self.driver.maximize_window() def tearDown(self):
# 当用例执行失败后会自动截图
if len(self._outcome.errors) >= 1:
print(self.driver)
allure.attach(" ", self.driver.get_screenshot_as_png(), type=AttachmentType.PNG)
# 测试完毕的时候关闭浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()
 

单条测试用例可以继承MainCase即可,这样就可以做到当case执行失败,自动保存截图

上面仅仅个人观点,欢迎大家来探讨

Unittest 支持 case 失败后自动截图功能的另外两种方式的更多相关文章

  1. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  2. 【框架】selenium运行失败后自动截图(三)

    思路: 1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法 2.在onTestFailure方法里,调用selenium的TakesScreenShot的g ...

  3. 在javaScript中把非数值类型的数据自动转换为数值类型的两种方式

    一.使用Number()函数. 二.使用parseInt()/parseFloat()函数. 详情: 一.使用Number()函数将非数值类型的数据自动的转化为数组类型 Number()函数可以将任何 ...

  4. selenium中webdriver跳转新页面后定位置新页面的两种方式

    刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...

  5. Webdriver+Testng实现测试用例失败自动截图功能

    testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...

  6. webpack--运行npm run dev自动打开浏览器运行首页的两种方式以及热加载

    作为开发人员,我们在修改了代码之后,在vscode终端运行npm run dev指令后,希望它可以自动打开浏览器方便我们调试,有两种方式可以实现: 自动打开浏览器的两种方式: 方式一: 1.webpa ...

  7. [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换

    [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...

  8. Nginx配置同一个域名同时支持http与https两种方式访问

    Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server{listen 80;listen 443 ssl;ssl on;server_name 域名;in ...

  9. SpringMVC 控制器默认支持GET和POST两种方式

    在SpringMVC的controller中,@RequestMapping只写路径,不包含RequetMethod.GET和RequetMethod.POST,HttpServletRequest的 ...

随机推荐

  1. CSS元素的基本应用(附加京东面试题)

    ONE! 列表~ 列表分为有序列表和无序列表还有定义列表(ul和ol,dl) ul 无序列表 ul它天生自带内边距  还有一个 p 标签也是天生就自带内边距的(内边距 padding) list-st ...

  2. 图片加载时间缓慢问题API

    一.背景       最近段时间,开发写值工具项目中,出现图片加载问题API,响应时间缓慢:为了优化图片加载问题,我进行图片压缩方法,然后API的图片加载还是慢,最终在自己无意中乱写找到了根本的原因. ...

  3. 破坏之王-DDoS攻击与防范深度剖析

    破坏之王-DDoS攻击与防范深度剖析 下载:链接:https://pan.baidu.com/s/1bzVT6YkZGGg7anpQWDknjA 提取码:j7ns 网际空间的发展带来了机遇,也带来了威 ...

  4. python 查询 elasticsearch 常用方法(Query DSL)

    1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsearch(["localhost:9200"]) 2. ...

  5. 并发编程-concurrent指南-Lock

    既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurr ...

  6. iOS13中presentViewController的问题

    iOS13中presentViewController的问题 更新了Xcode11.0 beta之后,在iOS13中运行代码发现presentViewController和之前弹出的样式不一样. 会出 ...

  7. HDU 6043:Colorful Tree(树上统计所有路径总颜色数)***

    题目链接 题意 给出一棵有n个结点的树,每个结点有一个颜色,问在这棵树的所有路径中,每条路径的颜色数求和是多少. 思路 求每种颜色的贡献可以转化为总的和减去每种颜色在哪些路径上没有出现的贡献,一个颜色 ...

  8. HDU 4444:Walk(思维建图+BFS)***

    http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给出一个起点一个终点,给出n个矩形的两个对立顶点,问最少需要拐多少次弯可以从起点到达终点,如果不能输 ...

  9. Flutter学习笔记(5)--Dart运算符

    如需转载,请注明出处:Flutter学习笔记(5)--Dart运算符 先给出一个Dart运算符表,接下来在逐个解释和使用.如下:                            描述       ...

  10. c++学习书籍推荐《C++编程思想第二卷》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++编程思想>(第2卷)是惟一一本如此清晰地阐述如何重新思考以面向对象方法构造程序的书籍.<C++编程思想>(第2卷)介绍实用的编 ...