Java ';报告器输出';在testng报告中为空
我正在尝试添加失败测试报告的屏幕截图。 我根据本教程运行它: 我的职能Java ';报告器输出';在testng报告中为空,java,maven,intellij-idea,testng,test-reporting,Java,Maven,Intellij Idea,Testng,Test Reporting,我正在尝试添加失败测试报告的屏幕截图。 我根据本教程运行它: 我的职能 public static void onTestFailure(ITestContext tc, ITestResult result, WebDriver driver) { Calendar calendar = Calendar.getInstance(); SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
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();
}
}
公共静态void onTestFailure(ITestContext tc、ITestResult结果、WebDriver){
日历=Calendar.getInstance();
SimpleDataFormat格式化程序=新的SimpleDataFormat(“dd_-MM_-yyy_-hh_-MM_-ss”);
String methodName=result.getName();
文件scrFile=((TakesScreenshot)driver.getScreenshotAs(OutputType.File);
试一试{
String reportDirectory=新文件(System.getProperty(“user.dir”)).getAbsolutePath()+“\\test output\\”+tc.getSuite().getXmlSuite().getName();
System.out.printf(reportDirectory);
File destFile=new File((String)reportDirectory+“\\failure\u屏幕截图\\”+methodName+“\u”+formatter.format(calendar.getTime())+“.png”);
copyFile(scrFile,destFile);
记录者。日志(“”);
}捕获(IOE异常){
e、 printStackTrace();
}
}
问题是ttht屏幕截图出现在适当的位置,但Reporter.log的链接永远无法进入“Reporter output”视图
有人知道我需要做什么才能让它工作吗
这是一个使用maven的Java项目为此,您必须使用监听器。创建一个具有给定名称的新类并扩展TestListenerAdapter。重写onTestFailure方法。在这里编写您的截图捕获代码
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);
}
}
}
唯一棘手的部分是如何将驱动程序对象引用传递给侦听器类。
因此,我在实例化驱动程序的类中添加了一个getter方法,用于获取活动驱动程序对象
public class browserSetup{
WebDriver driver;
public WebDriver createFirefoxDriver(){
// set path for geckodriver
return new FirefoxDriver();
}
public WebDriver createChromeDriver(){
//set path for chrome driver
return new ChromeDriver();
}
public WebDriver getActiveObject() {
return this.driver;
}
}
这个方法在哪里被调用:在@Test注释的方法之后还是在任何@afterTest注释的方法中?它在@AfterMethod注释的方法中,我有if(result.FAILURE==result.getStatus()),然后调用屏幕截图和日志linkReporter.log只在@u测试注释的方法内部工作。要将自定义日志添加到报表中,需要实现侦听器。签出下面的代码片段。