Ruby on rails 拍摄一个场景失败屏幕截图

Ruby on rails 拍摄一个场景失败屏幕截图,ruby-on-rails,ruby,selenium,automated-tests,bdd,Ruby On Rails,Ruby,Selenium,Automated Tests,Bdd,在我使用Ruby/Capybara/Cucumber/Selenium进行的自动化测试中,当测试的某个步骤失败时,有必要执行以下步骤: 获取浏览器屏幕截图 Stacktrace取出的图像 执行下一个场景 知道如何帮我解决这个问题吗 今天,系统将截图作为场景成功的证据,但现在我希望在执行下一步或场景后,在不干扰所有测试执行的情况下截图失败 当前用作截图钩子的示例代码: 在do |场景之后| screenshot=“log/screenshots/#{scenario.name}.png” pa

在我使用Ruby/Capybara/Cucumber/Selenium进行的自动化测试中,当测试的某个步骤失败时,有必要执行以下步骤:

  • 获取浏览器屏幕截图
  • Stacktrace取出的图像
  • 执行下一个场景
知道如何帮我解决这个问题吗

今天,系统将截图作为场景成功的证据,但现在我希望在执行下一步或场景后,在不干扰所有测试执行的情况下截图失败

当前用作截图钩子的示例代码:

在do |场景之后|
screenshot=“log/screenshots/#{scenario.name}.png”
page.save_屏幕截图(屏幕截图)
嵌入(屏幕截图、“图像/png”、“屏幕证据”)
结束

这将在故障点为您创建一个屏幕截图

  config.after(:each) do |example|
    if example.exception
      screenshot = "log / screenshots / # {scenario.name} .png"
page.save_屏幕截图(屏幕截图) 嵌入(屏幕截图、“图像/png”、“屏幕证据”) 结束 结束

您可能希望将此限制为功能测试,并且可以选择尝试将现有屏幕截图代码重构为相同的函数。

尝试这种方法

After do |scenario|
if scenario.failed?
    timestamp = "#{Time.zone.now.strftime('%Y-%m-%d-%H:%M:%S')}"
    screenshot_name = "screenshot-#{scenario.name}-#{timestamp}.png"
    screenshot_path = "#{Rails.root.join(provide path to save screenshots)}/#{screenshot_name}"
    Capybara.page.save_screenshot(screenshot_path, full: true)