SitePrism如何等待任何元素

问题描述 投票:0回答:2

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

ruby selenium capybara coded-ui-tests site-prism
2个回答
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

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和你的想法

© www.soinside.com 2019 - 2024. All rights reserved.