如何让 poltergeist/PhantomJS 延迟将页面返回给 Capybara,直到 AJAX 加载完毕?
How to get poltergeist/PhantomJS to delay returning the page to Capybara until AJAX is loaded?
如何防止 PhantomJS 将页面返回给 Capybara 几秒钟以允许 AJAX 完成加载?我要返回的 HTML 正文是:
<!--div class='loading'>PLEASE WAIT WHILE PAGE LOADS</div-->
这告诉我 PhantomJS 在页面完成加载其 AJAX 资产之前返回了页面。有什么办法可以减慢速度吗?我试过使用 rasterize.js 解决方案,但看起来好像我添加到 poltergeist 的 "phantomjs_options" 哈希中的任何脚本都被忽略了。
使用等待您的 Capybara 方法,断言页面上的内容仅在 AJAX 完成后才应存在于页面上。例如,如果页面应该仅在 AJAX 完成后显示 "Page loaded!",并且假设您正在使用 RSpec,请执行以下操作:
expect(page).to have_content("Page loaded!")
然后您可以安全地测试页面上依赖 AJAX 已完成的其他内容。
水豚等待指定内容出现的方法有find
和find_*
方法,within
,has_content?
/has_no_content?
,has_css?
/has_no_css?
、has_selector?
/has_no_selector?
、click_*
、fill_in
、check
、uncheck
、select
和choose
。一些 Capybara 方法 不 等待,包括 current_path
、visit
、execute_script
、evaluate_script
和节点访问器,如 text
和 value
。 all
和 first
等待,如果你给他们一些选项,让他们有特定的等待(:count
、:minimum
、:maximum
、:between
) ,否则他们不会。这是一个雷区。 (我的列表主要来自 this blog post。)
还有其他方法可以等待(sleep
(不好),轮询数据库直到出现由 AJAX 引起的更改,等等)但是通常使用等待你的 Capybara 方法和推荐方式。
不确定您实际上在等待什么 css 明智地在加载的页面上,但我会这样做的方式是:
Capybara.using_wait_time(x) { page.find('css_here') }
其中 x
是您希望水豚在找不到 css 时出错前允许的秒数。
expect(page).to have_content "Page loaded!", wait: x
如何防止 PhantomJS 将页面返回给 Capybara 几秒钟以允许 AJAX 完成加载?我要返回的 HTML 正文是:
<!--div class='loading'>PLEASE WAIT WHILE PAGE LOADS</div-->
这告诉我 PhantomJS 在页面完成加载其 AJAX 资产之前返回了页面。有什么办法可以减慢速度吗?我试过使用 rasterize.js 解决方案,但看起来好像我添加到 poltergeist 的 "phantomjs_options" 哈希中的任何脚本都被忽略了。
使用等待您的 Capybara 方法,断言页面上的内容仅在 AJAX 完成后才应存在于页面上。例如,如果页面应该仅在 AJAX 完成后显示 "Page loaded!",并且假设您正在使用 RSpec,请执行以下操作:
expect(page).to have_content("Page loaded!")
然后您可以安全地测试页面上依赖 AJAX 已完成的其他内容。
水豚等待指定内容出现的方法有find
和find_*
方法,within
,has_content?
/has_no_content?
,has_css?
/has_no_css?
、has_selector?
/has_no_selector?
、click_*
、fill_in
、check
、uncheck
、select
和choose
。一些 Capybara 方法 不 等待,包括 current_path
、visit
、execute_script
、evaluate_script
和节点访问器,如 text
和 value
。 all
和 first
等待,如果你给他们一些选项,让他们有特定的等待(:count
、:minimum
、:maximum
、:between
) ,否则他们不会。这是一个雷区。 (我的列表主要来自 this blog post。)
还有其他方法可以等待(sleep
(不好),轮询数据库直到出现由 AJAX 引起的更改,等等)但是通常使用等待你的 Capybara 方法和推荐方式。
不确定您实际上在等待什么 css 明智地在加载的页面上,但我会这样做的方式是:
Capybara.using_wait_time(x) { page.find('css_here') }
其中 x
是您希望水豚在找不到 css 时出错前允许的秒数。
expect(page).to have_content "Page loaded!", wait: x