我真的是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