思路:

1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法

2.在onTestFailure方法里,调用selenium的TakesScreenShot的getScreenshotAs()方法,完成截图

3.在testng.xml里注册监听器<listener class-name="com.util.TakeScreenshotListener" />

具体实现:

1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法

package com.util;

import org.openqa.selenium.WebDriver;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import knife.BrowserEmulator; public class TakeScreenshotListener extends TestListenerAdapter { @Override
public void onTestFailure(ITestResult tr) {
// TODO Auto-generated method stub
super.onTestFailure(tr);
// 类名为全类名,包含包名:com.testcases.LoginTest
String classname = tr.getTestClass().getName();
// 方法名为执行的方法:testWrongPasswordLogin
String methodname = tr.getMethod().getMethodName();
// 此处为获取当前的driver,可以写一个静态方法来获取当前driver,然后来调用
WebDriver driver = BrowserEmulator.getWebDriver();
TakeScreenshot shot = new TakeScreenshot(driver);
shot.takeScreenShot(classname, methodname);
} }

2.在onTestFailure方法里,调用selenium的TakesScreenShot的getScreenshotAs()方法,完成截图

package com.util;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver; public class TakeScreenshot {
WebDriver driver;
String filePath; public TakeScreenshot(WebDriver driver) {
this.driver = driver;
} public void takeScreenShot(String classname, String methodname) {
// 获取截图file
File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
try {
// 将图片移动到指定位置
FileUtils.moveFile(file, new File(getFilePath(classname, methodname)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public String getFilePath(String classname, String methodname) {
// 创建储存图片的路径,不存在则创建
File dir = new File("test-output/snapshot");
if (!dir.exists()) {
dir.mkdirs();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");
String dateStr = dateFormat.format(new Date());
// 获取新的文件名,包含时间,类名,方法名
String fileName = dateStr + "_" + classname + "_" + methodname + ".jpg";
// 获取文件路径
String filePath = dir.getAbsolutePath() + "/" + fileName;
return filePath; }
}

3.在testng.xml里注册监听器<listener class-name="com.util.TakeScreenshotListener" />

	<listeners> <!-- 如果用例断言失败进行截图 -->
<listener class-name="com.util.TakeScreenshotListener" />
</listeners>

【框架】selenium运行失败后自动截图(三)的更多相关文章

  1. Unittest 支持 case 失败后自动截图功能的另外两种方式

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

  2. Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录

    本人微信公众号:微软动态CRM专家罗勇 ,回复298或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 系统 ...

  3. autoOpenBrowser: true, 运行npm后自动打开浏览器

    autoOpenBrowser: true, 运行npm后自动打开浏览器

  4. 执行testng appium用例失败,自动截图

    新建一个截图监听类ScreenShotListener ,重写onTestFailure方法,里面定义了 监听的driver ,截图文件路径和名称 package com.fsssc.htsgl.ut ...

  5. python+selenium生成测试报告后自动发送邮件

    标签(空格分隔): 自动化测试 运行自动化脚本后,会产生测试报告,而将测试报告自动发送给相关人员,能够让对方及时的了解测试情况,查看测试结果. 整个脚本包括三个部分: 生成测试报告 获取最新的测试报告 ...

  6. Node.js中的express框架,修改内容后自动更新(免重启),express热更新

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 以前node中的express框架,每次修改代码之后,都需要重新npm s ...

  7. python3 + selenium 运行过程中进行截图

    使用driver.get_screenshot_as_file方法("D:/aaac.png")括号中为需要存放的路径及图片名称 from selenium import webd ...

  8. TestNG监听器实现用例运行失败自动截图、重运行功能

    注: 以下内容引自 http://blog.csdn.net/sunnyyou2011/article/details/45894089 (此非原出处,亦为转载,但博主未注明原出处) 使用Testng ...

  9. Selenium2+python自动化67-用例失败自动截图【转载】

    前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图 ...

随机推荐

  1. 设计模式(二)策略模式(Strategy)

    1.分析项目中变化部分与不变部分 2.多用组合,少用继承:用行为类组合,而不是行为的继承 案例: 第一步,把行为抽象为接口 package top.littlepage.designPattern.S ...

  2. 如何在python中调用C语言代码

    1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...

  3. python web py安装与简单使用

    web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识.   安装: pip install we ...

  4. lattice 作图 举例

    library(lattice) Depth <- equal.count(quakes$depth, number=8, overlap=.1)xyplot(lat ~ long | Dept ...

  5. Altium Designer PCB画板-交互式布局与模块化布局

    交互式布局 (1)为了达到原理图与PCB两两交互,需要在原理图界面和PCB界面都执行菜单命令“Tools-Cross Select Mode”,选择交互按钮

  6. MYSQL常用函数(控制流函数)

    MySQL有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台. MySQL控制流函数: CASE WHEN[test1] THEN [r ...

  7. ICO分享

  8. NGUI实现UITexture的UV滚动

    材质上使用的贴图: 效果:实现该纹理在屏幕上的滚动 代码: using System.Collections; using System.Collections.Generic; using Unit ...

  9. centos php5.4 升级 php7

    接上篇,edusoho需要php5.5以上版本,于是需要升级本地php php是通过yum默认安装的.以下安装参考 link https://blog.csdn.net/u012569217/arti ...

  10. 雷林鹏分享:jQuery EasyUI 数据网格 - 添加分页组件

    jQuery EasyUI 数据网格 - 添加分页组件 本实例演示如何从服务器端加载数据,如何添加分页组件(pagination)到数据网格(datagrid). 创建数据网格(DataGrid) 为 ...