19

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

谢谢,戴夫


更新 1。

黑客:

按照 simonmorley 推荐的链接,我找到了一种解决问题的合理方法:Capybara Webkit 问题 ,它指向: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。

测试应用:

我创建了一个测试应用程序,并将其发布在 Github 上的 test_capybara_screenshot 上

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

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

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

rspec 测试的详细信息:

  • save_and_open_page 带有一个无聊的白色背景(没有样式)。
  • screenshot_and_open_image 返回错误:

Rack::Test capybara 驱动没有输出屏幕截图的能力。跳过。

使用选项 {} 打开 /~/Documents/experiments/test_capybara_screenshot/tmp/capybara/screenshot-2012-11-26-07-48-29.png 失败:未找到处理 '/~/Documents/experiments/test_capybara_screenshot 的应用程序/tmp/capybara/screenshot-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/dependencies.rb:251:在“要求”中


4

2 回答 2

27

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

group :test do
  gem "capybara"
  gem "launchy"
end

没有这个我不相信 save_and_open_page 将无法工作。

- 更新 -

我已经为你测试过了,当我使用保存和打开方法时,我得到了同样的错误。在我的设置中,这是因为我的页面正在引用:

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

这发生在 Firefox、Chrome 和 Safari 中。据检查员称,没有找到任何文件。

我没有对此进行过详细的研究,也没有答案为什么它不起作用。然而,也有很多人在为此苦苦挣扎:

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

并且,关于 capybara 和资产预编译的更多信息:

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

这里可能有什么解决方法:

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

但是,如果您只想查看您的页面,您可以尝试以下操作:删除 scrap 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 网站):

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

于 2012-11-21T01:27:36.713 回答
7

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

假设:

  • 您正在使用 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*目录。

于 2012-11-27T23:23:05.743 回答