我在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”中填写一些文本框,我的救援异常解决方案不起作用!!!
有些帮助??
感谢!!!
答案 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