2008-12-16

4.seleniumを使ってみよう その①

短期集中seleniumシリーズの第4回目です。
この章では実際にseleniumを使ってみます。
今回使用したseleniumRCとseleniumIDEのバージョンは以下のとおりです。


selenium RC-Version 0.9.2
seleniumIDE-Version 1.0 Beta 2


4.1seleniumでテストコードを書く
seleniumCoreやseleniumRCだけを使って「さあ、テストコードを書いてみて」と言われると、初めてseleniumを使う人は戸惑ってしまうかもしれません。しかし、seleniumIDEを使えばその問題は解決できます。

seleniumIDEはテストケースを簡単に作成し、編集することができるので、プログラミングの知識がない人でもテストコードを記述することができます。

seleniumIDEを起動した上で、Webブラウザ上でテストを行いたい操作をすると、seleniumIDEが自動でseleniumCoreやseleniumRCのコードを生成・記録してくれます。

図1を見てください。

例えば、テストしたいページを開くと、「open /index.html/」、ページの「サービス」をクリックすると、「clickAndwait /link=サービス/」が自動で記録されているのがわかると思います。



図1.seleniumIDEで操作を記録する



seleniumIDEを起動してから、ブラウザ上で右クリックをすると、いろいろなコマンドが表示されます。
図2参照。




図2.右クリックをする



一通りの操作が終わったあと、seleniumIDEの「ソース」タブをクリックすると、HTMLで書かれたテストコードが表示されます。

今回はjava言語でテストコードを書いていきたいので、フォーマットをjavaに変えます。
「オプション→フォーマット」から、使用する言語を選択できます。
図3.参照。




図3.使用する言語の変更



あとはこのコードをEclipseの適切なテストケースファイルにコピー&ペーストすればテストケース作成は終了となります。


4.2おすすめのテストコード作成方法


4.1でseleniumIDEを使うと、とても簡単にテストコードが書けるといいましたが、実はseleniumIDEにも弱点があります。

  • locatorに複雑なxpathを使う癖がある。
  • 非同期処理があるときには、後でpauseやwaitForXxxを追加する必要がある。
  • ブラウザの「戻る」ボタンなどをクリックしても記録してくれない場合がある。


それなのでseleniumIDEだけを頼るということはあまりしないほうがいいと思います。

私がおすすめするテストコードを書く手順は「seleniumIDEでテストの骨格作り→Eclipseにコピー&ペースト→テストコードの修正」です。

4.3locatorの指定について

seleniumのテストコードを書くときのlocatorの指定はできるだけシンプルでわかりやすいほうがいいです。テストコードを複数人で作成し、修正を加えていく場合だと、どこの要素のテストをしているのかがわからないということが起こってしまいます。
また、自分でテストコードを書いた場合でも、seleniumでエラーが起きた場合、どこでエラーが起きているのかを判別するのが、大変になります。

locatorの指定はid名でしてしまうのが、一番シンプルな形です。HTMLでidを振っておけば、
id名だけで指定することができます。

○ assertTrue(selenium.isElementPresent(“id=idName”));
○ assertTrue(selenium.isElementPresent(“idName”));

しかし、idを振ってない要素のテストしなければならないこともありえます。そのような場合xpathを使って要素の指定をします。

xpathを用いると、idを指定するより、テストをするスピードが遅くなります。
また、xpathの指定の仕方もできるだけ簡単なものにしないと、どこのことを言っているのかわかりにくくなってしまいます。

Xpathでの指定例:

  • //div[@class='testdiv']         
    ・・・class名がtestdivというdiv要素
  • //a[contains(@href,'testdiv')]     
    ・・・href属性で、testdivという文字を含んでいるa要素←つまり一部わかっていれば指定ができる。
  • //table[@class='testtable']//tr[1]/td[2]/a
    ・・・class名がtesttableというtable要素の1行2列目にあるa要素

0 件のコメント:

コメントを投稿