使用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
相关产品推荐
相关产品推荐

