ruby-on-rails - Capybara/Poltergeist - 等待 JavaScript 完成

标签 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>

调用函数
$("#btn_simple_search").click(function(){
   $("#simple_search").toggle(500);
});

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

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

最佳答案

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

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

关于ruby-on-rails - Capybara/Poltergeist - 等待 JavaScript 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41854537/

相关文章:

ruby-on-rails - 此版本的 GitLab 依赖于 gitlab-shell 2.6.3,但您运行的是未知。请更新 gitlab-shell

ruby-on-rails - Rails 4 【最佳实践】嵌套资源和浅层 : true

ruby-on-rails - Capybara:第一次测试超时 'failed to reach server, check DNS and/or server status' ,所有其他测试工作正常

ruby - capybara +RSpec : Can it be used for any web app?

ruby-on-rails - Capybara、Poltergeist 和 Reactjs - 'undefined' 不是函数

mysql - 为了让这种关系发挥作用,我必须向我的 Rails 应用程序添加什么?

ruby-on-rails - 巫术中奇怪的 attr_accessible

testing - Capybara 请求规范 DSL 和交易固定装置

ui-automation - Poltergeist-phantomjs - 切换到新的弹出窗口

cucumber - 列出 Capybara/Poltergeist 元素的子元素