【问题标题】:Capybara/Poltergeist - Wait for JavaScript completionsCapybara/Poltergeist - 等待 JavaScript 完成
【发布时间】:2017-01-25 14:49:13
【问题描述】:

通过设计登录后,我单击带有附加 javascript 的按钮,这使得一些 HTML 可见。

<button id="btn_simple_search" 
        class="btn btn-primary btn-md well_button" 
        data-toggle="button"
>
   Search
</button>

调用函数

$("#btn_simple_search").click(function(){
   $("#simple_search").toggle(500);
});

我希望 capybara 测试等到此功能完成(我不知道 - 像一些回调或其他东西),而不是在单击其他按钮或从新显示的 HTML 块中选择一些选项之前制作sleep 0.6。我使用 Minitest 作为测试框架。怎么做?

上面的javascript是直接嵌入页面的。

【问题讨论】:

    标签: ruby-on-rails capybara poltergeist


    【解决方案1】:

    Capybaras 查找器(all/first 除外)、匹配器和会话操作默认为专门用于处理您正在谈论的问题的等待/重试行为。他们将(默认情况下)等待直到Capybara.default_max_wait_time 秒,以便所需的元素出现在页面上。这意味着当您执行一个需要一些时间的操作,并且您想等待它完成时,您需要指示 Capybara 在页面上查找更改以指示完成的内容。当单击使事物可见的按钮时,它可能正在寻找出现的文本内容,或者它可能只是告诉它单击变得可见的按钮,因为找到该按钮将等待一段时间直到它变得可见。

    其中一个皱纹是在页面上以动画形式存在的项目。这里的问题是这些项目变得可见但仍在移动。这可能会导致某些驱动程序(尤其是由于无法真正解决的架构问题而导致的 Poltergeist)单击页面上的错误位置。最好的解决方案是在测试模式下禁用动画,这也将加快您的测试,但具体如何执行取决于您使用的生成动画的库。

    【讨论】:

      【解决方案2】:

      您可以使用 capybara 的匹配器 have_content 等待内容出现在页面上:

      expect(page).to have_content("Text from your hidden block here")
      # click other button
      

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 2014-05-27
        • 1970-01-01
        相关资源
        最近更新 更多