SitePrism如何等待任何元素

时间:2018-09-30 20:51:34

标签: ruby selenium capybara coded-ui-tests site-prism

我正在使用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

我知道这个循环可能会变成无限循环,为简化起见,这里将其简化。

2 个答案:

答案 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与您的想法