Selenium の基礎

スタートガイド – 目的に合った Selenium ツールの選択

ほとんどのユーザーは Selenium-IDE を選択しています。ドキュメントチームもこの選択肢を推奨します。Selenium-IDE を使えば、Selenium のコマンドにも早く慣れることができます。始めて作るスクリプトもほんの数分で開発できます。Selenium-IDE はインストールも簡単です。詳細については、 Selenium-IDE に関する章 を参照してください。

自分で作成したスクリプトを Selenium-IDE から実行することもできます。Selenium-IDE を使う方法は簡単なので、技術的なことにあまり関心がないユーザーはこの方法を使うとよいでしょう。Selenium-IDE を使えば、Selenium-RC で必要とされるようなプログラミングのスキルがなくても、テストを開発して実行することができます。Selenium-IDE は、契約社員などにテスト自動化を教育する方法としても、たいへん優れています。人手による Web サイトのテストの実行方法を理解できるユーザーなら誰でも、Selenium-IDE を使ってテストを実行したり開発したりする方法に移行することができます。

ただし、テスト作業の内容によっては、複雑すぎて Selenium-IDE では対応できないことがあります。プログラミングロジックが必要とされる場合には、Selenium-RC を使わなければなりません。たとえば、反復を行うあらゆるテストがそうで、要素数が可変のリストの各要素に対してテストを実行する場合には、スクリプトをプログラミング言語から実行する必要があります。Selenium-IDE は反復文や条件判定文をサポートしていません。

最後に、Selenium-IDE と Selenium-RC ではなく、Selenium-Core を使ってテストを実行する方法もあります。この場合、HTML インタフェース TestRunner.html を使って、Web ブラウザからテストスクリプトを実行することができます。もともと Selenium では、この方法を使って Selenium コマンドを実行していました。ただし、この方法には制限もあって、Selenium-IDE 同様、反復はサポートされていません。

また、Selenium-Core は HTTP プロトコルと HTTPS プロトコルを切り替えることができません。Selenium-IDE と Selenium-RC が開発されてからは、Selenium-Core に代えてこれらのツールを使うユーザーが増えています。このドキュメントの執筆時点 (2009 年 4 月) では、Selenium-Core を利用することは依然可能で、ユーザーによっては使うと便利かもしれません。ただ、Selenium コミュニティでは Selenium-IDE と Selenium-RC をユーザーに勧めていて、Selenium-Core の使用は推めていません。Selenium-Core のサポートも得にくくなっており、近い将来、Selenium-Core は非推奨となるかもしれません。

Selenium のコマンドについて

Selenium のコマンド – Selenese

Selenium にはコマンドが豊富に用意されており、事実上、想像しうる限りのあらゆる方法で Web アプリケーションを徹底的にテストすることができます。Selenium のコマンドはしばしばまとめて selenese と呼ばれます。これらのコマンドは実質的にテスト用言語とも呼べるものです。

selenese では、HTML タグに基づいて UI 要素の存在をテストできるほか、特定のコンテンツ、リンク切れ、入力フィールド、選択リストのオプション、提出フォーム、テーブルのデータなどをテストすることができます。また、Selenium のコマンドは、ウィンドウサイズ、マウス位置、警告、Ajax 機能、ポップアップウィンドウ、イベント処理、その他多くの Web アプリケーション機能のテストをサポートしています。利用可能なすべてのコマンドの一覧については、コマンドリファレンスを参照してください (SeleniumHQ.org にあります)。

command とは、何をすればよいかを Selenium に指示するものです。Selenium のコマンドには、 アクションアクセサアサーション の 3 つの “フレイバー” があります。

  • アクション は、一般にアプリケーションの状態を操作するコマンドです。たとえば、「このリンクをクリックする」、「このオプションを選択する」といったことを実行します。アクションが失敗するか、またはエラーになった場合は、現在のテストの実行が中止されます。
多くのアクションは、”clickAndWait” のように、”AndWait” サフィックスを付けて呼び出すことができます。このサフィックスは、指定されたアクションによってブラウザがサーバーへの呼び出しを行うために、ページが読み込まれるまで待機する必要があることを Selenium に指示します。
  • アクセサ はアプリケーションの状態を調べて、結果を “storeTitle” などの変数に格納します。アクセサは、アサーションを自動生成するためにも使われます。

  • アサーション はアクセサに似ていますが、アプリケーションの状態が期待値に対応するかどうかを検証します。たとえば、「ページのタイトルが X であることを確認する」、「このチェックボックスがオンになっていることを検証する」などです。

    Selenium のすべてのアサーションは、”assert”、”verify”、および “waitFor” の 3 つのモードで使用できます。たとえば、”assertText”、”verifyText”、および “waitForText” を実行できます。”assert” が失敗すると、テストは中止されます。”verify” が失敗すると、失敗が記録され、テストは続行されます。このため、 1 つの “assert” で、アプリケーションが目的のページを表示していることを確認し、これに続く一連の “verify” アサーションで、フォームのフィールドの値やラベルなどをテストすることができます。

    “waitFor” コマンドは、一定の条件が真になるまで待機します (Ajax アプリケーションをテストするのに便利です)。”waitFor” コマンドは、指定された条件がすでに真ならば、即座に成功します。一方、現在のタイムアウト設定 (あとの setTimeout アクションを参照) 時間内に条件が真にならない場合には失敗し、テストは停止されます。

スクリプトの構文

Selenium のコマンドはシンプルで、次のようにコマンドと 2 つのパラメータから構成されます。

verifyText //div//a[2] Login

パラメータは常に必要なわけではなく、必要かどうかはコマンドによって異なります。パラメータを 2 つとも必要とするコマンドもあれば、1 つしか必要ないコマンドもあり、パラメータをまったく取らないコマンドもあります。次に例を示します。

goBackAndWait    
verifyTextPresent   Welcome to My Home Page
type id=phone (555) 666-7066
type id=address1 ${myVariableAddress}

各コマンドのパラメータの要不要については、コマンドリファレンスに説明があります。

パラメータの内容はさまざまですが、一般には次のいずれかです。

  • ページ内の UI 要素を特定する ロケータ
  • 期待されるページコンテンツを検証またはアサートする テキストパターン
  • 入力フィールドにテキストを入力したり、リストからオプションを選択したりするための テキストパターン または Selenium 変数

ロケータ、テキストパターン、Selenium 変数、およびコマンドそれ自体については、Selenium のコマンドに関する章で詳しく取り上げています。

Selenium-IDE から実行される Selenium スクリプトは、HTML テキストファイル形式で保存できます。この場合、スクリプトは 3 列の HTML テーブルから構成されます。最初の列で指定されているのは Selenium のコマンド、2 列目は対象、最後の 3 列目には値が入ります。選択されたコマンドによっては、2 列目と 3 列目に値が入っている必要はありませんが、列そのものは存在している必要があります。テーブルの各行は、新しい Selenium コマンドを表します。次に示すのは、ページを開き、ページのタイトルをアサートし、ページ上のコンテンツを検証するテストの例です。

<table>
    <tr><td>open</td><td></td><td>/download/</td></tr>
    <tr><td>assertTitle</td><td></td><td>Downloads</td></tr>
    <tr><td>verifyText</td><td>//h2</td><td>Downloads</td></tr>
</table>

ブラウザでテーブルとして描画されると、次のように表示されます。

open   /download/
assertTitle   Downloads
verifyText //h2 Downloads

Selenese HTML 構文を使えば、プログラミング言語の知識がなくてもテストを記述して実行することができます。selenese と Selenium-IDE に関する基本的な知識があれば、テストケースを簡単に作成して実行できます。

テストスイート

テストスイートは複数のテストの集まりです。テストスイートに含まれるすべてのテストを連続したバッチジョブとして実行する場合も多いでしょう。

Selenium-IDE を使っている場合には、テストスイートもシンプルな HTML ファイルを使って定義できます。構文もシンプルです。HTML テーブルでテストのリストを定義し、テーブルの各行で各テストへのファイルシステムパスを定義します。次に示す例を見れば一目瞭然でしょう。

<html>
<head>
<title>Test Suite Function Tests - Priority 1</title>
</head>
<body>
<table>
  <tr><td><b>Suite Of Tests</b></td></tr>
  <tr><td><a href="./Login.html">Login</a></td></tr>
  <tr><td><a href="./SearchValues.html">Test Searching for Values</a></td></tr>
  <tr><td><a href="./SaveValues.html">Test Save</a></td></tr>
</table>
</body>
</html>

このようなファイルを用意すれば、Selenium-IDE からすべてのテストを次から次へとまとめて実行することができます。

Selenium-RC を使う場合でも、テストスイートの保守は可能です。これはプログラミングによって行うもので、さまざまな方法で実現できます。一般に、Java で Selenium-RC を使う場合には、テストケースの保守に JUnit が使われます。また、C# を言語に選択している場合には、Nunit を使用できます。Selenium-RC で Python などのインタープリタ言語を使っている場合には、簡単なプログラミングを行って、テストスイートをセットアップすることになります。しかし、Selenium-RC を使う理由は、テストでプログラミングロジックを使うためですから、簡単なプログラミングを行うことはほとんどの場合、問題にはならないでしょう。

よく使われる Selenium のコマンド

Selenium についての紹介を終える前に、よく使われる Selenium のコマンドを示しておきましょう。以下に示すのは、テストを作成するのに最もよく使われるコマンドです。

open
指定された URL を使ってページを開きます。
click/clickAndWait
クリック操作を実行します。また、新しいページが読み込まれるまで待機します。
verifyTitle/assertTitle
期待されるページタイトルを検証します。
verifyTextPresent
期待されるテキストがページ上にあるかどうかを検証します。
verifyElementPresent
HTML タグで定義されるとおりの期待される UI 要素がページ上にあるかどうかを検証します。
verifyText
期待されるテキストとこれに対応する HTML タグがページ上にあるかどうかを検証します。
verifyTable
テーブルの内容が期待されたものかどうかを検証します。
waitForPageToLoad
期待される新しいページが読み込まれるまで実行を一時停止します。clickAndWait が使われたときに自動的に呼び出されます。
waitForElementPresent
HTML タグで定義されるとおりの期待される UI 要素がページ上に現れるまで、実行を一時停止します。

まとめ

以上で Selenium についての紹介を終えたので、もうスクリプトの作成を始める用意ができたことになります。実際にスクリプトを作成するには、Selenium-IDE と右クリックで表示されるコンテキストメニューを利用するとよいでしょう。この方法を使えば、よく使われる Selenium のコマンドにもすぐに慣れることができ、シンプルなスクリプトなら 1-2 分で作成できるはずです。次の第 3 章では、Selenium-IDE の使い方とそのすべての機能について説明します。