C#项目Klov Reporter无法保存显示截图问题求助(附异常)
解决C#中同时使用HtmlReporter与KlovReporter时截图无法在Klov显示的问题
我之前在项目里同时用这两个Reporter时也碰到过一模一样的问题,结合排查经验,给你几个可行的解决方向:
1. 核心问题:本地路径不符合Klov的URI规范
HtmlReporter可以直接识别本地文件路径(比如C:\tests\screenshots\test.png),但KlovReporter会尝试把这个路径当作URI解析,Windows本地路径的格式(带盘符的反斜杠)不符合URI规范,就会抛出UriFormatException。
解决方案:给KlovReporter传截图字节流而非本地路径
不要直接把本地截图路径传给Klov,而是将截图转为字节流上传,这样就能绕开URI解析的问题。示例代码如下:
// 捕获Selenium截图(如果用其他工具捕获,逻辑类似) var screenshot = ((ITakesScreenshot)driver).GetScreenshot(); var screenshotBytes = screenshot.AsByteArray; // 给HtmlReporter用本地路径(正常工作) string localScreenshotPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "screenshots", $"{TestContext.CurrentContext.Test.Name}.png"); Directory.CreateDirectory(Path.GetDirectoryName(localScreenshotPath)); screenshot.SaveAsFile(localScreenshotPath, ScreenshotImageFormat.Png); _htmlReporter.AddScreenCaptureFromPath(localScreenshotPath); // 给KlovReporter用字节流,避免URI解析错误 _klovReporter.AddScreenCaptureFromByteArray(screenshotBytes, $"{TestContext.CurrentContext.Test.Name}.png");
2. 检查KlovReporter的初始化配置
如果字节流方式还是不行,要确认Klov的连接配置是否正确:
- 确保MongoDB的连接URI格式正确(比如
mongodb://localhost:27017,不要带多余的反斜杠或空格) - 确认Klov服务器(或MongoDB服务)处于运行状态,能被测试机器访问
- 检查Reporter的项目名、报告名配置是否没有特殊字符
示例初始化代码:
var klovReporter = new KlovReporter(); // 正确的MongoDB连接URI klovReporter.InitMongoDbConnection("mongodb://localhost:27017"); klovReporter.ProjectName = "MyTestProject"; klovReporter.ReportName = $"TestRun_{DateTime.Now:yyyyMMddHHmmss}"; // 绑定日志(可选) klovReporter.SetLogger(log4net.LogManager.GetLogger(typeof(MyTestClass)));
3. 排查版本兼容性问题
ExtentReports和KlovReporter的版本不匹配也可能导致截图处理逻辑冲突:
- 确保NuGet包中
ExtentReports和ExtentKlovReporter的版本一致(比如都用4.1.0或最新稳定版) - 避免混用不同大版本的包(比如ExtentReports 5.x和KlovReporter 4.x)
最后验证
修改代码后,运行测试,检查Klov报告是否能正常显示截图,同时确认UriFormatException是否消失。如果还是有问题,可以打开Klov的日志(或MongoDB的日志),看看是否有更详细的错误信息辅助排查。
内容的提问来源于stack exchange,提问作者Appu Mistri
相关产品推荐
相关产品推荐

