1

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

我知道这个循环可能会以无限循环结束,我将在此处简化以进行说明。

4

2 回答 2

2

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

于 2019-02-22T15:15:30.420 回答
1

我不相信 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
于 2018-09-30T21:20:35.370 回答