2

我正在尝试在测试失败报告中添加屏幕截图。我根据本教程运行它: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 的链接永远不会进入“Reporter output”视图。

有谁知道我需要做什么才能使它工作?

这是一个带有 maven 的 Java 项目

4

1 回答 1

0

为此,您必须使用侦听器。创建一个给定名称的新类并扩展 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;
            }
    }
于 2017-11-22T08:04:32.497 回答