Ruby Don';如果页面上的某个元素不可用,请不要运行cucumber功能,但退出时不会失败

Ruby Don';如果页面上的某个元素不可用,请不要运行cucumber功能,但退出时不会失败,ruby,cucumber,capybara,Ruby,Cucumber,Capybara,在开始运行某个元素的功能文件之前,我希望检查该页面中的某个元素(该元素定期出现在事件中,因此我只希望在该功能存在时运行该功能) 我想使用的方法是一个taggebeforehook,以查看元素是否存在,以及它是否不仅仅是不运行该特性,而是在不“失败”的情况下退出该步骤,并显示一条消息。我尝试了下面的变体,但是 1.如果我没有rescue子句,当元素不存在时,它显然会失败 2.如果我有rescue子句,它会处理它,并转移到功能上,这些功能将在事件不可用时失败 如果调用rescue子句时未出现“fai

在开始运行某个元素的功能文件之前,我希望检查该页面中的某个元素(该元素定期出现在事件中,因此我只希望在该功能存在时运行该功能)

我想使用的方法是一个taggebeforehook,以查看元素是否存在,以及它是否不仅仅是不运行该特性,而是在不“失败”的情况下退出该步骤,并显示一条消息。我尝试了下面的变体,但是 1.如果我没有rescue子句,当元素不存在时,它显然会失败 2.如果我有rescue子句,它会处理它,并转移到功能上,这些功能将在事件不可用时失败

如果调用rescue子句时未出现“fail”,是否有方法停止运行功能文件

('@event')之前的
do
开始
查找('.event')。是否可见?
拯救水豚::元素未找到
显示“事件未启动”
结束

结束

如果你想根据存在做出决定,就不应该使用
find
。相反,您应该使用Capybara提供的谓词方法(has_selector?、has_css?、has_xpath?等等),这样您就不必拯救异常

另一件要知道的事情是Cucumber
skip\u this\u sceanrio
方法,这意味着您应该以类似

Before('@event') do
  # visit '/some_page'   # May not be needed if you have another `Before` already visiting the needed page
  skip_this_scenario('Skipping due to missing event') unless page.has_css?('.event')
end

谢谢你,托马斯,我的行为完全符合我的要求