Ruby on rails 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到加载AJAX?
如何防止PhantomJS将页面返回给Capybara几秒钟,以允许AJAX完成加载?我得到的HTML正文是:Ruby on rails 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到加载AJAX?,ruby-on-rails,ruby,phantomjs,capybara,poltergeist,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”散列中的任何
<!--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
方法,中的,有内容?
/有无内容?
,有css?
/有无css?
,有选择器?
/有无选择器?
,点击
,填写
,选中
,取消选中
,选择
和选择
。一些Capybara方法不等待,包括当前路径
,访问
,执行脚本
,评估脚本
和节点访问器,如文本
和值
<如果您给他们一些特定的等待选项(:count
,:minimum
,:maximum
,:between
),则代码>全部和首先等待,否则它们不会等待。这是个雷区。(我的名单主要是从我的
还有其他等待方式(sleep
(bad),轮询数据库直到出现由AJAX引起的更改,等等),但使用等待您的Capybara方法是通常和推荐的方式。不确定您在加载的页面上实际等待的css是什么,但我会这样做:
Capybara.using_wait_time(x) { page.find('css_here') }
其中x
是您希望capybara在找不到css时出错前允许的秒数 好吧,我试了一下,但是我仍然得到了空的身体标签。我正在查看的站点是用Angular.js编写的,似乎覆盖了“ng-clope”标记,这意味着它在准备渲染所有内容之前不会渲染任何内容。有没有一种方法可以请求页面,然后将幻影渲染延迟几秒钟?我不知道。您可以在测试中只睡眠
,但这保证了测试的速度很慢。我真的很想找到一个你可以等待的内容。我已经用这种方法测试了很多角度。另外,请确保poltergeist是这样的,这样您就可以知道页面是否因为一个原因而没有呈现。Dang我已经做了所有事情,从“访问”后休眠代码到添加rasterize.js,但这似乎不能得到比Mechanize或Nokogiri更多的东西。就像这样:如果你有任何更多的建议,我会非常感激,因为已经两天了,我还在原地踏步。还有-你到底想在页面上做什么,因为大多数水豚方法应该等到元素可见时才与它们交互(ng斗篷隐藏它们)因此,例如,填充输入应该等到ng斗篷被移除后再进行。很好的提示:phantomjs 1.9.7已经过时,因此随着更新到2.1,我不再有随机绑定问题。将js错误设置为true有助于我做到这一点!再次感谢。
expect(page).to have_content "Page loaded!", wait: x