我正在使用Capybara和SitePrism堆栈测试UI流程。不幸的是,我的UI流程并不完全确定,有时会在流程中弹出警告消息。因此,我需要在测试中有一个条件流。
要等待单个元素,SitePrism会提供
@page.wait_for_<element name>
在我的情况下,有两个元素可以出现,:button_submit
或:warning_popup
。我需要实现的是:
element_name = @page.wait_for_any_of(:button_submit, :warning_popup)
除了运行这样的循环之外,还有一些更优雅的方法吗?
element_name = nil
while (element_name.nil?) do
element_name = :button_submit if app.page.has_button_submit?
element_name = :warning_popup if app.page.has_warning_popup?
sleep 0.1
end
我知道这个循环可能会以无限循环结束,我会将它简化为ilustration。
我不相信site-prism为等待多个元素之一提供了任何干净的方法,但是一个解决方法是将element
添加到页面,通过使用CSS逗号找到任一元素
element :button_submit_or_warning_popup, "#id_of_button, #id_of_warning_popup"
然后你就可以做到
@page.wait_for_button_submit_or_warning_popup
SitePrism确实有一个可以从顶级命名空间调用的服务器类。
所以你可以使用类似的东西
SitePrism.Waiter.wait_until_true { has_button_submit? || has_warning_popup? }
此外,随着SitePrism v3的发布,您不再需要调用自动完成的wait_for
。
如果您觉得这是想要添加/使用site_prism的东西,那么等待的能力肯定是未充分利用的。
关于GH的消息在这里:https://github.com/natritmeyer/site_prism/issues和你的想法