如何阻止 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 等待指定内容出现的方法包括find
和find_*
方法、within
、has_content?
/has_no_content?
、has_css?
/has_no_css?
、has_selector?
/has_no_selector?
、click_*
、fill_in
、选中
、取消选中
、选择
和选择
。有些 Capybara 方法不会等待,包括 current_path
、visit
、execute_script
、evaluate_script
> 和节点访问器,例如 text
和 value
。 all
和 first
等待,如果你给他们一些选项,让他们有特定的等待时间(:count
, :minimum
、:maximum
、: Between
),否则不会。这真是一个雷区。 (我主要从 this blog post 获取列表。)
还有其他等待方法(sleep
(不好)、轮询数据库直到出现由 AJAX 引起的更改等),但使用等待您的 Capybara 方法是通常且推荐的方法.
关于ruby-on-rails - 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到AJAX加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108196/