web-dev-qa-db-ja.com

save_and_open_pageがcapybara2.0で機能しませんか?

カピバラを2.0に更新したところ、save_and_open_pageの呼び出しはすべて、スタイルを設定せずにhtmlページを返します。ページの上部にスタイルシートのリンクが正しくあります。カピバラ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 '

  • スクリーンショット_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で発生しました: `require 'で


18

ブログを閲覧して掘り下げた後、save_and_open_pageの問題を修正することができました。プロジェクトからcapybara_screenshotgemを削除しました。私の作業コードは私の github test_capybara_screenshotリポジトリ で見ることができます。私が理解した解決策は、 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*ディレクトリを無視させたいと思うでしょう。

7

以下をgemファイルに追加してみてください

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

save_and_open_pageは、これなしでは機能しないと思います。

- 更新しました -

これをテストしましたが、save and 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

それを試して、それが役立つかどうか私に知らせてください。


応答(テイラードWebサイトから):

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

22
simonmorley