TestNG Report插件中截图无法显示,如何调整路径解决该问题?
问题根因
- 路径引用规则错误:你在
<img>标签的src属性中传入了本地磁盘绝对路径,浏览器出于安全沙箱限制,默认禁止HTML页面加载本地磁盘的绝对路径文件,就算路径完全正确也无法正常展示。 - 路径格式不统一:生成的路径混用了Windows系统的反斜杠
\和Unix标准的正斜杠/,会导致部分浏览器识别路径失败。 - 你的截图存放在TestNG报告根目录
test-output的子目录ScreenShots下,报告本身也生成在test-output目录下,完全可以用相对路径引用,不需要拼接项目根目录的绝对路径。
修复后的代码
public void ScreenShot() { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH_mm_ss"); LocalDateTime now = LocalDateTime.now(); String destDir = System.getProperty("user.dir") + "/" + "test-output/ScreenShots"; String FileName = "SoftAssertScreenshot_" + dtf.format(now) + ".png"; String DestFile = destDir + "/" + FileName; // 新增:相对于TestNG报告根目录的相对路径 String reportRelativePath = "./ScreenShots/" + FileName; Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver); BufferedImage image = screenshot.getImage(); try { ImageIO.write(image, "PNG", new File(DestFile)); System.out.println("test"); } catch (IOException e) { e.printStackTrace(); } Reporter.log("</br><font color='#73a9d0'>***************Screen Of the error****************</font>"); // 修改:此处使用相对路径而非绝对路径 Reporter.log("</br><img id='ErrorResult' src='" + reportRelativePath + "' style='width:600px'/>"); }
补充排查点
如果修改后还是无法展示,按以下步骤排查:
- 运行测试后进入项目的
test-output/ScreenShots目录,确认对应文件名的截图已经成功生成 - 打开TestNG报告后按F12打开开发者控制台,查看是否有资源加载报错,确认报错的路径和你截图实际存放的相对路径是否匹配
- 可以将日期格式化中的空格替换为下划线,避免空格导致的路径解析异常:将
ofPattern("yyyy-MM-dd HH_mm_ss")改为ofPattern("yyyy-MM-dd_HH_mm_ss")
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

