Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让poltergeist/PhantomJS延迟将页面返回给Capybara,直到加载AJAX?_Ruby On Rails_Ruby_Phantomjs_Capybara_Poltergeist - Fatal编程技术网

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

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”散列中的任何

如何防止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
方法,
中的
有内容?
/
有无内容?
有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