Capybara/Cucumber/Ruby问题:仅当出现时按element,并在没有错误的情况下继续

Capybara/Cucumber/Ruby问题:仅当出现时按element,并在没有错误的情况下继续,ruby,selenium,cucumber,capybara,Ruby,Selenium,Cucumber,Capybara,我是水豚世界的新手,我在编写一个测试时遇到了很多问题,这个测试在一个屏幕上执行一些操作,而这个屏幕只是偶尔出现 我想点击这个屏幕的一个元素,如果出现,但如果没有出现,我需要继续点击并在下一个屏幕中完成表单 我现在的解决方案很管用,但它真的很难看: 步骤: MyPage实现: def check_and_click_screen1_if_appears Capybara::find_by_id("idOfOneElement", :wait => 2).click r

我是水豚世界的新手,我在编写一个测试时遇到了很多问题,这个测试在一个屏幕上执行一些操作,而这个屏幕只是偶尔出现

我想点击这个屏幕的一个元素,如果出现,但如果没有出现,我需要继续点击并在下一个屏幕中完成表单

我现在的解决方案很管用,但它真的很难看:

步骤:

MyPage实现:

def check_and_click_screen1_if_appears  
  Capybara::find_by_id("idOfOneElement", :wait => 2).click      
  rescue Capybara::ElementNotFound
end

def do_my_operations_in_screen2 
  Capybara::find_by_id("idOfOtherElement").click        
  Capybara::fill_in('txtSearch', :with => 'mytext')
end
如果“idOfOneElement”在2秒内出现,单击它并继续执行“check_screen2_elements”,如果没有出现,则测试中不会显示错误,并通过执行“do_my_operations_in_screen2”

工作很好,但我相信水豚可以做得更有效

如果我需要改进我的测试,并且想在可选的“screen1”中填写一些文本框,我的解决方案(带有rescue异常)不起作用

一些帮助


谢谢

而不是使用find或expected,您应该使用Capybaras\u xxx?没有xxx吗?方法(has_css?、has_button?、has_select?、…)返回布尔结果,而不是提高期望值。在你的情况下是这样的

if page.has_css?('#idOfOneElement', wait: 2) 
  page.find_by_id("idOfOneElement").click
end
谢谢

这是非常有用的!!!! 最终代码:

 if Capybara::has_css?('#idOfOneElement', wait: 1)
       Capybara::fill_in('idOfOneElement', :with => 'mytext') 
       Capybara::find_by_id("idOfOneButton").click
 end
您是否尝试过使用
expect(第页)。使用选择器(“某物”)
 if Capybara::has_css?('#idOfOneElement', wait: 1)
       Capybara::fill_in('idOfOneElement', :with => 'mytext') 
       Capybara::find_by_id("idOfOneButton").click
 end