【问题标题】:Adding screenshot to TestNG将屏幕截图添加到 TestNG
【发布时间】:2014-11-24 08:11:47
【问题描述】:

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

我正在使用它来添加 img 元素;

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

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

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

更新: 这是来自 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>

【问题讨论】:

    标签: html selenium testng


    【解决方案1】:

    要将屏幕截图嵌入到 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 中,而不是在主索引页面中,并带有失败的堆栈跟踪,这有点令人讨厌。但至少图像和链接是有效的。

    我自己编辑以添加完整的解决方案,将属性“org.uncommons.reportng.escape-output”设置为 false,我们传递的是 html 代码而不是文本。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它实际上是由于报告中的 html 转义而发生的。因此,如果记录的消息中有 html 代码,则可能会被转义。如果报告您调用 index.html,它可以通过“Reporter.setEscapeHtml”方法处理;但该标志不会影响 emailable-report 并且消息中的 html 将被转义。
      【解决方案3】:

      如果您想将图像保存为文件(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);
      

      查看输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多