You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Selenium+Java的Cucumber框架无法在报告嵌入失败截图如何解决

问题修复方案

你的代码存在3个关键问题导致截图无法展示,具体修复逻辑和代码如下:

修正后完整代码

@After
public void tearDown(Scenario scenario) throws IOException {
    if (scenario.isFailed()) {
        // 方案1:直接嵌入截图字节到报告,报告自包含无需单独存截图文件
        try {
            // 直接获取截图字节数组,不用先存本地
            byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
            // 传入正确的mime类型,嵌入报告
            scenario.embed(screenshot, "image/png", scenario.getName() + " 失败截图");
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 如果需要同时保存截图到本地目录,保留以下逻辑
        String screenshotDir = System.getProperty("user.dir") + File.separator + "target" + File.separator + "screenshots" + File.separator + scenario.getName() + File.separator;
        File dirFile = new File(screenshotDir);
        // 递归创建多级目录
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        try {
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File(screenshotDir + "screenshot.png"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键修改点说明

  • embed方法传参逻辑修正:scenario.embed()方法当指定mime类型为image/png时,需要传入截图本身的二进制字节数组,而非HTML img标签的字符串字节。你之前的写法会把HTML标签当成图片内容解析,必然报错。直接嵌入字节的方案生成的报告是自包含文件,转发给其他人时不需要附带截图文件夹即可正常查看。
  • 路径兼容性修正:删除硬编码的Windows反斜杠\\,改用File.separator适配Windows、Linux等不同操作系统的路径规则。
  • 目录创建逻辑修正:将mkdir()替换为mkdirs(),支持递归创建多级目录,避免scenario名称含特殊字符、层级结构时目录创建失败导致截图丢失。
  • mime类型修正:将embed方法的第二个参数从"png"调整为标准mime类型"image/png",适配所有版本的Cucumber报告解析规则。

可选方案:如果你确实需要引用本地存储的截图文件而非嵌入到报告中,需要将embed的mime类型改为text/html,同时将图片路径改为相对报告目录的路径:

// 报告默认生成在target/cucumber-html-reports下,所以相对路径为../screenshots/[scenario名称]/screenshot.png
String relativePath = "../screenshots/" + scenario.getName() + "/screenshot.png";
String imgHtml = "<img src=\"" + relativePath + "\" alt='失败截图' style='max-width:100%'>";
scenario.embed(imgHtml.getBytes(StandardCharsets.UTF_8), "text/html", "查看失败截图");

该方案的缺点是转发报告时需要同时转发screenshots目录,否则无法加载截图。

内容的提问来源于stack exchange,提问作者Rakesh Myana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:54:05