如何实现获取标签并将场景作为参数传递的 AfterStep?

How to implement an AfterStep getting the Tag and passing the scenario as an argument?

我正在寻找一种方法来实现将场景作为参数传递的 AfterStep(@tag)。不幸的是,这不起作用,我找不到办法。

我也调查了 Cucumber Hooks documentation,但这也没有帮助。

我尝试实现的方式:

  AfterStep('@screenshot') do |scenario|
    # Add screenshot to baseline folder.
    @helper = Helper.new
    @helper.take_screenshot(scenario.name, 'screenshots/baseline')
  end

当我 运行 测试时,我得到这个错误:

undefined method `name' for #<Cucumber::Core::Test::Result::Passed:0x007f2b818e6d50> (NoMethodError)

这里的objective是用@screenshot标签对场景进行截图

正如@Sam 指出的那样,使用 After('@screenshot') do |scenario| 对我有用。

After('@screenshot') do |scenario|

  output_folder = (ENV["output_folder"] || "features/output") + "/" + ENV['TIMESTAMP'][0,10]
  scenario_folder = output_folder + '/' + 'failure screenshots' + '/'

  if scenario.respond_to? (:title)
    script_name = scenario.name
  else
    script_name = scenario.scenario_outline.title
  end

  screenshot_file = scenario_folder + script_name.gsub(/[\/\| <>\n\r]+/, "_")[0..90] + ".png"
  current_path = ''


  begin
    screenshot_file.split(/\//).map{|m| m.split(/\/)}.flatten.each {|folder|
    next if folder =~ /\.png/
    current_path += folder + "/"
    next if folder.downcase =~ /:/
    Dir.mkdir(current_path) unless File.exists?(current_path)
    }

  @browser.screenshot.save screenshot_file
  embed screenshot_file, 'image/png'

  rescue Exception => e
    p e.message
    p "Could not capture screenshot"
  end

end