testng失败截图,注解方式调用。
今天一整天都在研究testng失败截图的方法,参考网上的前辈们的资料,加上自己的理解,终于搞出来了。
package com.dengnapianhuahai;
/**
* 自定义注释
*
*/
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface MyAnnotation { }
package com.dengnapianhuahai;
* 测试类
*/
import org.testng.Assert;
import org.testng.annotations.Test;
//这里继承MyDriver类是因为MyDriver类里面实例化了driver,这里只是拿来用。
//MyDriver的作用就是生成一个全局变量的driver。
//Info 与 MyTestListener只是在用这个在MyDriver中定义好的WebDriver类型的变量driver而已。
public class Info extends MyDriver {
@Test
@MyAnnotation
public void open() {
driver.manage().window().maximize();
driver.get("http://www.baidu.com");
driver.getTitle();
Assert.assertEquals(driver.getTitle(), "百度一下,..你就知道"); }
}
package com.dengnapianhuahai; import java.io.File;
import java.lang.reflect.Method;
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;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter; public class MyTestListener extends TestListenerAdapter {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String mDateTime = formatter.format(new Date()); @Override
public void onTestFailure(ITestResult result) {
super.onTestFailure(result); try {
//用getInstance()方法生产实例然后强制转换为需要的类型(MyDriver),以获得全局变量driver;
WebDriver driver = ((MyDriver) result.getInstance()).getMyDriver();
//result.getMethod().getConstructorOrMethod().getMethod();之所以用三个个体getMethod()方法,是因为类型与等号左边的不一致。
Method method = result.getMethod().getConstructorOrMethod().getMethod(); if (method.isAnnotationPresent(MyAnnotation.class)) { File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("e:\\" + mDateTime + ".png"));
}
} catch (Exception e) {
e.printStackTrace(); }
}
}
package com.dengnapianhuahai; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
/**
*
* @author 等那片花海
*
*作为一个全局变量driver
*/
public class MyDriver { WebDriver driver = new FirefoxDriver(); public WebDriver getMyDriver() {
return this.driver;
}
}
<suite name="TestNGSuite">
<listeners>
<listener class-name="com.dengnapianhuahai.MyTestListener" />
</listeners>
<test name="test1">
<classes>
<class name="com.dengnapianhuahai.Info" /> </classes>
</test>
</suite>
testng失败截图,注解方式调用。的更多相关文章
- 【TestNG】使用代码方式调用TestNG用例执行
TestNG的用例除了直接运行之外,还可以使用代码来调用,这样做的好处在于我们可以将其嵌入其他代码中,来执行这些TestNG用例,方法如下: 1.直接调用用例类 范例:定义了两个测试用例类为Depen ...
- TestNG多线程测试-注解方式实现
用@Test(invocationCount = x,threadPoolSize = y)声明,invocationCount表示执行次数,threadPoolSize表示线程池大小. packag ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- WebDriver - 添加失败截图
WebDriver失败截图可以通过两种方式实现: 1. Use WebdriverEventListener 第一步:创建自己的WebDriverEventListener 创建自己的WebDrive ...
- springMVC注解方式+easyUI+MYSQL配置实例
刚接触springMVC,使用的注解方式,也在学习阶段,所以把自己学习到的记下来.本文利用springMVC从数据库读取用户信息为例,分享一下. 1.准备相关架包及资源.因为使用springMVC+e ...
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
- springmvc2 一个控制器写多个方法(非注解方式)
出处:http://blog.csdn.net/xuewenke/article/details/23895999 springmvc2 一个控制器写多个方法(非注解方式) 分类: spring 20 ...
- Shiro启用注解方式
shiro验证权限方式一种是基于url配置文件: 例如: <bean id="shiroFilter" class="org.apache.shiro.spring ...
- HttpClient Get/Post方式调用Http接口
本节摘要:本节主要分别介绍如何用get方式.post方式向http接口发送数据. preparation 1. 项目环境如下: myeclipse6.5 .tomcat5.0.system:xp.JD ...
随机推荐
- Visio2010如何安装
双击setup. 点击我接受此协议的条款,然后点击继续. 这里选择自定义,很重要哦,不要选择立即安装,不然,一会装完后,你会找不到快捷方式的. 文件位置这里选择好存放路径,一会我们要去这里 ...
- ios开发之 -- UIView总结
如果想调用某个类的某个方法可以写成这样,这个方法来自NSObject类 performSelector: performSelector:withObject: performSelector:wit ...
- SmartGit Mac、Liunx、Windows过期后破解方法
根据自己的操作系统,进入相应的文件夹 ,可能还有一个版本号的文件夹,再进入 Windows: %APPDATA%\syntevo\SmartGit\ OS X: ~/Library/Preferenc ...
- Qt计算两个时间差
QTime startTime = QTime::currentTime(); QThread::msleep(SLEEP_TIME_MILL); QTime stopTime = QTime::cu ...
- python 自己定义异常
通过创建一个新的异常类,就可以命名自己的异常,异常应该是典型的继承自Exception类 例如: # 定义了一个自己的异常类,可在适当时候通过raise来触发它class ExError(Except ...
- poj 1386
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11312 Accepted: 3862 De ...
- 【BZOJ2067】[Poi2004]SZN 二分+树上贪心
[BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...
- iOS UILabel两侧加阴影
- (void)viewDidLoad { [super viewDidLoad]; [self.view setBackgroundColor:[UIColor grayColor]]; // Do ...
- js判断对象数组中是否存在某个对象
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- Django--20170905--笔记
一.django的安装 1.先安装python 2.再安装django:pip install django 3.使用虚拟环境:pip install virtualenv 二.项目的创建 1.可以先 ...