我试图在testng报告失败时添加屏幕截图。 我根据本教程运行它:http://toolsqa.com/selenium-webdriver/testng-reporters-asserts/
我的功能
public static void onTestFailure(ITestContext tc, ITestResult result, WebDriver driver) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String methodName = result.getName();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
String reportDirectory = new File(System.getProperty("user.dir")).getAbsolutePath() + "\\test-output\\" +tc.getSuite().getXmlSuite().getName();
System.out.printf(reportDirectory);
File destFile = new File((String) reportDirectory+"\\failure_screenshots\\"+methodName+"_"+formater.format(calendar.getTime())+".png");
FileUtils.copyFile(scrFile, destFile);
Reporter.log("<a href='"+ destFile.getAbsolutePath() + "'> <img src='"+ destFile.getAbsolutePath() + "' height='100' width='100'/> </a>");
} catch (IOException e) {
e.printStackTrace();
}
}
问题是屏幕截图出现在适当的位置,但来自Reporter.log的链接永远不会到达报告输出&#39;图。
有人知道我需要做些什么才能让它发挥作用吗?
它与maven的Java项目
答案 0 :(得分:0)
您必须为此目的使用侦听器。创建给定名称的新类并扩展TestListenerAdapter。覆盖onTestFailure方法。在这里写下截图捕获代码。
OnDataChange()
唯一棘手的部分是如何将驱动程序对象引用传递给侦听器类。 所以我在实例化驱动程序的类中添加了一个getter方法,用于获取活动的驱动程序对象。
public class ListenersEvents extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
Object currentClass = result.getInstance();
WebDriver webDriver = ((browserSetup) currentClass).getActiveObject();
if (!result.isSuccess()) {
Reporter.log("Test Result: FAIL",true);
takeScreenshotOfFailureFromLocalMachine(result,webDriver);
} else {
Reporter.log("Test Result: PASS",true);
}
}
}