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测试注释的方法内部工作。要将自定义日志添加到报表中,需要实现侦听器。签出下面的代码片段。