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

使用Selenium+JavaMail API发送Extent报告时Base64图片缩放显示异常求助

解决Extent报告中Base64截图放大后显示编码的问题

嘿,我帮你搞定这个问题啦!你遇到的是ExtentReports处理Base64截图的常见坑,根源在于你用的addScreenCapture方法对参数的要求和你传的内容不匹配,导致放大时没有正确解析成图片,反而显示了原始编码文本。下面分版本给你对应的解决方案:

如果你用的是ExtentReports 2.x版本

这个版本的addScreenCapture只认本地截图文件的路径,不认Base64的data URI。所以得先把Base64编码转成图片存到本地,再把路径传进去:

// 1. 获取Base64格式的截图
String scnShot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BASE64);

// 2. 将Base64解码并保存为本地图片
byte[] imageBytes = Base64.getDecoder().decode(scnShot);
// 定义截图保存路径,用时间戳避免重名
File screenshotFile = new File(System.getProperty("user.dir") + "/screenshots/" + System.currentTimeMillis() + ".png");
// 自动创建不存在的目录
screenshotFile.getParentFile().mkdirs();
// 写入图片文件
Files.write(screenshotFile.toPath(), imageBytes);

// 3. 把本地文件路径传给报告方法
test.log(LogStatus.INFO, test.addScreenCapture(screenshotFile.getAbsolutePath()));

记得导入java.util.Base64、java.nio.file.Files和java.io.File这些类哦。

如果你用的是ExtentReports 3.x及以上版本

新版本贴心地提供了专门处理Base64截图的方法,不用存文件直接传编码就行,省了好多步骤:

String scnShot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BASE64);
// 直接用addScreenCaptureFromBase64String方法,不需要拼接data:image前缀
test.log(LogStatus.INFO, test.addScreenCaptureFromBase64String(scnShot));

这个方法会自动帮你生成正确的图片标签,不管缩略图还是放大图都能正常显示啦。

小提示:怎么确认自己的Extent版本?

看你的依赖配置就行:

  • 3.x及以上的Maven依赖是:
<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports</artifactId>
    <version>3.1.5</version> <!-- 可以换成更高的稳定版本 -->
</dependency>
  • 2.x的Maven依赖是:
<dependency>
    <groupId>com.relevantcodes</groupId>
    <artifactId>extentreports</artifactId>
    <version>2.41.2</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:54:58