save_and_open_page不能与capybara 2.0一起使用?

时间:2012-11-21 00:59:49

标签: ruby-on-rails ruby-on-rails-3 capybara

我刚刚将我的水豚更新到2.0,并且我的所有save_and_open_page调用都返回了一个没有样式的html页面。它在页面顶部正确显示样式表链接。当我回到capybara 1.3时,样式再次起作用。任何人都知道如何解决这个问题,和/或问题是什么?

感谢, 戴夫


更新1。

劈:

我找到了一种合理的方法来解决simonmorley推荐的链接问题: Capybara Webkit problem 它指向:capybara-screenshot

它涉及使用capybara-screenshot gem来获取页面的截图。当你将它与生成html的save_and_open_page结合使用时,你可以看到它的样子,并看到HTML。

    save_and_open_page
    Capybara::Screenshot.screenshot_and_open_image

如果我可以让Capybara::Screenshot.screenshot_and_save_page工作,那么我认为我可能有一个解决方案(如果名称暗示我认为它的行为)。但是,当我尝试时,我得到cannot load such file -- capybara/util/save_and_open_page


更新2。

!!等等,screenshot_and_open_image现在不工作(没有创建或显示png图像)。 !!


更新3。

测试应用

我创建了一个测试应用,并将其发布在test_capybara_screenshot on Github

当我在开发中运行此测试应用程序时,页面会显示出醒目的红色背景样式。当我运行测试时,唯一对我有用的是save_and_open_page,除了没有样式。

注意,当我运行任何测试时,我收到以下警告:

  

警告:Nokogiri是针对LibXML版本2.7.8构建的,但已动态加载2.7.3

rspec测试详情:

  • save_and_open_page会出现一个无聊的白色背景(没有 定型)。
  • screenshot_and_open_image返回错误:
  

Rack :: Test水豚驱动程序无法输出屏幕截图。跳过。

     

打开失败////ocuments/experiments/test_capybara_screenshot/tmp/capybara/screenshot-2012-11-26-07-48-29.png with options {}:找不到应用程序处理'/〜/ Documents /实验/ test_capybara_screenshot / TMP /水豚/截图-2012-11-26-07-48-29.png'

  • screenshot_and_save_page返回:
  

挂钩后发生错误

     

LoadError:无法加载此类文件 - capybara / util / save_and_open_page   发生在〜/ .rvm / gems / ruby​​-1.9.3-p125 @ global / gems / activesupport-3.2.6 / lib / active_support / dependency.rb:251:在`require'


2 个答案:

答案 0 :(得分:20)

尝试将以下内容添加到您的gem文件

group :test do
  gem "capybara"
  gem "launchy"
end
如果没有这个我不相信,

save_and_open_page将无效。

- 更新 -

我已经为你测试了这个,当我使用save和open方法时,我得到了同样的错误。在我的设置中,这是因为我的页面引用了:

<link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" />

这种情况发生在Firefox,Chrome和Safari中。根据检查员的说法,没有找到任何文件。

我没有详细研究这个问题,也没有答案为什么它不起作用。然而,也有很多人在努力解决这个问题:

https://github.com/jnicklas/capybara/issues/485

并且,有关水豚和资产预编译的更多信息:

https://github.com/jnicklas/capybara/pull/609

这可能是一个解决方法:

https://groups.google.com/forum/#!msg/ruby-capybara/SBCor8UUj7w/hv97EgUQ1P4J

但是,如果您只想查看自己的页面,可以尝试以下操作:删除剪贴簿save_and_open_page并更改测试以使用javascript。这样,我的网页打开就好了。

 require 'spec_helper'

 describe "Foo" do
   it "should fail if Bar is lactose intolerant", :js => true do
     # .....
   end
 end

尝试并告诉我是否有帮助。


回复(来自Taylored网站):

我看到该页面几秒钟,然后就消失了。有没有办法让浏览器窗口不关闭?

答案 1 :(得分:7)

在浏览和挖掘博客后,我能够通过save_and_open_page解决问题。我从我的项目中删除了capybara_screenshot gem。您可以在github test_capybara_screenshot repository上查看我的工作代码。我想出的解决方案使用了我在capybara github site上找到的一些指针。

假设:

  • 您正在使用rspec进行测试。
  • 您的应用已配置为使用资产管道。

我要做的第一件事是设置它,以便将资产预编译到测试目录中。我这样做是将以下代码添加到spec/spec_helper.rb循环中的RSpec.configure文件中:

config.before (scope = :suite) do
  %x[bundle exec rake assets:precompile]
end

我在config/environments/test.rb文件中指定了资产预编译的位置:

config.assets.prefix = "assets_test"    # place test assets in public/assets_test directory
config.action_controller.asset_host = "file://#{::Rails.root}/public"

这使得测试资产独立于开发资产,并且仅在测试套件运行期间生成。

如果你这样做,你可能希望让git忽略/public/assets*个目录。