Selenium WebDriverとは何ですか?

この記事は、より一般的な記事「Seleniumとは」の続きであり、Selenium WebDriverが他のWebアプリケーション自動化ツールの中で占める位置を説明しています。



ここでは、Selenium WebDriverとは何か、TestComplete、QuickTest Pro、その他のテスト自動化ツールと比較する意味がない理由について詳しく説明します。 そしてポイントは、Selenium WebDriverが無料でオープンであることだけではありません-SahiやRobot Frameworkなどの他の無料ツールと比較することも同様に無意味です。



なんで?



Selenium WebDriverはテスト自動化ツールではないためです



しかし、それは何ですか?



この質問に対していくつかの異なる回答をすることができます。最初に短い回答をし、次により詳細な回答をします。



さらに、Selenium WebDriverがインターフェイス(コマンドセット)を使用するのに悲惨で不便な理由、美しいレポートが生成されない理由、そしてそれにもかかわらず、なぜこれが非常に人気があるのか​​を説明します:)



念のため、この記事はWebDriverについてですが、Selenium RCについては多くの議論が当てはまることを予約しますが、この古いバージョンについては特に言及しません。なぜなら、その場所は歴史のゴミ箱にあるからです。



それでは、Selenium WebDriverとは何ですか?



目的により、Selenium WebDriverはブラウザードライバー 、つまりブラウザーの動作を制御するプログラムを開発できるソフトウェアライブラリです。



本質的に、Selenium WebDriverは次のとおりです



Selenium WebDriverと「他のテストツール」を比較する意味がないのは明らかです。 はっきりしない 次に、詳細を追加します。



Selenium WebDriverはブラウザードライバーです



ITスペシャリストでなくても、コンピューターに出くわしたすべての人は、「ドライバー」という言葉を知っています。 これは、他のプログラムがいくつかのデバイスと対話できるようにする小さなプログラム、またはむしろソフトウェアライブラリです。 プリンタードライバーを使用すると、プリンターで何でも印刷できます。 ディスクドライバーを使用すると、データを読み書きできます。 ネットワークカードドライバーを使用すると、ネットワークを介して他のコンピューターとデータを交換できます。



ユーザーはドライバーを直接操作しません。 これらは、ドライバーを介してさまざまなデバイスと対話するアプリケーションプログラムで動作します。 ドライバーにはユーザーインターフェイスがありません。 待ってください。ただし、ドライバーをセットアップするためのユーザーインターフェイスは時々ありますか? それは起こります。 ただし、これはドライバーを構成するためプログラムインターフェイスであり、ドライバー自体ではありません。 ドライバーにはソフトウェアインターフェイスのみがあり、その目的は、アプリケーションユーザープログラムがデバイスと対話できるようにすることです。



そのため、 Selenium WebDriver、または単なるWebDriverはブラウザードライバー、つまり、ユーザーインターフェイスを持たないソフトウェアライブラリです。これにより、他のさまざまなプログラムがブラウザーと対話し、その動作を制御し、ブラウザーからデータを受信し、ブラウザーに何らかの種類の実行を強制できますチーム。



この定義に基づいて、 WebDriverがテストに直接関連していないことは明らかです。 ブラウザーへのアクセスを自動テストに提供するだけです。 これは彼の機能が終了する場所です。



テストの構造化、グループ化、実行、およびテストレポートの生成により、Java用のJUnitまたはTestNG 、.Net用のNUnitまたはGallio 、Ruby用のRSpecまたはCucumberなどのテストフレームワークが提供されます。 テスト開発は、 EclipseIntellij IDEAVisual StudioRubyMineなどの環境で実行されます。 アセンブリは、 MavenGradleAntNAntRakeなどを介して行われます。 スケジュールされたテストが実行され、レポートが継続的統合サーバー( JenkinsCruiseControlBambooTeamCityなど)によって公開されます。 そして、これらはすべて、Seleniumプロジェクトに関係のない独立したツールです。



ただし、Seleniumプロジェクトのフレームワークでは、ドライバーの開発だけでなく、他のいくつかの関連製品も開発されています。SeleniumServerでは、Selenium Gridを使用してSeleniumサーバーのクラスターを構築できるリモートブラウザー起動を整理できます。 これらは、テスト実行システムの構築にも参加しているため、上記のツールおよびフレームワークと同等です。 さらに、Selenium IDEと呼ばれる「レコーダー」があり、ユーザーアクションを記録し、WebDriverインターフェイスを使用して記録されたアクションを実行するコードを生成できます。



しかし、Seleniumプロジェクトの主なものはWebDriverであり、Seleniumエコシステムの重要な要素です。



他のドライバーはいますか? もちろん。



市販の「統合された」各ツールにはブラウザードライバーがありますが、原則としてこれらをこのツールの外部で個別に使用することはできません。 無料のオープンドライバーもあります。Watirはメインブラウザーへのアクセスを提供します。WatiNはInternet Explorerブラウザー用の優れたドライバーを持ち、 SahiはBig Fiveブラウザーで動作します。



Selenium WebDriverを他のツールと比較する方法は?



上記のすべてから、WebDriverとTestCompleteやSahiなどのテストツールを比較することは無意味であると結論付けることができます。 それらは異なる重量カテゴリーにあります。 これは、プリンタードライバーとテキストエディターを比較するのと同じです。



そして、何を比較できますか?



WebDriverは、さまざまなツールに含まれているドライバーと比較できます。 たとえば、次を比較できます。



そして、ここでWebDriverは議論の余地のないリーダーです。 ただし、WebDriverを他のものと比較することは、この記事の範囲外です。



TestCompleteやSahiなどの「複雑な」ツールとの比較については、このためにWebDriverではなく、フルスタックを取得する必要があります。



たとえば、Javaテクノロジーのスタックは、Jenkins + Maven + Thucydices + JUnit + WebDriverになります。 Javaプログラミング言語のすべての機能に加えて、MavenとJenkinsの多くのプラグインが追加されます。すべてをクールにするために、 SauceLabsなどのサービスを使用してクラウドでテストを実行できます。



その後、比較が興味深いものになります。 しかし、これはWebDriverのメリットだけでなく、ブラウザードライバーだけでなく、スタック全体が重要です。 WebDriverに関しては、ほとんどすべてのスタックに完全に統合されているだけでなく、これは「独立した」ドライバーとしての利点の1つです。



もちろん、WebDriverはテストだけでなく使用できます。 彼は、誰がブラウザを制御したいのか、なぜ制御したいのかは気にしません。 いくつかの日常的なタスクを自動化できます。 フォーラムに殺到するボットを作成できます。 ドキュメント用のスクリーンショットを自動的に取得するスクリプトを作成できます。 何でも。 ドライバーは気にしません。 ブラウザへのアクセスのみを提供します。



さらに、使用するツールに関係なく、さまざまな言語(Java、C#、Ruby、Python)で実装されたWebDriverに接続できる可能性は十分にあります。 そして、お気に入りのツールのすべての機能に加えて、WebDriverのすべての利点を追加します。 これは努力する価値があります。なぜなら、現時点ではドライバーの中で最高だからです。



ええ、はい、私はすでに「彼は最高です」と何度か繰り返しましたが、同時に他のドライバーとの比較は行いませんでした。 そして、私はしません。 将来、どの比較よりも重要であるという議論があるからです。



Selenium WebDriverはブラウザーインターフェイス仕様です



WebDriverと他のすべてのドライバーの最も重要な違いは、それが「標準」ドライバーであり、残りはすべて「非標準」であることです。



そして、これはスピーチの単純な図ではありません。



W3C組織は、WebDriverをブラウザインターフェース標準の開発基盤として実際に採用しました 。 現在、公開レビュー中です。



1年半後に、この規格が承認されます。 そして、WebDriverインターフェースの実装はブラウザの製造元に委ねられ、独立したドライバとしてのWebDriverはブラウザに直接組み込まれるため、将来完全になくなる可能性があります。



したがって、Selenium WebDriverはツールではなく、仕様、ドキュメント、ブラウザーがこのインターフェイスを介して制御できるようにブラウザーが外部に提供する必要があることを説明する標準であると言えます。



標準が議論されている間、ブラウザメーカーはすでに動作しています。 Seleniumプロジェクトのフレームワーク内で、さまざまなブラウザー用にいくつかの参照実装が開発されましたが、徐々にこの活動はブラウザーのメーカーに移されています。 ChromeブラウザーのドライバーはChromiumプロジェクトの一部として開発されており、ブラウザー自体を開発しているのと同じチームによって作成されています。 Operaブラウザ用のドライバーはOpera Softwareによって開発されています。 Firefoxブラウザーのドライバーは、まだSeleniumプロジェクトの参加者によって開発されていますが、Mozilla会社の腸内では、コード名がMarionetteである代替ドライバーが既に準備されています。 Firefox用のこの新しいドライバーは、ブラウザー開発ビルドで既に利用可能です。 次にInternet ExplorerとSafariに続いて、それぞれの会社の従業員はまだ開発に参加していませんが、標準(将来であっても)が必須であるため、この方向に若干のシフトがあります。



一般的に、Seleniumはブラウザー管理を自動化するツールを作成する唯一のプロジェクトであり、ブラウザーを開発する企業が直接関与していると言えます。 これが成功の主な理由の1つです。



そして、すべてのブラウザーがこの標準を実装するとどうなりますか?



テストツールのメーカーが車輪を再発明するのではなく、標準インターフェイスを介してブラウザを制御することを期待するのは論理的です。 すべてのツールがWebDriverを使用してブラウザーと対話すると言うことができます。 しかし、これは独立したドライバーとしてのSelenium WebDriverではなく、インターフェース仕様としてのSelenium WebDriverになります。



それでは、なぜそのような原始的なインターフェースを持っているのでしょうか?



なぜなら、WebDriverは次のとおりです。



Selenium WebDriverを開発する際の目標は、当初、余分なものを含めないように設定されていました。 標準のブラウザ管理インターフェイスは、シンプルで安定している必要があります。



チェック、チェック解除(チェックボックスの場合)、選択(ドロップダウンリストの場合)などの「使いやすさを高める」コマンドは破棄されました。 それらはすべて簡単なクリックコマンドに要約されるため、不要です。 現在、WebDriverインターフェースに残っている冗長なコマンドは1つだけです-これは送信ですが、いつか削除されるかもしれません。



さらに、インターフェイス構造はIDL言語で記述できるように設計され(これはまさにW3C標準で行われたものです)、さまざまなプログラミング言語で実装されました。 したがって、最小限の言語イディオム、最小限の「隠された」変数、および「ダムで単純な」インターフェースが使用されました。



しかし、このプリミティブインターフェイスのおかげで、WebDriverインターフェイスには、Java、C#、Ruby、Python、JavaScript、PHP、Perl、さらにはHaskellでのクライアントライブラリ実装があります!



そして、同じシンプルさのおかげで、WebDriverは他のツールと完全に統合され、あらゆるスタックに統合されます。 これは、その人気と急速な普及の秘密です。他のツールを「打ち負かす」のではなく、それらと統合します。



しかし、ユーザビリティについてはどうでしょうか?



Selenium WebDriverに基づく拡張機能は、この問題を解決するはずです。 これらは、コマンドの拡張セットを提供し、プリミティブなWebDriverインターフェイスを介してこれらのコマンドを実装する必要があります。 Seleniumディストリビューションには、ドロップダウンリストで動作するように設計されたSelectクラスがあります。これは、拡張機能の構築方法の明確なデモンストレーションです。



徐々に、Selenium WebDriverに基づいて構築され、より高いレベルの抽象化を提供するライブラリが表示されます: Selenidefluent-seleniumwatir-webdriverThucidides 。 一般的なテスト設計フレームワークを使用すると、WebDriverを他のドライバーと一緒に使用できます。 これらのフレームワークの中で、 Robot FrameworkCapybara 、および同じThucididesに言及できます。



遅かれ早かれ、jQuery、Prototype、ExtJS、GWTなどのウィジェットのセットを操作しやすくする補助ライブラリが表示されるはずです。



そのような拡張機能とツールの数は増え、複雑になります。 そのため、何らかのツールを使用して、ブラウザーとの対話がSelenium WebDriverドライバーを介して実行されることを疑うことなく、テストを実行することが間もなく発生する可能性があります。



セレンを勉強する価値はありますか?



たぶん、これらのライブラリとツールをより高いレベルで研究する方が良いでしょうか?



この質問に答えるために、私はそれを別の方法で定式化します:誰がSeleniumを勉強すべきか、そしてなぜ、そして誰がより高レベルのライブラリとツールを使うべきか

  1. どのツールを使用する場合でも、ブラウザーを制御するドライバーを選択する必要があります。 それを選択するには、ドライバーの機能-できることとできないことを知る必要があります。 このレベルでは、すべての自動化スペシャリストがSeleniumを習得する必要があります。 この場合、WebDriverインターフェイスを使用する場合、勉強する必要はありません。
  2. 単純なコマンドセットは、「高度な」よりも学習が容易です。つまり、Seleniumはその拡張よりも学習が容易です。 この現象には裏返しがあります-コマンドの拡張セットを検討した場合、WebDriverコマンドのセットもマスターしたことが突然わかります。
  3. 通常、拡張機能は言語に依存します。これは、特定のプログラミング言語でコードを編成するための一般的な手法である言語イディオムの使用が便利になるためです。 WebDriverの基本的なインターフェイスはシンプルなので、使いこなせば、どの言語でも使用でき、ほとんど同じように見えます。
  4. インターフェースの利便性を向上させることを目的としたほとんどのライブラリは、要素の検索ツールを改善します-追加のタイプのロケーター、ロケーターを記述するより便利な方法など。 WebDriverのユーザーアクションに対応するプリミティブはすでに十分です。 もちろん、ライブラリは典型的な「バンドル」、つまりこれらのアクションのシーケンスを実装しますが、これはドロップダウンリストのSelectクラスでこれを行う方法と同様です。
  5. 「ロボットフレームワークのように」テストを記述するために「タブレット」を使用する場合、またはドメインレベルで記述するための特別な言語(DSL、ドメイン固有言語)を使用する場合、WebDriverプリミティブについて知る必要はありません。 ただし、テスト用の「フィクスチャ」を実装し、タブレットで操作できるアクションを記述し、DSLを実装する場合、WebDriverまたは何らかの拡張機能を直接操作する必要がありますが、高レベルではありません。
  6. そして、最後の議論は、時間の経過とともに関連性が低くなることを願っています-残念ながら、良い拡張機能は非常に不足しています。 彼らは確かに表示されます。 これらの拡張機能のいずれかを実装するのはあなたかもしれません。 これを行うには、WebDriverインターフェイスを学習する必要があります。 そして、あなたの労働の成果を楽しむ人々は、より高いレベルの図書館で働くことができます。 それまでの間、WebDriverをその上の小さなアドオンで直接使用する必要があります。




上記のすべてが、Selenium WebDriverが世界の全体像の中でどの位置を占めているか、そしてそれが他のツールとどのように関係しているかをよりよく理解できることを願っています。 まだ理解できない瞬間がある場合-コメントで質問して、すべてを明確にしようとします。



All Articles