Capybara / Cucumber / Ruby问题:仅在出现时按元素并继续,没有错误

时间:2015-12-02 16:51:12

标签: ruby selenium cucumber capybara

我在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

如果“idOfOneElement”在2秒内出现,请单击它并继续执行“check_screen2_elements”,如果没有出现,则测试中不显示任何错误并传递执行“do_my_operations_in_screen2”。

工作正常,但我确信水豚可以做得更有效!!

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

有些帮助??

感谢!!!

2 个答案:

答案 0 :(得分:2)

而不是使用find或期望你应该使用Capybaras has_xxx?和has_no_xxx?方法(has_css?,has_button?,has_select?,...)返回布尔结果而不是提高期望值。在你的情况下,它将是

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

答案 1 :(得分:0)

谢谢!

那非常有用!!!! 最终代码:

 if Capybara::has_css?('#idOfOneElement', wait: 1)
       Capybara::fill_in('idOfOneElement', :with => 'mytext') 
       Capybara::find_by_id("idOfOneButton").click
 end