Capybara/Poltergeist - 等待 JavaScript 完成

T4n*_*10r 5 ruby-on-rails capybara poltergeist

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

<button id="btn_simple_search" 
        class="btn btn-primary btn-md well_button" 
        data-toggle="button"
>
   Search
</button>
Run Code Online (Sandbox Code Playgroud)

调用函数

$("#btn_simple_search").click(function(){
   $("#simple_search").toggle(500);
});
Run Code Online (Sandbox Code Playgroud)

我希望水豚测试等到这个功能完成(我不知道 - 比如一些回调或其他东西)而不是sleep 0.6在我点击其他按钮或从新显示的 HTML 块中选择一些选项之前进行。我使用 Minitest 作为测试框架。怎么做?

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

Tho*_*ole 4

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

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