Seleniumすげえ。でもJavascriptのwindow.alertを拾えず??
ものすごく簡単に言うと「ボタン一発でコビトさんがブラウザ操作して画面のテストをしてくれる」みたいなツールであるところのselenium。すげえ!こりゃ便利!って思ってたら日本で話題になったのってもう半年くらい前かららしく、完全に乗り遅れ。
本格的にやるにはselenium coreとselenium RCとでテストコードもゴリゴリ書いたりしなきゃならないのだが、とりあえず画面操作を「録画」させて「再生」させるようなことだけならFirefoxにselenium IDE(日本語もOK)プラグインを入れるだけで可能なのでまだ使ったことの無い方はおためしを。
と、seleniumの紹介を書いたところで問題なのだが、
<html>
<h2>aaa</h2>
<script type="text/javascript">
window.alert('てーすと');
</script>
<h2>bbb</h2>
</html>
というHTMLな画面に対してselenium IDEでテストケースを書いてみたところ、
<tr> <td>open</td> <td>file:///D:/tmp/test.html</td> <td></td> </tr> <tr> <td>verifyTextPresent</td> <td>bbb</td> <td></td> </tr>というテストコードが吐かれたのだが、これを実行(再生)させてみると、 window.alertでポップアップするダイアログにOKボタンが自動では押されない。 しょうがないので手でOKボタンを押してみるとテストが続行される。 これじゃ自動テストにならんのでリファレンスみてstoreAlert()を差し込めばいいかな?いやちがう、なんて今やっているところで、うーむ。。。
テストがどうこうじゃなくてテスト対象の画面のHTMLの書き方(Javascriptの挟み込み方)がイケてないのでは?と言われるとそれもそうなのですが。
追記:
あ、リファレンスに、「Seleniumはページのonload()イベントハンドラによって作られれたJavaScriptアラートはサポートしていません。この場合は目に見えるダイアログが作成され、誰かが手動でOKをクリックするまでSeleniumは停止したままです。」なんてことが書いてあった。これか?
上のHTMLではonload()なんて書いてないけど、書き方から見て事実上onload()使ってるのと同じことだからそうなるということか?

コメント
この例だとページのロードの途中でalertが呼ばれるので、onloadが呼ばれるよりも前のタイミングになりますね。Seleniumはページのロードが完了したあとにalert関数などを置き換えて自動化できるようにするので、残念ながらこのような場合は現状ではテストできないです。
ロード直後にアラートを出したい場合で、アプリケーション側に手を入れられるのであれば、onload="setTimeout(function(){alert('hoge')}, 200)" (※タイムアウトの値は適当に調節してください)のようにしてalertを少し遅らせることでテストできるようにはなります。いまいちいけてないですが。
Posted by かさたに at 2007年1月 7日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)