'记者输出'在testng报告

时间:2017-11-21 13:19:51

标签: java maven intellij-idea testng test-reporting

我试图在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项目

1 个答案:

答案 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);
                }
        }


}