testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法

那么首先新建一个Listener 类,继承TestListenerAdapter

package com.dbyl.libarary.utils;

import org.openqa.selenium.WebDriver;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter; /**
*
* @author Young
*
*/
public class TestNGListener extends TestListenerAdapter {
Log log = new Log(this.getClass()); @Override
public void onTestSuccess(ITestResult tr) {
log.info("Test Success");
super.onTestSuccess(tr);
} @Override
public void onTestFailure(ITestResult tr) {
log.error("Test Failure");
super.onTestFailure(tr);
takeScreenShot(tr);
} private void takeScreenShot(ITestResult tr) {
UITest b = (UITest) tr.getInstance();
WebDriver currentDirver = b.getDriver();
System.out.println(currentDirver.getTitle());
b.takeScreenShot(); } @Override
public void onTestSkipped(ITestResult tr) {
log.error("Test Skipped");
super.onTestSkipped(tr);
} @Override
public void onTestStart(ITestResult result) {
log.info("Test Finsh");
super.onTestStart(result);
} @Override
public void onStart(ITestContext testContext) {
log.info("Test Start");
super.onStart(testContext);
} @Override
public void onFinish(ITestContext testContext) {
log.info("Test Finish");
super.onFinish(testContext);
} }

我这里主要重写OnTestFailure的方法

添加了一个takeScreenShot的方法

接下来在UITest类中添加截图的具体实现方法

/**
*
*/
package com.dbyl.libarary.utils; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
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; /**
* @author Young
*
*/
public class UITest {
WebDriver driver;
Log log = new Log(this.getClass()); public WebDriver getDriver() {
return driver;
} /**
* init test case
*
* @param driver
*/
public void setDriver(WebDriver driver) {
this.driver = driver;
} public void init(WebDriver driver) {
log.info("Start WebDriver");
setDriver(driver);
} /**
* stop webdriver
*
* @param driver
*/
public void stop() {
log.info("Stop WebDriver");
driver.quit(); } /**
* @author Young
*/
public void takeScreenShot() {
SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
String dateStr = sf.format(date);
String path = this.getClass().getSimpleName() + "_" + dateStr + ".png";
takeScreenShot((TakesScreenshot) this.getDriver(), path);
} /**
* @author Young
* @param drivername
* @param path
*/
public void takeScreenShot(TakesScreenshot drivername, String path) {
// this method will take screen shot ,require two parameters ,one is
// driver name, another is file name
String currentPath = System.getProperty("user.dir"); // get current work
log.info(currentPath);
File scrFile = drivername.getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy
try {
log.info("save snapshot path is:" + currentPath + path);
FileUtils.copyFile(scrFile, new File(currentPath + "\\" + path));
} catch (Exception e) {
log.error("Can't save screenshot");
e.printStackTrace();
} finally {
log.info("screen shot finished");
}
} }

接下来在case中使用这个Listener,有两种办法, 第一种直接在case类中添加注解@Listeners({ TestNGListener.class })

case代码:

package com.dbyl.tests;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test; import com.dbyl.libarary.action.ViewHomePage;
import com.dbyl.libarary.utils.DriverFactory;
import com.dbyl.libarary.utils.TestNGListener;
import com.dbyl.libarary.utils.UITest;
//@Listeners({ TestNGListener.class })
public class loginTest extends UITest { WebDriver driver = DriverFactory.getChromeDriver(); @BeforeMethod(alwaysRun = true)
public void init() { super.init(driver);
ViewHomePage.setDriver(driver);
} @Test(groups = "loginTest")
public void loginByUerName() throws Exception {
ViewHomePage.viewMyProfile();
} @AfterMethod(alwaysRun = true)
public void stop() {
super.stop();
} }

第二种方法是在eclipse run config 添加如下参数-listener com.dbyl.libarary.utils.TestNGListener

这样就能实现case失败自动截图

这样,这个框架能够实现一些基本操作,下一步还需要实现失败重试 ,配合虚拟机

下载地址:https://github.com/tobecrazy/Demo

testng 失败自动截图的更多相关文章

  1. TestNG失败自动截图

    转自:https://www.cnblogs.com/tobecrazy/p/4814813.html

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

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

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

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

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

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

  5. QTP场景恢复之用例失败自动截图

    以下代码是在QC里运行QTP来执行脚本过程,当执行过程中发现用例失败后就会自动截图,然后把用例返回到最初始的状态,模拟了场景恢复的机制 Class QCImageErrorCapture Dim qt ...

  6. TestNG实现用例运行失败自动截图(转载)

    转载自:https://blog.csdn.net/galen2016/article/details/70193684 重写Listener的onTestFailure方法 package com. ...

  7. appium自动化,失败自动截图

    1.创建监听器类TestNGListener,重写onTestFailure方法,里面定义了 监听的driver ,截图文件路径和名称 package utils; import cases.Appi ...

  8. testng失败自动重试

    使用的监听类有:IRetryAnalyzer.TestListenerAdapter.IAnnotationTransformer public class Retry implements IRet ...

  9. selenium2入门 断言失败自动截图 (四)

    一般web应用程序出错过后,会抛出异常.这个时候能截个图下来,当然是极好的. selenium自带了截图功能. //获取截图file File scrFile= ((TakesScreenshot)d ...

随机推荐

  1. 使用EXtjs6.2构建web项目

    一.项目简介 众所周知ext是一款非常强大的表格控件,尤其是里边的grid为用户提供了非常多的功能,现在主流的还是用extjs4.0-4.2,但是更高一点的版本更加符合人的审美要求.因此,在今天咱们构 ...

  2. thinkphp-二次开发1

    Thinkphp是一个国人使用的比较多的一个框架 ,具体的也不多了,不知道的可以去百度一下. 现在我们要讲的是如何利用现有的半成品的系统实现二次开发 讲到thinkphp的二次开发不得不说他的兄弟on ...

  3. Java时间类型转换

    String转Long Long long=new SimpleDateFormat("yyyyMMddHHmmss").parse(String).getTime(); Long ...

  4. [虚拟机]Virtual Box的使用--共享文件夹

    最近为系统测试使用了虚拟机,VM太卡,所以使用了VBox,运行效果还不错 为了主机和客户机之前方便进行数据传输,一般采用文件夹共享的方式(当然,可以直接拖拽) 1,直接拖拽,需要做如下设置 主要的是“ ...

  5. 首次接触nodejs

    嗯,2017年第一次接触nodejs ,也费了一些时间才终于将hello world正确运行出来. 下面说一下我的详情吧: 第一步:不用说,在https://nodejs.org/en/下载一款新的稳 ...

  6. sql 注入问题

    1. 关于使用intval强制转换成数字的问题.数字大于2147483647会出现溢出出现负数.使用个方法来替代这个吧$n="\n";$a=2147483648.05555;ech ...

  7. Java 时间的表示

    //不建议的方式 out.println("<p>结束Servlet的时间:" + new Date().toLocaleString() + "</p ...

  8. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  9. Apache DdlUtils入门

    Introduction  DdlUtils is a small, easy-to-use component for working with Database Definition (DDL) ...

  10. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...