概要
Seleniumはあなたに適していますか?さまざまなプロジェクトのコンポーネントの概要を参照してください。
Seleniumは一つのツールやAPIではありません。たくさんのツールから構成されています。
WebDriver
デスクトップのウェブサイトのテスト自動化をはじめるのなら、WebDriver APIを使いましょう。
WebDriver はブラウザ自動化のAPIを使用します。このAPIは、ブラウザをコントロールしてテストを実行するためにブラウザベンダーによって提供されています。これは現実のユーザーがブラウザを操作するかのように動きます。
WebDriverのAPIはアプリケーションのコードと一緒にコンパイルする必要がありませんから、全く邪魔になりません。
これによって、あなたは本番環境と同じアプリケーションをテストすることができます。
IDE
IDE (Integrated Development Environment: 統合開発環境)はSeleniumのテストケースを開発するためのツールです。
これは利用しやすいChromeとFirefoxの拡張機能であり、テストケースを開発するための一般に最も効率的なツールです。
IDEはあなたのブラウザ上で、その要素で定義されたパラメーターと共にSeleniumのコマンドを使いユーザーの動作を記録します。
これは時間の節約だけでなく、Seleniumスクリプトのシンタックスを学ぶための優れた方法です。
Grid
Selenium Grid を使用すると、さまざまなプラットフォームのさまざまなマシンでテストケースを実行できます。
テストケースの起動の制御はローカル端末で行われ、テストケースが起動されると、
リモート端末によって自動的に実行されます。
WebDriverテストの開発後、複数のブラウザーとオペレーティングシステムの組み合わせでテストを実行する必要が出てくる場合があります。
ここで Grid が登場します。
1 - コンポーネントを理解する
WebDriverを使ってテストスイートを構築するには、多くの異なるコンポーネントを理解し、効率的に使用する必要があります。
ソフトウェアのすべてがそうであるように、人によっては同じ概念に異なる用語を使用します。
以下は、本説明での用語の使用方法の内訳です。
用語
API: アプリケーション プログラミング インターフェイス。これはWebDriverを操作するために使用する"コマンド"をまとめたものです。
ライブラリ: APIとそれらを実装する必要なコードを含むコードモジュール。
ライブラリは各言語バインディング向けのものです。例 .jar
files for Java, .dll files for .NET, など.
ドライバー: 実際のブラウザを制御します。
ほとんどのドライバーはブラウザベンダー自身が作成します。ドライバーは一般的にブラウザ自体を備えたシステムで実行される実行可能モジュールであり、テストスイートを実行するシステムにはありません。(ただし、それらは同じシステムであっても構いません。)注: 一部の人々はドライバーをプロキシと呼んでいます。
フレームワーク: WebDriverスイートのサポートとして使用する追加ライブラリ。これらのフレームワークは、JUnitやNUnitなどのテストフレームワークです。また、CucumberまたはRobotiumといった自然言語機能をサポートするフレームワークでもあります。フレームワークは、テスト対象のシステムの操作や構成、データ作成、テストオラクルなどに記述、利用されます。
部品構成
最低限、WebDriverはドライバーを経由してブラウザーと通信します。
コミュニケーションは双方向です:WebDriverは、ドライバーを経由してブラウザーにコマンドを渡し、同じルートを経由して情報を受け取ります。
ドライバーは、ChromeDriver for GoogleのChrome/Chromium、MozillaのFirefox用GeckoDriverなどブラウザー固有のものです。
ドライバーはブラウザと同じシステムで動きます。これは、テスト自体を実行するところが同じシステムである場合とそうでない場合があります。
上記の簡単な例は 直接 通信です。ブラウザへのコミュニケーションは、Selenium ServerまたはRemoteWebDriverを経由した リモート 通信もできます。RemoteWebDriverは、ドライバーおよびブラウザと同じシステムで実行されます。
リモート通信は、ホストシステム上のドライバーと順に通信するSelenium ServerまたはSelenium Gridを使用して行うこともできます。
どのフレームワークに適しているか
WebDriverには1つのジョブしかありません: 上記の任意のメソッドを経由してブラウザと通信します。WebDriverはテストに関することを知りません: WebDriverは物事を比較する方法、成功または失敗を確認する方法を知りません、そして、レポートや Given/When/Then 文法に関しても確実に知りません。
ここで、さまざまなフレームワークが登場します。
最低限必要なのは言語バインディングに一致するテストフレームワーク、例えば NUnit for .NET, JUnitfor Java, RSpec for Ruby などです。
テストフレームワークは、WebDriverおよびテストの関連手順の実行を担当します。
それは下記図に似ていると考えることができます。
上図でCucumberなどの自然言語のフレームワーク/ツールがテストフレームワークボックスの一部として存在する場合があります、またはテストフレームワークを独自の実装で完全に密閉する場合があります。
2 - Selenium 詳細
Seleniumは、Web ブラウザーの自動化を可能にし、 サポートするさまざまなツールとライブラリーの包括的なプロジェクトです。
Selenium 詳細
Selenium にはさまざまな機能がありますが、その核となるのは、
ブラウザーのインスタンスをリモートで制御し、
ユーザーとブラウザーのやりとりをエミュレートするために利用できる最高の技術を使用する、
Webブラウザー自動化のためのツールセットです。
Seleniumを使用すると、ユーザーはエンド ユーザーが実行する一般的なアクティビティをシミュレートできます。
フィールドにテキストを入力し、ドロップダウン値とチェック ボックスを選択し、ドキュメント内のリンクをクリックします。
また、マウスの移動、任意の JavaScript の実行など、他の多くのコントロールも提供します。
主にWebサイトのフロントエンドのテストに使用されますが、その中核として、Seleniumは、
ユーザーがブラウザーを代理で操作する ライブラリ です。
インターフェースはアプリケーションに遍在しており、目的に合わせて他のライブラリとの構成を促進します。
すべてを支配する 1 つのインターフェース
プロジェクトの指針となる原則の1つは、すべての (主要な) ブラウザー テクノロジに共通のインターフェイスをサポートすることです。
Webブラウザーは非常に複雑で、高度に設計されたアプリケーションであり、
まったく異なる方法で操作を実行しますが、実行中は同じように見えることがよくあります。
テキストは同じフォントで表示されますが、画像は同じ場所に表示され、リンク先は同じです。
水面下で起こっていることは、昼と夜と同じくらい異なります。
Selenium はこれらの違いを “抽象化” し、コードを書いている人からその詳細や複雑さを隠蔽します。
これにより、数行のコードを記述して複雑なワークフローを実行できますが、
これらの同じ行は、Firefox、Internet Explorer、Chrome、およびその他のサポートされているすべてのブラウザーで実行されます。
ツールとサポート
Seleniumの必要最小限な設計アプローチは、より大きなアプリケーションのコンポーネントとして含まれる汎用性を提供します。
Seleniumの包括的なプロジェクトの下で提供される周辺インフラストラクチャは、
ブラウザーのgrid をまとめるためのツールを提供し、
さまざまなブラウザーやさまざまなマシンの複数のオペレーティングシステムでテストを実行できるようにします。
サーバールームやデータセンター内の一連のコンピューターがすべて同時にブラウザーを起動して、
サイトのリンク、フォーム、テーブルにアクセスし、1日24時間アプリケーションをテストしていると想像してください。
最も一般的な言語用に提供されているシンプルなプログラミングインターフェイスを介して、
これらのテストは並行して休むことなく実行され、エラーが発生するとレポートが返されます。
ブラウザーを制御するだけでなく、そのようなgridを簡単に拡張および展開できるようにするための
ツールとドキュメントをユーザーに提供することで、これを実現するお手伝いをするのが目的です。
誰がSeleniumを利用するのか
世界で最も重要な企業の多くは、ブラウザベースのテストに Seleniumを採用しており、
多くの場合、他の独自ツールを使用した長年にわたる取り組みに取って代わりました。
人気が高まるにつれて、その要件と課題も倍増しています。
ウェブがより複雑になり、新しいテクノロジーがウェブサイトに追加されるにつれて、
可能な限りそれらに遅れずについていくことがこのプロジェクトの使命です。
オープンソースプロジェクトであるため、このサポートは多くのボランティアからの惜しみない時間の寄付によって提供されます。
このプロジェクトのもう1つの使命は、より多くのボランティアがこの取り組みに参加することを奨励し、
強力なコミュニティを構築して、プロジェクトが新しいテクノロジに対応し続け、
機能テスト自動化の主要なプラットフォームであり続けることができるようにすることです。