ruby-on-rails - 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到AJAX加载?

标签 ruby-on-rails ruby phantomjs capybara poltergeist

如何阻止 PhantomJS 将页面返回给 Capybara 几秒钟以允许 AJAX 完成加载?我返回的 HTML 正文是:

<!--div class='loading'>PLEASE WAIT WHILE PAGE LOADS</div-->

这告诉我 PhantomJS 在页面完成加载其 AJAX 资源之前返回了页面。有什么办法可以减缓这个速度吗?我尝试过使用 rasterize.js 解决方案,但看起来我添加到 poltergeist 的“phantomjs_options”哈希中的任何脚本都被忽略了。

最佳答案

使用等待您的 capybara 方法,断言页面上的内容仅在 AJAX 完成后才应存在于页面上。例如,如果页面应该显示“页面已加载!”仅在 AJAX 完成后,并且假设您使用的是 RSpec,请执行以下操作:

expect(page).to have_content("Page loaded!")

然后您可以安全地测试页面上依赖 AJAX 完成的其他内容。

capybara 等待指定内容出现的方法包括findfind_*方法、withinhas_content?/has_no_content?has_css?/has_no_css?has_selector?/has_no_selector?click_*fill_in选中取消选中选择选择。有些 Capybara 方法不会等待,包括 current_pathvisitexecute_scriptevaluate_script > 和节点访问器,例如 textvalueallfirst 等待,如果你给他们一些选项,让他们有特定的等待时间(:count, :minimum:maximum: Between),否则不会。这真是一个雷区。 (我主要从 this blog post 获取列表。)

还有其他等待方法(sleep(不好)、轮询数据库直到出现由 AJAX 引起的更改等),但使用等待您的 Capybara 方法是通常且推荐的方法.

关于ruby-on-rails - 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到AJAX加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108196/

相关文章:

ruby-on-rails - 如何在 form_for 中使用多个 "one-to-many"嵌套属性

ruby - 使用终端打开时,我将 ruby​​ 程序放在 mac 上的什么位置

javascript - 如何在 nginx 后面设置 Phantomjs

testing - 当我尝试通过 PhantomJS 运行测试时,这个 DalekJS 错误是什么?

ruby-on-rails - Watir-webdriver 没有抓取指定的 div,不确定为什么?

mysql - 如何在两个提交标签上提及表单中的不同操作?

ruby-on-rails - 仅当资源具有特定属性时如何过滤搜索集合?

ruby-on-rails - Rails - 如何将散列保存到数据库并在将其从数据库中拉出后将其用作散列(而不是将其拉出)

ruby-on-rails - Rails.cache.clear 某些键名?

ruby-on-rails - 在 Rails 中创建可拖动排序列表的最有效方法是什么?