截取失败场景 Cucumber 的屏幕截图

Taking a screenshot on failed scenario Cucumber

我正在尝试截取失败场景的屏幕截图。我的 hooks.rb 文件中有这个

After do |scenario|
    if scenario.failed?
        filename = "error-#{@current_page.class}-#{Time.now}.png" 
        @current_page.save_screenshot(filename)
        embed(filename, 'image/png')
    end
  @browser.close
end

但我在尝试截取屏幕截图时遇到此错误

undefined method `save_screenshot' for nil:NilClass (NoMethodError)

在使用场景大纲的情况下可能会出现这种情况,请在截图之前尝试检查场景是否为场景大纲:

After do |scenario|
   if scenario.respond_to?('scenario_outline') then
        scenario = scenario.scenario_outline
   end
   if scenario.failed?
       filename = "error-#{@current_page.class}-#{Time.now}.png" 
       @current_page.save_screenshot(filename)
       embed(filename, 'image/png')
   end
@browser.close
end

这会起作用:

@browser.driver.save_screenshot(filename)

场景失败时会截图浏览器实例所在的页面

您可能会遇到另一个错误,因为@current_page 也用于设置您的文件名。您可以更改定义文件名的方式,或者通过更多信息我们可以解决@current_page 问题。