概要 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と、それらを実装するために必要なコードを含むコードモジュール。
ライブラリは言語バインディングごとに用意されています。たとえば、Java用の .jar ファイルや .NET用の .dll ファイルなどです。ドライバー: 実際のブラウザを制御する役割を担います。
ほとんどのドライバーはブラウザベンダー自身によって作成されます。ドライバーは通常、ブラウザが稼働するシステム上で実行される実行可能モジュールであり、テストスイートを実行するシステムとは別のものです。(ただし、両者が同じシステムの場合もあります。)注: ドライバーをプロキシと呼ぶ人もいます。 フレームワーク: WebDriverスイートを補助するために使用する追加ライブラリ。これらのフレームワークは、JUnitやNUnitなどのテストフレームワークである場合があります。また、CucumberやRobot Frameworkといった自然言語の機能をサポートするフレームワークである場合もあります。テスト対象システムの操作や構成、データ作成、テストオラクルなどのために、フレームワークを作成して使用することもあります。構成要素 WebDriverは最小構成では、ドライバーを介してブラウザと通信します。
通信は双方向です。WebDriverはドライバーを介してブラウザにコマンドを渡し、同じ経路で情報を受け取ります。
ドライバーは、GoogleのChrome/Chromium用のChromeDriverや、MozillaのFirefox用のGeckoDriverなど、ブラウザ固有のものです。
ドライバーはブラウザと同じシステム上で実行されます。これは、テスト自体を実行するシステムと同一の場合も、異なる場合もあります。
この単純な例では、直接 通信を行います。ブラウザとの通信は、Selenium ServerまたはRemoteWebDriverを介した リモート 通信にすることもできます。RemoteWebDriverは、ドライバーおよびブラウザと同じシステム上で実行されます。
リモート通信は、Selenium ServerまたはSelenium Gridを使用して行うこともできます。どちらもホストシステム上のドライバーと通信します。
フレームワークの位置づけ WebDriverには、上記のいずれかの方法でブラウザと通信するという、ただ1つの役割があります。WebDriverはテストについて何も知りません。値を比較する方法も、成否をアサートする方法も、レポートや Given/When/Then の文法も知りません。
ここで、さまざまなフレームワークが登場します。
最低限、使用する言語バインディングに対応したテストフレームワークが必要です。たとえば、.NET用のNUnit、Java用のJUnit、Ruby用のRSpecなどです。
テストフレームワークは、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つの使命は、より多くのボランティアがこの取り組みに参加することを奨励し、
強力なコミュニティを構築して、プロジェクトが新しいテクノロジに対応し続け、
機能テスト自動化の主要なプラットフォームであり続けることができるようにすることです。