回答:
彼らはさまざまな問題を攻撃しています。PhantomJSはコマンドラインで完全に実行されるため、開発ワークフローの一部として、または継続的インテグレーションサーバーで、煙のテストの最初のレイヤーとして適しています。Seleniumは複数のブラウザを対象としているため、ブラウザ間の一貫性を保証し、さまざまなオペレーティングシステムで広範囲なテストを実行することは非常に有用です。
WebアプリケーションをさまざまなWebブラウザーで実行する必要がある場合、PhantomJSのみを使用してUIテストを実行しても、ほとんどのテストカバレッジは得られません。ただし、詳細なテストを行う前に、PhantomJSを起動し、いくつかの基本的な健全性チェックを実行することは完全に問題ありません。ログイン画面が意図せず壊れて機能しない金融アプリケーションのテストの狂気を想像してみてください。
2つの間の線は、最新のPhantomJSでの最近のWebDriverサポートによってわずかにぼやけていることに注意してください。最初にPhantomJSを使用してテストをすばやく実行し、次に(重大なエラーが発生しないと仮定して)Seleniumセットアップで同じテストを徹底的に実行し続けることが可能になりました。
最近のWebDriver統合により(Ariyaが述べたように)、Seleniumを使用してPhantomJSを駆動できるようになりました。
これは非常に強力です。
すべてのチェックイン時にヘッドレスUnixサーバー上のCIを介して、(PhantomJSをWebDriver実装として使用して)完全に自動化された一連のSeleniumテストを実行できます。次に、ブラウザーの互換性をテストする場合は、基になるWebDriver実装をChrome、Firefoxなどに変更することにより、ローカルでテストを実行できます。
現在、Web抽出フレームワークを作成しています。XPathを使用して250のWebサイトからデータを取得する524のテストがあります。当初、フレームワークはHTMLパーサーであるHTMLCleanerを使用していましたが、JavaScriptのサポートが必要なため、現在Seleniumを使用して調査しています。HtmlUnit、Chrome、Firefox、およびPhantomJSドライバーに対してテストを実行しました。以下は、各アプローチの所要時間と失敗数の比較です。
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
いくつかのコメント:
場合によっては、「失敗」がまったく失敗ではなく、JavaScriptがDOMを書き換えているためにエクストラクターが失敗している可能性があります。私は失敗を分析して原因を見つける過程にあります。
そうは言っても、HtmlUnitは最速のSeleniumドライバーですが、信頼性も低いです。この信頼性の低下はJavascriptだけに関係するのではなく、タグバランシングアルゴリズムで何かが壊れているように見えるため、「乱雑で汚い、現実の」HTMLの処理に問題があります。これに関していくつかの問題が提起されましたが、それらは修正されていません-HTML-UNIT 1423およびHTML-UNIT 1046を参照してください。
画像の読み込みとスタイルシートを無効にしているにもかかわらず、Firefoxが最も遅いSeleniumドライバーです。これは、ロードと初期化が最も遅く、Chromeよりもかなり遅くなるためです。また、抽出が失敗するたびにドライバーをリロードする必要があります(テストでは、5つのドライバーのプールを作成して、すべてのURL取得遅延を軽減していますSelenium Webドライバー)。
PhantomJSは、Firefoxよりも精度が高く、Chromeよりもわずかに低くなりますが、Firefoxの約半分の時間です。さらに、私は自分の開発ボックスでそれを実行できます。複数のブラウザーを起動して「自分のマシンを引き継ぐ」ことはないので、仕事に取り掛かることができます。
PhantomJSを強くお勧めします。
SeleniumとPhantomJSの両方の機能を活用する PhantomJSにはヘッドレスブラウザー機能があるため、これをセレン(IE、Chromeなどの従来のブラウザーに加えて)のブラウザーの1つとして使用することをお勧めします。このアプローチの利点:
PhantomJSの使用中に直面した課題:
私のアプリケーションはWebアプリケーションの価格設定でした: