5

我正在尝试向我的 ExtentReport HTML 文件添加屏幕截图,但由于某种原因,即使图像确实存在,图像也不存在,并且控制台显示它正在查看正确的位置(href 是正确的)。

这是最新的试用代码:

Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
String destination = getScreenshotPath();
ImageIO.write(screenshot.getImage(), "IMG", new File(destination));
test.fail("Details: " + test.addScreenCaptureFromPath(destination));

屏幕截图保存在目标中。当我尝试调试模式或查看报告时,它打印为:

详细信息:com.aventstack.extentreports.ExtentTest@62041567,下面有一个损坏的图像:

在此处输入图像描述

4

7 回答 7

5

我使用了绝对路径

注意:从浏览器检查损坏的图像以验证图像的绝对路径

截图:

  public static String TakesScreenshot(IWebDriver driver, string FileName)
    {

        string pathProject = AppDomain.CurrentDomain.BaseDirectory;
        string pathScreen = pathProject.Replace("\\bin\\Debug", "");
        string path = pathScreen + "project/Test-output/Images/";

        StringBuilder TimeAndDate = new StringBuilder(DateTime.Now.ToString());
        TimeAndDate.Replace("/", "_");
        TimeAndDate.Replace(":", "_");
        TimeAndDate.Replace(" ", "_");

        string imageName = FileName + TimeAndDate.ToString();

        ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(path + "_" + imageName + "." + System.Drawing.Imaging.ImageFormat.Jpeg);

        return path + "_" + imageName + "." + "jpeg";
    }

使用预览方法的路径将图像附加到报表中: 在具体步骤中:

ExtentTest.Fail("message", MediaEntityBuilder.CreateScreenCaptureFromPath(TakeScreenShot.TakesScreenshot(driver, "Fatal")).Build());

“TakesScreenshot”方法截屏

版本 ExtentReport:3、C#、NUnit 3

使用 Java:

        <dependency>
        <groupId>com.relevantcodes</groupId>
        <artifactId>extentreports</artifactId>
        <version>2.41.2</version>
        </dependency>

是:

 ExtentTestManager.getTest().log(LogStatus.ERROR, ExtentTestManager.getTest().addScreenCapture("//ABOLUTE/PATH/IMAGE.PNG"));

问候。

于 2017-11-29T19:32:36.080 回答
5

正如建议的那样 - 绝对路径可能是一个解决方案,但我不想那样做。

我发现一个解决方案是将图像存储在生成报告的同一目录中,将图像名称赋予 .addScreenCaptureFromPath( screenshotName.PNG ) 并且它可以完美运行。

于 2017-12-12T10:57:47.600 回答
2

为了在范围报告中获取屏幕截图,只需在范围报告屏幕截图路径中添加一个额外的点。参考以下代码:

test.log(Status.INFO, "FAQs button clicked",
                        MediaEntityBuilder.createScreenCaptureFromPath("." + screenshot()).build());

希望这可以帮助!

于 2019-11-26T08:38:50.433 回答
0

我尝试了各种网站和博客来解决这个问题,但在任何地方都找不到解决方案。在尝试了各种方法后,我得到了以下解决方案。尝试以下解决方案,它对我来说非常有效。

public static synchronized String addScreenshots(){
     WebDriver webDriver = Browser.getDriver();
     Long l = Calendar.getInstance().getTimeInMillis();
     String screenshotId = l.toString();
     String Path = System.getProperty("user.dir")+"/ExtentReports/"; 

     File screenshot = ((TakeScreenshot)WebDriver).getScreenshotAs(OutputType.FILE);
     String imgPath = Path+screenshotId+".png";
     
     File dest = new File(imgPath);
     try {
         FileUtils.copyFile(screenShot, dest);
     } catch (IOException e) {
         e.printStackTrace();
     }
     
     String ImagePath = "../ExtentReports/"+screenshotId+".png";
     
     return ImagePath;
}
于 2021-05-24T16:05:26.153 回答
0

这对你有用,因为它也对我有用。

public void afterScenario(Scenario scenario) throws IOException {
        if (scenario.isFailed()) {
            String screenshotName = scenario.getName().replaceAll(" ", "_");
            //This takes a screenshot from the driver at save it to the specified location
            File sourcePath = ((TakesScreenshot) testContext.getWebDriverManager().getDriver()).getScreenshotAs(OutputType.FILE);

            //Building up the destination path for the screenshot to save
            //Also make sure to create a folder 'screenshots' with in the cucumber-report folder
            File destinationPath = new File("./src/test/resources/"+screenshotName + ".png");

            //Copy taken screenshot from source location to destination location
            Files.copy(sourcePath, destinationPath);

            //This attach the specified screenshot to the test
            Reporter.addScreenCaptureFromPath(screenshotName+".png");
            System.out.println("Cant take screenshot in grid.");
        }
    }
于 2020-01-21T12:54:39.777 回答
0

您可以为绝对路径添加屏幕截图,如下所示:

文件 src = ((TakesScreenshot) 驱动程序).getScreenshotAs(OutputType.FILE);

//对于文件复制,绝对路径从你的项目目录开始

FileUtils.copyFile(src, new File("../resources/reports/screenshots/screen2.png"));

String img = logger.addScreenCapture("./screenshots/screen2.png");

logger.log(LogStatus.PASS, "标题已验证...", img);

请注意,这里的 addScreenCapture() 方法路径从屏幕截图文件夹开始,而不是从 copyFile() 方法中的资源开始。这是因为 ExtentReports 被初始化为:

ExtentReports 报告 = new ExtentReports("../resources/reports/extentreports_v2.html", true);

因此,extentreports_v2.html 要找到截图的绝对路径,它应该从“reports”目录开始

于 2020-12-22T19:32:26.173 回答
0

我尝试了以下代码,它导致在报告中记录了屏幕截图。

File file = new File("./Screenshots/" + result.getName() + ".png");

String absolutePath = file.getAbsolutePath();
logger.fail("details", MediaEntityBuilder.createScreenCaptureFromPath(absolutePath).build());
于 2022-02-08T12:10:36.463 回答