Selenium IDE Tips4

2010年10月14日

スペースが消える

 テスト項目で、「タイトルに半角、もしくは全角スペースのみが入力されたらエラー画面を表示」というのがあった。で、
<tr>
 <td>type</td>
 <td>title</td>
 <td> </td>
</tr>
とやって解決。だったんだが。。。。
テストケースを保存して、後日実行したらここでエラーで止まる。調べてみると半角と全角スペースが全部消えていた。あちこちでググってみるとどうやらIDEのバグらしい。さぁ、困った。${space}、${wspace}って変数にして、半角全角スペースを格納すればいいじゃんと
<tr>
 <td>store</td>
 <td> </td>
 <td>wspace</td>
</tr>
とやったがダメ。全部消されちゃう。で、思いついたのがjavascriptで定義する方法。
<tr>
 <td>storeEval</td>
 <td>' '</td>
 <td>wspace</td>
</tr>
<tr>
 <td>type</td>
 <td>title</td>
 <td>${wspace}</td>
</tr>
これで解決。ヤレヤレ。


トップ ▲

Selenium IDE Tips3

2010年10月10日

Xpath

No.タイトル配信日削除
1108タイトル12010-10-01
1109タイトル22010-10-01
1110タイトル32010-10-01
1111タイトル42010-10-01

こういうテーブルがあって、たとえば「タイトル3」を見つけて、その隣の「削除」チェックボックスをチェックしたいとき、XPathを使うことになる。
//text()[contains(.,'タイトル3')]/parent::node()/following-sibling::td[2]/input
タイトル3にマッチしたら、その親ノードに移動し「/parent::node()」、同じ階層の後ろの2つめのtdタグへ移動し「/following-sibling::td[2]」、それのinputタグへたどりつく、というもの。それをクリックすれば良いのでSeleniumでは
<tr>
 <td>click</td>
 <td>//text()[contains(.,'タイトル3')]/parent::node()/following-sibling::td[2]/input</td>
 <td></td>
</tr>
というテストケースになる。というわけでXPathを利用すればかなりいろいろなテストができそう。
今回はメルマガ配信システムなので、実際にメールアカウントをGmailへ登録しておき、Seleniumで自動配信されたメールが届いているかどうか、Gmailで確認することもできた。

Xpath 2

さらにテーブル要素の「配信日」でマッチしたら、その次の列の最初のtdの要素を変数に定義するにはこうする。Xpathは
//text()[contains(.,'配信日')]/parent::node()/parent::node()/following-sibling::tr[1]/td[1]
なので
<tr>
 <td>storeText</td>
 <td>//text()[contains(.,'配信日')]/parent::node()/parent::node()/following-sibling::tr[1]/td[1]</td>
 <td>id_no</td>
</tr>
Xpathで取得した値を変数に格納するにはstoreTextを使う。


トップ ▲

Selenium IDE Tips2

2010年10月10日

アスタリスクが使える

メルマガの登録画面、登録アカウントの数が表示されるかどうかの判断をしたい。
<tr>
 <td>velifyText</td>
 <td>*人</td>
 <td></td>
</tr>
とやっておけば何人だろうとクリアできる。

指定した文が無いことのチェック

<tr>
 <td>velifyNotText</td>
 <td>エラー</td>
 <td></td>
</tr>
とやれば、エラーという文が出てこないことをチェックできる。

javescriptの利用

メルマガの発行日を「本日+3日」にセットしたい。このための値を求めるにはjavascriptを使う。Seleniumでjavascriptを使う方法はこちらが詳しい。
というわけでjavascriptで記述。
javascript{
 dt = new Date();
 var baseSec = dt.getTime();
 var addSec = 3 * 86400000;
 var targetSec = baseSec + addSec;
 dt.setTime(targetSec);
 year3day =""+(dt.getFullYear());
 month3day =(dt.getMonth() + 1);
 day3day = ""+dt.getDate();
}
4日後だったら4 * 86400000、10日後だったら10 * 86400000にすればいい。
これをSeleniumに埋め込むにはgetEvalを使う。
<tr>
 <td>getEval</td>
 <td>javascript{dt = new Date();var baseSec = dt.getTime();var addSec = 3 * 86400000;var targetSec = baseSec + addSec;dt.setTime(targetSec);year3day =""+(dt.getFullYear());month3day =(dt.getMonth() + 1);}</td>
 <td></td>
</tr>
で、作った変数をセットするには
<tr>
 <td>setEval</td>
 <td>year3day</td>
 <td>year3day</td>
</tr>
<tr>
 <td>setEval</td>
 <td>month3day</td>
 <td>month3day</td>
</tr>
<tr>
 <td>setEval</td>
 <td>day3day</td>
 <td>day3day</td>
</tr>
とセットしておけばいつでも使える。


トップ ▲

Selenium IDE Tips1

2010年10月09日

 Selenium IDEはFIrefoxで動くブラウザテスティングツールだ。僕が初めて使った2009年はほどんど使い物にならなかった(テストケースが途中で止まりまくる)が、今では驚くほどいろんなことができるようになってる。Selenium IDEで作ったテストケースを、最終的にはSelenium RCでIEや他のブラウザでも動かせるようにしたい、という目論見。僕が担当しているのはメルマガの配信システムだ。
 まずはここでSelenium IDEをダウンロードする。こっちは正規版みたいだけど、これだと最新のFirefox3.6で動かない。
selenium01.gif
 FirefoxからSelenium IDEを起動するとこんなのが現れる。右上にある赤い録画ボタンを押してからブラウザ上で入力作業をやるとSelenium IDEのコマンドが記録されていく。基本的にはこうやってテストケースを作ってゆく。

assertTitle

画像は、ID=searchというテキストフォームに検索語「ツイッター」を入力、ID=buttonという検索ボタンをクリックすると、title=「検索結果」という画面に遷移するというテストケース。htmlだと、
<tr>
 <td>type</td>
 <td>search</td>
 <td>ツイッター</td>
</tr>
<tr>
 <td>click</td>
 <td>button</td>
 <td></td>
</tr>
<tr>
 <td>assertTitle</td>
 <td>検索結果</td>
 <td></td>
</tr>
っていう感じになるけど、これだとほぼ失敗する。まず、たいていサーバーの応答が遅かったりするのでテストケースのスクリプトの方がはるかに早い。assertTitleだとtitleを判定して「偽」であればそこで止まってしまう。なのでこれはverifyTitleに変更しておく。これでスクリプトは止まらなくなるけど、エラーとなるのは変わらず。で、
<tr>
 <td>pause</td>
 <td>3000</td>
 <td></td>
</tr>
というのを「click」の後に入れれると3000msec、要するに3秒ポーズしてくれる。ただしこれも万能ではないのでclickはclickAndWaitに変更するのが得策。なので、
<tr>
 <td>type</td>
 <td>search</td>
 <td>ツイッター</td>
</tr>
<tr>
 <td>clickAndWait</td>
 <td>button</td>
 <td></td>
</tr>
<tr>
 <td>verifyTitle</td>
 <td>検索結果</td>
 <td></td>
</tr>
これが正解。毎回毎回これに書き換えるのはかなりメンドーだけど仕方がない。

echo

テストケースが長くなってくると、一体テストパターンのどこなのだか全然わからなくなってくる。なのでechoを使って要所要所にコメントを入れておく。
<tr>
 <td>echo</td>
 <td>★管理者ログイン</td>
 <td></td>
</tr>

変数の活用

変数は
<tr>
 <td>store</td>
 <td>メルマガタイトル</td>
 <td>title</td>
</tr>
と定義しておけば
<tr>
 <td>echo</td>
 <td>${title}</td>
 <td></td>
</tr>
という感じにいつでも取り出せる。


トップ ▲

Selenium IDE

2010年10月06日

 ここんとこ一週間、Selenium IDEと格闘しっぱなし。いろいろわかってきたので、まとめてTIPS書くつもりです。


トップ ▲

Selenium IDE

2009年07月08日

 Selenium IDEってのをお勉強ちう。


トップ ▲