19

カピバラを 2.0 に更新したばかりで、save_and_open_page 呼び出しはすべてスタイリングなしの html ページを返します。ページの上部に適切にスタイルシートへのリンクがあります。カピバラ 1.3 に戻すと、スタイルが再び機能します。これを修正する方法、および/または問題が何であるかを知っている人はいますか?

ありがとう、デイブ


更新 1。

ハック:

simonmorley が推奨するリンクに従って問題を回避する合理的な方法を見つけました: Capybara Webkit problem which points to: 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 カピバラ ドライバーには、スクリーン ショットを出力する機能がありません。スキップ。

/~/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 は次を返します。

after フックでエラーが発生しました

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

そして、カピバラとアセットのプリコンパイルに関するもう少しの情報:

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 の Web サイトから):

ページが数秒間表示された後、ページが消えます。ブラウザ ウィンドウが閉じないようにする方法はありますか?

于 2012-11-21T01:27:36.713 に答える
7

ブログを閲覧して掘り下げた後、save_and_open_pageの問題を修正できました。プロジェクトから capybara_screenshot ジェムを削除しました。私のgithub test_capybara_screenshot repositoryで私の作業コードを見ることができます。私が見つけた解決策は、カピバラ 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 に答える