web-dev-qa-db-ja.com

Casperjs / PhantomJs対Selenium

Seleniumを使用して、UIテストを自動化しています。最近、ユーザーの大多数がChromeを使用していることを確認しました。 PhantomJSとSeleniumを使用することの長所と短所:

  • パフォーマンスの面で実際の利点はありますか?テストケースの実行にかかる時間は?
  • SeleniumよりもPhantomJSを好むのはいつですか?
147
spirit3189

彼らはさまざまな問題を攻撃しています。 PhantomJSはコマンドラインで完全に実行されるため、開発ワークフローの一部として、および/または継続的インテグレーションサーバーにおいて、煙テストの最初のレイヤーとして適しています。 Seleniumは複数のブラウザーを対象としているため、ブラウザー間の一貫性を確保し、さまざまなオペレーティングシステムで広範なテストを実行することが非常に役立ちます。

WebアプリケーションをさまざまなWebブラウザーで実行する必要がある場合、PhantomJSのみでUIテストを実行しても、ほとんどのテスト範囲は得られません。ただし、詳細なテストを行う前に、PhantomJSを起動し、いくつかの基本的な健全性チェックを実行することはまったく問題ありません。ログイン画面が意図せずに壊れて機能しない金融アプリケーションのテストの狂気を想像してください!

最新のPhantomJSの最近のWebDriverサポートにより、2つの間の線がわずかにぼやけていることに注意してください。 PhantomJSを使用して最初にテストを迅速に実行し、(重大なエラーが発生していないと仮定して)Seleniumセットアップで同じテストを引き続き徹底的に実行できるようになりました。

180
Ariya Hidayat

Ariyaが指摘したように、最近のWebDriver統合により、Seleniumを使用してPhantomJSを駆動できるようになりました。

これは非常に強力です。

チェックインのたびに、ヘッドレスUnixサーバー上のCIを介して、完全に自動化された一連のSeleniumテストを実行できます(WebDriver実装としてPhantomJSを使用)。次に、ブラウザの互換性をテストする場合は、基盤となるWebDriver実装をChrome、Firefoxなどに変更することにより、テストをローカルで実行できます。

49
mekondelta

現在、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 142 および HTML-UNIT 1046 を参照してください。

  • Firefoxは、画像の読み込みとスタイルシートを無効にしているにもかかわらず、最も遅いSeleniumドライバーです。これは、ロードと初期化が最も遅く、Chromeよりもかなり遅くなり、抽出が失敗するたびにドライバーを再ロードする必要があるためです(テストでは、すべてのURL取得遅延を軽減するために5つのドライバーのプールを作成しますSelenium Webドライバー)。

  • PhantomJSは、Firefoxよりも精度が高く、Chromeよりもわずかに低いですが、Firefoxの約半分の時間です。さらに、開発ボックスで実行できます。複数のブラウザを起動して「マシンを引き継ぐ」ことはないので、作業を進めることができます。

PhantomJSを強くお勧めします。

41
Mark Butler

SeleniumとPhantomJSの両方のパワーを活用する PhantomJSにはヘッドレスブラウザ機能があるため、 Seleniumを搭載したブラウザ(IE、Chromeなどの従来のブラウザに加えて)、このアプローチの利点:

  1. CIでWebアプリケーションのSanityを実行するために使用できます(エージェントマシンにIEまたはchromeがない場合でも)、テストは効果的に実行されます。
  2. 一部の開発チームは、このアプローチを使用して迅速な結果を取得し、より少ない時間とリソースを消費します。
  3. ファントムJSの最大の機能は、マルチスレッドを使用して並列テストを実行する画面キャプチャです。これにより、実行時間が大幅に短縮されます。
2

PhantomJSの使用中に直面した課題:

私のアプリケーションはWebアプリケーションの価格を設定していました:

  1. ある時点で、chromeブラウザーで正常に動作していたロケーターがphantomJSで動作していません。
  2. Seleniumでダブルクリックまたはコンテキストクリックを実行しているときに、クリックしていない操作cozを最初に確認するための追加チェックを行わなければならない場合があります。
  3. キャッシュとCookieの永続性。ログアウトしてからログインすると、データはキャッシュに残ります。 |そのため、クロムでテストを実行します。
  4. 「ファイルのアップロードの問題」で見つかった最も重要な問題の1つ。アプリケーションのphantomJsブラウザーでファイルをアップロードできません。 javascriptexcutorやjqueriesなど多くのことを試しましたが、どれもまったく機能しませんでした。そのため、このテストもChromeで実行します。注:PhantomJSのWeb要素とやり取りするために、フレームワークでJavaScript関数を広範囲に使用しました。 1つのことは、PhantomJSの実行時間が非常に短いことを確認しています。そのため、クライアントが機能/パフォーマンスを望んでいるかどうかに応じて、クライアントの優先順位に依存します。エンドツーエンドのシナリオをテストする場合は、クロムを使用します。
1
Vaibhav_Sharma