Вопрос старый, но, надеюсь, это будет полезно. То, что я делаю, кажется «неправильным», но это работает. На ваших веб-шагах, если вы хотите продолжать, вы должны ловить исключения. Я делаю это в первую очередь, чтобы добавить полезные сообщения об ошибках. Я проверяю таблицу, полную значений, которые определены в Cucumber, с таблицей, имеющей несколько строк, таких как:
Then my result should be:
| Row Identifier | Column Identifier | Subcolum Identifier | $1,247.50 |
, где идентификаторы имеют смысл в домене приложения, и назовите конкретную ячейку в таблице результатов удобным для человека способом. У меня есть помощники, которые преобразуют человеческие идентификаторы в идентификаторы DOM, которые используются, чтобы сначала проверить, существует ли искомая строка, а затем найти конкретное значение в ячейке в этой строке. Сообщение об ошибке по умолчанию для отсутствующей строки достаточно ясно для меня (ожидалось найти css "tr # my_specific_dom_id", но совпадений не было). Но сообщение об ошибке для проверки определенного текста в ячейке совершенно бесполезно. Поэтому я сделал шаг, который перехватывает исключение и использует информацию о шагах Cucumber и поиск некоторых элементов, чтобы получить хорошее сообщение об ошибке:
Then /^my application domain results should be:$/ do |table|
table.rows.each do |row|
row_id = dom_id_for(row[0])
cell_id = dom_id_for(row[0], row[1], row[2])
page.should have_css "tr##{row_id}"
begin
page.should have_xpath("//td[@id='#{cell_id}'][text()=\"#{row[3].strip.lstrip}\"]")
rescue Capybara::ExpectationNotMet => exception
# find returns a Capybara::Element, native returns a Selenium::WebDriver::Element
contents = find(:xpath, "//td[@id='#{cell_id}']").native.text
puts "Expected #{ row[3] } for #{ row[0,2].join(' ') } but found #{ contents } instead."
@step_failures_were_rescued = true
end
end
end
Затем я определяю хук в файле features / support / hooks.rb, например:
After do |scenario|
unless scenario.failed?
raise Capybara::ExpectationNotMet if @step_failures_were_rescued
end
end
Это делает общий сценарий неудачным, но маскирует отказ шага от Cucumber, поэтому все результаты шага отображаются зелёным, включая неправильные. Вы должны увидеть сценарий сбоя, а затем посмотреть на сообщения, чтобы увидеть, что не удалось. Это кажется "плохим" для меня, но это работает. В моем случае удобнее получить ожидаемые и найденные значения, перечисленные в дружественном к домену контексте для всей проверяемой таблицы, а не получать сообщение типа «Я искал« $ 123,45 », но не смог найти» Это." Возможно, есть лучший способ сделать это, используя метод «внутри» Капибары. Хотя это лучшее, что я придумал.