思路:

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. 你想了解Go语言开发吗?

    大家先了解一下什么是Go语言? Go语言是谷歌2009发布的第二款开源编程语言.Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持 ...

  2. ubuntu 安装cuda 9.1 pytorch 0.3.0

    毕业再没用配过机器学习的环境了,既亲切又陌生,久违了. 系统 mint18  x64 1安装cuda 按官网提示 选的9.1版  https://developer.nvidia.com/cuda-t ...

  3. AtCoder Grand Contest 027 C ABland Yard

    ABland Yard 思路: 用了类似拓扑排序的方法来判环 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optim ...

  4. xpath是什么(入门教程)

    xpath是什么(入门教程) 一.总结 一句话总结:一句话,XPath 是一门在 XML 文档中查找信息的语言.简单来说,html类似于xml结构,但是没有xml格式那么严格. 在xml中查找信息 包 ...

  5. learn python the hard way 习题18~25总结

    定义函数和调用函数的语法 定义函数 形式: def functionName(p1,p2): statement other statement 需要注意: 紧跟者函数定义的代码是否使用了4个空格的缩 ...

  6. centos7:mysql-5.7.23安装(二进制安装)

    mysql有二进制码安装,和源码编译安装(mysql5.5使用cmake安装,mysql5.7需要安装boost依赖安装),因为boost依赖安装麻烦,所以用二进制码安装 MySql 5.7.23安装 ...

  7. spring ----> 搭建spring+springmvc+mybatis出现的几个问题

    环境: idea ce 2018.1+maven3.5.3+mysql8.0.11+jdk1.8 spring4.3.7+spring mvc4.3.7+mybatis3.4.1+tomcat7.0. ...

  8. 尝试重新(多次反复)处理某个逻辑的示例(good)

    以下例程的优点: 1.可以重新尝试某个动作 2.另外,在重新尝试的同时,可以做一些逻辑判断及标记的初始化 public static bool RetryLogin()        {        ...

  9. Onsen UI快速入门 --Onsen UI

     一.什么是Onsen UI? 1.一系列专为移动应用程序设计的丰富UI组件.具有遵循原生iOS和Android设计标准的即时实现功能.免费使用,100%开源软件(Apache v2许可证).Onse ...

  10. java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

    java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration 最近在做项目的时候遇到了这个问题,很是困扰,多次尝试后发现是jar包的问 ...