【问题标题】:SitePrism how to wait for any of elementsSitePrism 如何等待任何元素
【发布时间】:2019-03-06 00:41:39
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      【解决方案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 和你的想法

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 2020-12-09
        • 2011-12-08
        相关资源
        最近更新 更多