第5回 Seleniumでのテストの記述方法 - テスト講座

PHP 中級 講座

TOM先生のテスト講座

Lecutures on PHP

第5回 Seleniumでのテストの記述方法 (その1)

 このエントリーをはてなブックマークに追加

Seleniumのテスト記述方法

前回のおさらいとしてSelenium CoreでのHTMLテーブルの構造をもう一度思い出してみましょう。

TOM先生

  • テストはHTML Tableで記述する
  • Tableは3つの列で構成される
  • 1行目はテストのタイトル(3列連結した状態で記述)
  • 2行目以降が実際のテスト
  • 1列目は実行するコマンド(command)
  • 2列目はコマンドのターゲット(target)
  • 3列目は値(value)
図1 HTMLテーブルの構造
 テスト名 
 command1  target1  value1 
 command2  target2  value2 
 command3  target3  value3 
    :        :        :    
 commandN  targetN  valueN 

Seleniumのテストが上記のような構造をしていることが理解できれば、後はどのようなコマンドがあるのかを覚えればいいだけです。

ではコマンドを覚えましょうといきたいところですが、その前にターゲットの記述方法を解説したいと思います。

ターゲットの記述方法

SeleniumではWebアプリケーションを実際に操作しているかのようにテストを行うことができるわけですが、それを記述するときに「何に対して操作するか?」ということを記述する必要があります。それがターゲットになります。

Webアプリケーションに対するテストで「何に対して?」ということをどのように記載するかというと、HTMLの中でこのラジオボタンとか、このリンクとか、このテキストエリアとかそういう指定をすることになります。

その指定方法は次の3つがあります。

  • (1) Element Locator
  • (2) Element Filter
  • (3) 文字列マッチングパターン

この中で感覚的にわかりやすいのが"(1) Element Locator"で次のようなパターンがあります。

  • (1) id
  • (2) name
  • (3) dom
  • (4) xpath
  • (5) link

なんか覚えることがたくさんあるなぁと思ったかもしれませんが、1つ基本ルールを守ることができればそんなに大変ではなくなります。

どうすれば簡単になるかというとHTMLの各要素にきちんとidを付与すればidでターゲットを指定することができるので、(1)の方法だけを覚えればよくなります。もちろんそれではダメな場合もあると思いますので、その場合はlinkやxpathやdomによる指定が必要になりますが、それらの方法については必要になったときに覚えていくということでいいのではないかと思います。

具体的にターゲットってどういうものになるの?というのは各コマンドと併せて覚えるのがいいと思いますので、コマンドの説明に移りましょう。

Seleniumのコマンド

コマンドには大きく分けると次の2つがあります。

  • Actionコマンド
  • Accessorsコマンド(Assertionコマンド含む)

(1) Actionコマンド

Actionコマンドはブラウザに対する操作をエミュレートするためのコマンドになります。今回はopenとclickの2つを紹介します。

  • openコマンド

TOM先生テストを開始する場合、テストをしたいWebアプリケーションにアクセスするところから始まることが多いと思いますので、まずはopenコマンドを覚えてみましょう。

openコマンドはSeleniumのWebアプリケーション動作領域のフレームにターゲットに指定したURLのページを開き、指定したURLのページが完全にロードされるまで待ちます。

テストがしたいWebアプリケーションが"/index.php"で動作する場合にはopenコマンドのターゲットにはこのURLを指定することになります。

図2 openコマンドの記述例
 open  /index.php             


  • clickコマンド

テストを進めていくときには、Webアプリケーションで表示されているページの各HTML部品にアクセスすることによって動作確認を進めることになると思うので、次にclickコマンドを覚えましょう。

clickコマンドを使えば、リンク、ボタン、チェックボタン、ラジオボタン等、HTMLとしてクリックできる部品のクリックをエミュレートできます。ターゲットにはクリックしたいHTML部品を指定します。

例えば次のようなHTMLがあったとします。

図3 テスト対象のHTMLファイル
<form method="post" action="http://xxx.jp/foo">
<input type="radio" id="yes" value="Yes">
<input type="radio" id="no" value="No">
<input type="submit" id="answer" name="answer" value="answer">
<a href="http://xxx.jp/bar">最初からやりなおし</a>
</form>

上記のHTMLに対してclickアクションを実行するには次のような形になります。

  • radioボタンのyesを選択したい場合のターゲットは"yes"(id="yes"というのを指定してるので)
  • radioボタンのnoを選択したい場合のターゲットは"no"(id="no"というのを指定しているので)
  • submitボタンをクリックしたい場合のターゲットは"answer"(id="answer"というのを指定しているので)
  • "最初からやりなおし"のリンクをクリックしたい場合のターゲットは"link=最初からやりなおし"

※ただし、submitボタンやリンクの場合はクリックした後のページが表示されるまで待つ必要があるので、clickコマンドではなくclickAndWaitを使うか、clickコマンドの後にwaitForPageToLoadコマンドを使用してください(バージョン0.7.0以降のバージョンではwaitForPageToLoadコマンドが追加されたのでそちらを使うこともできます)

図4 openコマンドの記述例
 click  yes             
 click  no             
 click  answer             
 click  link=最初からやりなおし             

そのほかにも便利なActionコマンドがありますので、以下のページでご確認ください。

Selenium リファレンスガイド(日本語版)
http://wiki.openqa.org/display/SEL/Selenium+0.7+Reference+(Japanese)



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)