仅在 Jenkins 中 运行 时,屏幕截图未附加到扩展报告

Screenshot is not attached to the extend report when ran in Jenkins only

当使用 BrowserStack 的 remote-webdriver 实例时,只有在 Jenkins 中 运行 时,失败的屏幕截图不会附加到报告中。请帮忙。文件夹结构为 ExtentReport\Screenshots

我试过了Extent Report: Not able to see the screenshots on other machine 但这并不能解决问题。

public void onTestFailure(ITestResult result) {
        testMap.get().fail(result.getThrowable());
        //add screenshot for failed test.
        WebDriver driver= WebDriverFactory.getDriver();
        //experimental to get screenshot
        driver = new Augmenter().augment(driver);
        String dateName = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
        TakesScreenshot ts = (TakesScreenshot) driver;
        File source = ts.getScreenshotAs(OutputType.FILE);
        String destination = System.getProperty("user.dir") + "/ExtentReport/" + "/Screenshots/" + result.getMethod().getMethodName() + dateName + ".png";
        File finalDestination = new File(destination);
        try {
            FileUtils.copyFile(source, finalDestination);
        } catch (IOException e) {
            e.printStackTrace();
        }
        testMap.get().addScreenCaptureFromPath(destination,result.getMethod().getMethodName());

    }

不同的操作系统使用不同的字符作为文件和路径分隔符。当我们的应用程序必须 运行 在多个平台上时,我们需要正确处理这些。
要处理此问题 Java 提供 File.separator.
所以,而不是

String destination = System.getProperty("user.dir") + "/ExtentReport/" + "/Screenshots/" + result.getMethod().getMethodName() + dateName + ".png";

试试这个:

String destination = System.getProperty("user.dir") + File.separator + "ExtentReport" +  File.separator +"Screenshots" + File.separator + result.getMethod().getMethodName() + dateName + ".png";

要使用它,您必须添加此导入

import java.io.File;

根据拉维信条的回答,

HTML : Unable to view the base64 image in html report

String base64Screenshot ="data:image/png;base64," + ((TakesScreenshot) Objects.requireNonNull(driver)).getScreenshotAs(OutputType.BASE64);
        testMap.get().addScreenCaptureFromBase64String(base64Screenshot).getModel().getMedia().get(0);

我设法使用上面的方法解决了这个问题 code.Once 单击 base64 img,它会打开实际的屏幕截图。