我正在使用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
我知道这个循环可能会变成无限循环,为简化起见,这里将其简化。
答案 0 :(得分:0)
我不认为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
答案 1 :(得分:0)
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与您的想法