web-dev-qa-db-ja.com

poltergeist / PhantomJSとcapybara-webkitの違いは何ですか?

  1. PhantomJSとcapybara-webkitの違いは何ですか?
  2. PhantomJSに対するcapybara-webkitの利点は何ですか?
  3. どちらが最も効率的なツールですか?
  4. その他...
60
Prashanth Sams

poltergeist は、PhantomJS(WebKit上に構築されたヘッドレスブラウザー)のcapybaraドライバーです。 capybara-webkitは、WebKitを直接使用するcapybaraドライバーです。

poltergeist/PhantomJSには、capybara-webkitよりも大きな利点がいくつかあります。

65

TL; DR

  • Poltergeist/PhantomJSのセットアップは簡単です
  • Poltergeist/PhantomJSの依存関係が少ない
  • Capybara-webkitはより安定しており、信頼性が高く、CIに適しています

長いです:

Poltergeist + PhantomJSを1年以上使用しています。私の最大のプロジェクトには、多くのAjax呼び出し、ファイルのアップロード、画像の操作、JSテンプレート、および純粋なCSS3アニメーションがあります。

PoltergeistとPhantomJSは、時々ランダムエラーを生成しました。

それらのいくつかは私の間違いでした。 Ajaxのテストには注意が必要です。一般的なエラーは、成功したテストの終了時にdatabase_cleaner gemがデータベースを切り捨てたが、空のデータベースが原因で1つのAjax呼び出しがまだ実行され、コントローラーで例外が生成されたことです。 sleep()を使用しない限り、これを修正するのは必ずしも簡単ではありません。 (私はしません)。

しかし、ポルターガイストに関する多くのエラーは私の間違いではありませんでした。同じことを30回(正当な理由で)行うテストがあり、たまに30回のうち1回は機能しませんでした。 Poltergeistはボタンをクリックしませんでした。アニメーションではなく、表示される通常のボタンでした。 (もう一度クリックすることで)修正できましたが、それはhoweverいハックであり、間違っていると感じました。

時々、すべてのブラウザで動作するスクリプトがPoltergeist/PhantomJSでランダムなJavaScriptエラーを生成しました。 100回のうち約1回または2回。

2つの異なるAjaxアップローダープラグインを使用して、PhantomJS 1.9と2.0の動作が異なることを経験しました。 2.0はより安定していて一貫性がありますが、完璧とはほど遠いものです。

これはジェンキンスにとって大きな痛みでした。 400の機能のうち1つまたは2つ(jsブラウザーテスト)がランダムエラーを生成したため、3回実行ごとに失敗しました。

2週間前、私はCapybara-webkitを試しました。目に見えない要素を異なる方法で処理するため、移行に数時間かかりました。これについては、Capybara-webkitがより正確または厳密です。重複する要素についても同じことに気付きました。

Ajaxのアップロードと画像操作のテストには、Capybara-webkit用に変更する必要があるカスタムスクリプトが必要です。

開発にはMac OS X、生産にはFreeBSD、ジェンキンスにはLinuxを使用しています。 Capybara-webkitは、画面を必要とし、多くの依存関係があるため、Poltergeistよりもセットアップが複雑でした。 PhantomJSだけが真にヘッドレスでスタンドアロンです。必要に応じて、運用サーバーでPhantomJSを実行できます。依存関係があるため、capybara-webkitではこれを行いません。

これで、100%安定したJenkins CIができました。ランダムなjavascriptエラーはすべて、過去の記憶です。 Capybara-webkitは、常にクリックしたいボタンをクリックします。 Javascriptは常に正常に動作します。現在、私は約20〜25個の安定したビルドを直線的に持っています。

多くのAjaxを使用するプロジェクトには、capybara-webkitをお勧めします。

私のアドバイスは、2015年8月の最新バージョンに基づいています。

36
Martina Mózes

capybara-webkitとPhantomJSはどちらもWebkitを内部で使用して、Webページをヘッドレスで、つまりブラウザーを必要とせずにレンダリングします。ただし、これらは異なるツールです。

  • capybara-webkitは、Capybaraのアダプターとして機能します。Ruby gem。これにより、RailsまたはRackアプリの高レベルUIテストを作成および実行できます。
  • PhantomJSは、Webページに対してスクリプトを簡単に実行できる低レベルのツールです。 UIテストの作成にも使用できます(たとえば、 Casper 、またはPhantomJSに基づいて構築される他の テストツール を参照してください)。
7
Elliot Winkler

PhantomJSは、オーディオ/ビデオなど、本当にひどいHTML5機能をサポートしていません。

0
victorhazbun