Watir-webdriver:获取所有失败场景的相同屏幕截图图像

时间:2013-04-15 10:37:55

标签: ruby cucumber screenshot watir-webdriver

我设置了场景失败时要截取的屏幕截图,但我的html报告显示了所有失败场景下的相同屏幕截图。任何人都可以帮助我,让我知道如何为每个失败的场景拍摄独特的截图。

这是我的env.rb中的代码:

After do |scenario|
  if scenario.failed?
     @browser.driver.save_screenshot("screenshot.png")
     embed("screenshot.png", "image/png")
  end   

3 个答案:

答案 0 :(得分:4)

每次都将屏幕截图保存到同一个文件中(即每次都覆盖以前的屏幕截图)。该报告还将所有图像链接到同一个地方。这就是为什么你到处都能得到相同的图像。

您需要为屏幕截图提供唯一的名称。

例如,您可以为图像添加时间戳(包括日期和时间):

After do |scenario|
  if scenario.failed?
     screenshot_file = "screenshot-#{Time.now.strftime('%Y%m%d-%H%M%S')}.png"
     @browser.driver.save_screenshot(screenshot_file)
     embed(screenshot_file, "image/png")
  end   
end

答案 1 :(得分:1)

Justin有答案,但是虽然时间戳很好,但是在查看文件时会更难以知道哪个是什么情况。当我在创建和调试时运行测试时,我经常不查看html报告,我只看生成的屏幕截图,因此在这种情况下,拥有更多逻辑名称是非常有用的。

因此我使用的代码如下所示,并使用方案名称

进行嵌入
After do |scenario|
  if scenario.failed?
    screenshot = "./FAILED_#{scenario.name.gsub(' ','_').gsub(/[^0-9A-Za-z_]/, '')}.png"
    @browser.driver.save_screenshot(screenshot)
    encoded_img = @browser.driver.screenshot_as(:base64)
    embed("data:image/png;base64,#{encoded_img}",'image/png')
  end
end

this 'Two Four One' blog posting中描述了一种更强大的方法,处理场景大纲和附加时间戳,到目前为止我还没有必要走得那么远,但我可以从中提取一些内容来处理场景大纲。

答案 2 :(得分:0)

对于那些使用RSpec的人来说,watir-rspec项目中有一个非常好的HtmlFormatter实现