これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.

このページの通常のビューに戻る.

概要

Seleniumはあなたに適していますか?さまざまなプロジェクトのコンポーネントの概要を参照してください。

Seleniumは単一のツールやAPIではなく、多くのツールから構成されています。

WebDriver

デスクトップまたはモバイルのウェブサイトのテスト自動化を始める場合は、WebDriver APIを使用します。 WebDriverは、ブラウザーベンダーが提供するブラウザー自動化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を使用して行うこともできます。どちらもホストシステム上のドライバーと通信します。

Selenium Gridを用いたリモート通信

フレームワークの位置づけ

WebDriverには、上記のいずれかの方法でブラウザと通信するという、ただ1つの役割があります。WebDriverはテストについて何も知りません。値を比較する方法も、成否をアサートする方法も、レポートや Given/When/Then の文法も知りません。

ここで、さまざまなフレームワークが登場します。 最低限、使用する言語バインディングに対応したテストフレームワークが必要です。たとえば、.NET用のNUnit、Java用のJUnit、Ruby用のRSpecなどです。

テストフレームワークは、WebDriverとテストに関連する手順の実行を担当します。 したがって、次の図のような構成だと考えることができます。

テストフレームワーク

上図では、Cucumberなどの自然言語を扱うフレームワーク/ツールが、テストフレームワークのボックスの一部として存在する場合があります。または、独自の実装の中でテストフレームワーク全体をラップする場合もあります。

2 - Seleniumを詳しく見る

Seleniumは、Webブラウザの自動化を可能にし、その自動化を支援する 多様なツールとライブラリを包含するプロジェクトです。

SeleniumはWebブラウザを制御します

Selenium にはさまざまな側面がありますが、その中核は、ブラウザインスタンスをリモートで制御し、 ユーザーとブラウザのやりとりをエミュレートするために利用可能な最良の技術を用いる、 Webブラウザ自動化のためのツールセットです。

Seleniumを使用すると、エンドユーザーが行う一般的な操作を シミュレートできます。フィールドへのテキスト入力、ドロップダウンの値やチェックボックスの選択、 ドキュメント内のリンクのクリックなどです。また、マウス移動や任意のJavaScriptの実行など、 ほかにも多数の機能を提供します。

Seleniumは主にWebサイトのフロントエンドテストに使用されますが、その中核は、 ブラウザのユーザーエージェントとして機能する ライブラリ です。 そのインターフェースは幅広い用途で利用でき、目的に合わせてほかのライブラリと 組み合わせることができます。

すべてを支配する1つのインターフェース

プロジェクトの指針となる原則の1つは、すべての(主要な)ブラウザ技術に共通のインターフェースを サポートすることです。Webブラウザは非常に複雑で、高度に設計されたアプリケーションであり、 まったく異なる方法で操作を実行しますが、実行中は同じように見えることがよくあります。 テキストは同じフォントで表示され、画像は同じ場所に表示され、リンク先も同じです。 水面下で起こっていることは、昼と夜と同じくらい異なります。 Seleniumはこれらの違いを「抽象化」し、コードを書く人からその詳細や複雑さを隠蔽します。 これにより、数行のコードを記述して複雑なワークフローを実行できますが、同じコード行は、 Firefox、Internet Explorer、Chrome、およびその他のサポートされているすべてのブラウザで 実行されます。

ツールとサポート

Seleniumの最小限の設計アプローチにより、より大規模なアプリケーションのコンポーネントとして 組み込める汎用性が得られます。Seleniumの傘下で提供される周辺インフラストラクチャは、 ブラウザのGridを構築するためのツールを提供し、 さまざまなマシン上の複数のオペレーティングシステムとブラウザでテストを実行できるようにします。

サーバールームやデータセンター内の多数のコンピュータがすべて同時にブラウザを起動して、 サイトのリンク、フォーム、テーブルにアクセスし、1日24時間アプリケーションをテストしていると 想像してください。最も一般的なプログラミング言語向けに提供されるシンプルな プログラミングインターフェースを介して、これらのテストは並列で休むことなく実行され、 エラーが発生するとユーザーに報告します。

ブラウザを制御するだけでなく、そのようなGridを簡単に拡張・展開できるようにするツールと ドキュメントをユーザーに提供することで、これを現実のものとするお手伝いをすることが目的です。

誰がSeleniumを利用するのか

世界で最も重要な企業の多くが、ブラウザベースのテストにSeleniumを採用しており、多くの場合、 他の独自ツールを使用した長年にわたる取り組みに取って代わっています。 人気が高まるにつれて、その要件と課題も増えてきました。

Webがより複雑になり、新しいテクノロジーがWebサイトに追加されるにつれて、可能な限りそれらに 遅れずについていくことがこのプロジェクトの使命です。オープンソースプロジェクトであるため、 このサポートは多くのボランティアからの惜しみない時間の寄付によって提供されます。 こうしたボランティアには全員、本業があります。

このプロジェクトのもう1つの使命は、より多くのボランティアがこの取り組みに参加することを奨励し、 強力なコミュニティを構築して、プロジェクトが新たに登場するテクノロジに対応し続け、 機能テスト自動化の主要なプラットフォームであり続けることができるようにすることです。