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>