将截图添加到TestNG

时间:2014-11-24 08:11:48

标签: html selenium testng

我正在使用testNG和Selenium运行一些测试。测试数据来自CSV文件。在每个步骤中,都可以截取页面的屏幕截图。我正在尝试将此屏幕截图添加到testNG HTML报告(可通过电子邮件发送的报告)。

我用它来添加img元素;

Reporter.log("<img src=\"file:///" + pathToScreen + "\" alt=\"\"/><br />");

现在这部分工作,因为它实际上是将它添加到报告中,如下面的屏幕截图所示。但HTML代码似乎不起作用。

enter image description here

图像文件的路径是错误的吗?我想是的,但我不确定如何解决这个问题。

更新: 这是来自HTML报告的源代码。显然它甚至没有将其解析为HTML ???

<div class="messages">&lt;img src=&quot;file://C:\Users\myUSername\Desktop/screenshots/step 1_enter username_baseline.png&quot; alt=&quot;&quot;/&gt;&lt;/img&gt;</div>

4 个答案:

答案 0 :(得分:2)

要将截图嵌入index.html报告中,我使用相对路径:

System.setProperty("org.uncommons.reportng.escape-output", "false");

Reporter.log(
"<a title= \"title\" href=\"../path/from/target/" + fileName + "\">" +
    "<img width=\"418\" height=\"240\" alt=\"alternativeName\" title=\"title\" src=\"../surefire-reports/html/screenShots/"+fileName+"\">
</a>");

在这种情况下,屏幕截图显示在OutputReport中,而不是在主索引页面中,其中包含失败的堆栈跟踪,这有点令人讨厌。但至少图像和链接正在发挥作用。

我编辑自己添加完整的解决方案,设置属性&#34; org.uncommons.reportng.escape-output&#34;因为我们传递的是html代码而不是文本。

我建议使用ReportNG,其中屏幕截图正确附加到测试失败并显示完整的堆栈跟踪:

enter image description here

答案 1 :(得分:1)

好吧,我正在查看错误的文件。我正在查看emailable-report.html,而reporter.log将所有内容发送到index.html。在index.html文件中,使用我的第一篇文章中的代码,一切正常。

答案 2 :(得分:0)

我注意到三重/开始时你没有关闭<img>

请尝试以下代码:

String pathToScreen = "C:\\User\\User123\\file.png";
String path = ("<img src=\"file://" + pathToScreen + "\" alt=\"\"/></img>");
Reporter.log(path);

答案 3 :(得分:0)

如果要将图像保存为文件(jpg / png等。)和base64格式,请尝试使用以下完整代码。

对于可通过电子邮件发送的报告,建议使用Base64格式。

File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

//Saving image to current working directory , you can ignore this step if dont want to save file 
FileUtils.copyFile(src, new File("./demotest.png"));
String fileName = System.getProperty("user.dir") + "/demotest.png";
Reporter.setEscapeHtml(false); //This need to be set as false

byte[] fileContent = FileUtils.readFileToByteArray(new File(fileName));
String encodedString = Base64.getEncoder().encodeToString(fileContent);

String path = "<img src=\"data:image/png;base64, " + encodedString + "\" width=\"300\" height=\"350\" />";

Reporter.log(path);

或者如果您只想使用Base64文件格式,那么..

String src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BASE64);

String path = "<img src=\"data:image/png;base64, " + src + "\" width=\"300\" height=\"350\" />";

Reporter.log(path);

查看输出: