testng 失败自动截图
2015-09-16 22:34
344 查看
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法
那么首先新建一个Listener 类,继承TestListenerAdapter
我这里主要重写OnTestFailure的方法
添加了一个takeScreenShot的方法
接下来在UITest类中添加截图的具体实现方法
接下来在case中使用这个Listener,有两种办法, 第一种直接在case类中添加注解@Listeners({ TestNGListener.class })
case代码:
View Code
第二种方法是在eclipse run config 添加如下参数-listener com.dbyl.libarary.utils.TestNGListener
这样就能实现case失败自动截图
这样,这个框架能够实现一些基本操作,下一步还需要实现失败重试 ,配合虚拟机
下载地址:https://github.com/tobecrazy/Demo
那么首先新建一个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(); } }
View Code
第二种方法是在eclipse run config 添加如下参数-listener com.dbyl.libarary.utils.TestNGListener
这样就能实现case失败自动截图
这样,这个框架能够实现一些基本操作,下一步还需要实现失败重试 ,配合虚拟机
下载地址:https://github.com/tobecrazy/Demo
相关文章推荐
- CF div2 319 C
- Ember.js 入门指南——handlebars属性绑定
- visual studio 2015 搭建python开发环境,python入门到精通[三]
- HtML<select>标签
- Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)
- 一道简单的百度笔试题
- 自定义组件实现三种进度条
- Mysql学习笔记(三)对表数据的增删改查。
- 插件下载地址 ext
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
- Java学习笔记(七)函数
- 安装与配置Oracle Warehouse Builder 11.2.0.3
- 深圳市福田区蓝特光学材料加工厂
- Laravel 在哪些地方用了 trait?
- JVM系列文章(三):Class文件内容解析
- 【原创】Android5.1 Art Hook 技术分享
- hdu2100(大数)
- 杭电acm--2040
- java: web应用中不经意的内存泄露
- 毕业后的失落