我已经设置了在场景失败时拍摄的屏幕截图,但是我的 html 报告在所有失败的场景中都显示了相同的屏幕截图。任何人都可以帮助并让我知道如何为每个失败的场景拍摄独特的屏幕截图。
这是我的 env.rb 中的代码:
After do |scenario|
if scenario.failed?
@browser.driver.save_screenshot("screenshot.png")
embed("screenshot.png", "image/png")
end
我已经设置了在场景失败时拍摄的屏幕截图,但是我的 html 报告在所有失败的场景中都显示了相同的屏幕截图。任何人都可以帮助并让我知道如何为每个失败的场景拍摄独特的屏幕截图。
这是我的 env.rb 中的代码:
After do |scenario|
if scenario.failed?
@browser.driver.save_screenshot("screenshot.png")
embed("screenshot.png", "image/png")
end
您每次都将屏幕截图保存到同一个文件中(即每次都覆盖之前的屏幕截图)。该报告还将所有图像链接到同一个地方。这就是为什么你在任何地方都能得到相同的图像。
您需要为屏幕截图提供一个唯一的名称。
例如,您可以为图像添加时间戳(带有日期和时间):
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
贾斯汀有答案,但是虽然时间戳很好,但在查看文件时很难知道哪个文件适用于什么场景。当我在创建和调试时运行测试时,我什至不看 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
在这篇“二四一”博客文章中描述了一种更强大的方法,处理场景大纲和附加时间戳 ,到目前为止,我不需要走那么远,但我可能会从中提取一些东西来处理场景大纲。
对于那些使用 RSpec 的人,在watir-rspec项目中有一个非常好的 HtmlFormatter 实现