范围报告版本4屏幕截图未生成

时间:2020-02-03 18:33:45

标签: screenshot selenium-extent-report

我根本不明白为什么会发生此错误。无法生成范围报告和捕获屏幕截图。我已经附加了Test,AfterMethod和AfterTest和屏幕快照方法。我想在其他文件夹下捕获屏幕截图。

我收到的错误消息如下。

失败的配置:@AfterMethod getReport([TestResult name = checkTitle status = SUCCESS method = Google.checkTitle()[pri:0, 实例:Google @ 3224f60b] output = {null}])java.io.IOException: 文件名,目录名或卷标语法不正确。

以下是我的硒测试代码。

@Test
public void checkTitle() {
    test = extent.createTest("Title Check test");
    Actual_Title = driver.getTitle();
    System.out.println(Actual_Title);
    Assert.assertEquals(Actual_Title, Expected_Tite);
    test.log(Status.PASS, "This Test is Passed!");
}

@AfterMethod
public void getReport(ITestResult result) throws IOException {
    if (result.getStatus() == ITestResult.FAILURE) {
        test.log(Status.FAIL,MarkupHelper.createLabel(result.getMethod().getMethodName(),ExtentColor.RED));
        test.fail("TestFailed due to"+"  "+result.getThrowable().getMessage());
        String imagePath =Google.captureScreen(driver,result.getName());
        test.addScreenCaptureFromPath(imagePath);
    }
    else if (result.getStatus() == ITestResult.SKIP) {
        test.log(Status.SKIP,MarkupHelper.createLabel(result.getMethod().getMethodName(),ExtentColor.AMBER));
        test.skip(result.getThrowable().getMessage());
    } else {
        test.log(Status.PASS,MarkupHelper.createLabel(result.getMethod().getMethodName(),ExtentColor.GREEN));
        String imagePath =Google.captureScreen(driver, result.getName());
        test.addScreenCaptureFromPath(imagePath);
    }

}

@AfterTest
public void endTest() {
    extent.flush();
    driver.quit();
}

public static String captureScreen(WebDriver driver,String screenshotname)throws IOException {
    String date = new SimpleDateFormat("MM-dd-yy,hh:mm:ss").format(new Date());
    TakesScreenshot ts = (TakesScreenshot)driver;
    File src= ts.getScreenshotAs(OutputType.FILE);
    String path = System.getProperty("user.dir")+"/ScreenShots/"+screenshotname+date+".png";
    File destination = new File(path);
    FileUtils.copyFile(src, destination);
    return path;
}

1 个答案:

答案 0 :(得分:0)

我可以重提您的问题。 对于以下代码,我得到的错误与您提到的完全相同。

        String date = new SimpleDateFormat("MM-dd-yy,hh:mm:ss").format(new Date());
        String screenshotname = "MyScreenshot";
        String path = System.getProperty("user.dir")+"/test- 
        output/"+screenshotname+date+".png";
        logger.info("In failedTCTakeScreenshot:: ******path***** " + path);

日志错误

      [INFO ] 2020-07-28 23:09:52.281 [main] com.resources.BaseTest -In 
      failedTCTakeScreenshot:: ******path***** 
      E:\Automation\EclipseWorkspace\AutomationPrj/test-output/MyScreenshot07-28- 
      20,11:09:52.png

      [ERROR] 2020-07-28 23:09:52.285 [main] com.resources.BaseTest - 
      BaseTest::failedTCTakeScreenshot::***In Catch Block *** java.io.IOException: The 
      filename, directory name, or volume label syntax is incorrect

根本原因分析:-

在分析中,我发现您正在存储名称为MM-dd-yy,hh:mm:ss日期格式的屏幕截图。 Windows不接受文件名中的任何:或。您需要更改您的屏幕快照名称,使其不包含:等。

当我将代码中的DateFormat更改为MM-dd-yyyy时,我可以成功复制屏幕截图,并且不会引发任何错误。

        String date = new SimpleDateFormat("MM-dd-yyyy").format(new Date());
        String screenshotname = "MyScreenshot";
        String path = System.getProperty("user.dir")+"/test- 
        output/"+screenshotname+date+".png";
        logger.info("In failedTCTakeScreenshot:: ******path***** " + path);

日志:-

      [INFO ] 2020-07-28 23:24:27.457 [main] com.resources.BaseTest - In 
      failedTCTakeScreenshot:: ******path***** 
      E:\Automation\EclipseWorkspace\AutomationPrj/test-output/MyScreenshot07-28- 
      2020.png

      [INFO ] 2020-07-28 23:24:27.463 [main] com.resources.BaseTest - In 
      failedTCTakeScreenshot:: ******path destination***** 
      E:\Automation\EclipseWorkspace\AutomationPrj\test-output\MyScreenshot07-28- 
      2020.png

因此,您只需要更改Screenshotname,以使其不包含像;这样的特殊字符即可。和,