poltergeist は、PhantomJS(WebKit上に構築されたヘッドレスブラウザー)のcapybaraドライバーです。 capybara-webkitは、WebKitを直接使用するcapybaraドライバーです。
poltergeist/PhantomJSには、capybara-webkitよりも大きな利点がいくつかあります。
TL; DR
長いです:
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月の最新バージョンに基づいています。
capybara-webkitとPhantomJSはどちらもWebkitを内部で使用して、Webページをヘッドレスで、つまりブラウザーを必要とせずにレンダリングします。ただし、これらは異なるツールです。
PhantomJSは、オーディオ/ビデオなど、本当にひどいHTML5機能をサポートしていません。