水豚/黄瓜/红宝石问题:只在出现时按下元素,然后继续,没有错误



我真的是Capybara世界的新手,我在编写一个测试时遇到了很多问题,这个测试在有时才会出现的屏幕上进行一些操作。

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

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

步骤:

When(/^check my process with several screens$/) do
  page=MyPage.new
  page.check_and_click_screen1_if_appears  
  page.do_my_operations_in_screen2 
end

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

如果2秒钟后出现"idOfOneElement",点击它,继续执行"check_screen2_elements",如果没有出现,则测试中没有显示任何错误,并通过执行"do_my_operations_in_screen2"。

效果很好,但我相信水豚可以更有效地做到这一点!!

如果我需要改进我的测试,并且想在可选的"screen1"中填写一些文本框,我的救援异常解决方案不起作用!!!

一些帮助??

谢谢!!!

与其使用find或expects,不如使用Capybaras has_xxx?还有_no_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

最新更新