Hatena::ブログ(Diary)

spring_akiの日記 (開発メモなどさまざま)

2009-11-10 watij

watij

f:id:spring_aki:20091109235525p:image:left

webアプリケーションselenium を採用してからかなりの時間が経つが、やはりしっくりこない点が多く、IE では使いにくい。他に良いテスティングツールはないものかとをネットを探していたら、watij (ワットと発音?)なるものがあった。

IE で使うなら selenium よりも使い勝手が良さそう。試行錯誤の度合いも selenium を使うよりは少なかった気がする。

もちろん Alert や Confirm にも対応しており、子ウィンドウや webページダイアログにも対応している。ただし FireFoxOpera, Chrome などクロスブラウザで使う必要があり、FireFoxSelenium IDE など強力な Webオペレーション記録ツールが使用可能なら Selenium を利用する方がコストパフォーマンスは良いかもしれない。

今回は IE のみで動く 昔ながらのビジネスアプリケーションをテストする必要があったので Watij を採用する事にした。ネット上にドキュメントがかなり少ないようなので、つまずいた点や参考になりそうな点をつらづらと綴っていく。


参考サイト

ユーザーガイド

IE (Watij API) JavaDoc

覚えたことを忘れない為のメモ


ダウンロード

こちらから

zip解凍し、lib 配下の jar ファイルをすべて eclipse プロジェクトなどにコピーしておくのを忘れないように。

ダウンロードした zipファイルの中 (src/java-test/watij) に テストクラスがあるので、テスト方法がわからない場合は参考にすればよい。かなり参考になると思う。

使用方法

私の環境では beanShell はうまく動かなかった事と、Java 方が馴染みがある事と、どうせ Java Web アプリケーションをテストする為に使うので Java 技術者に広く展開できるように Java UI でのテストを試みる。

http://watij.com/ には

IE ie = new IE();
ie.start("http://www.google.com");
ie.textField(name,"q").set("Watij");
ie.button("Google Search").click();

のように書いてあるのだが name が解決できるわけがない。。

どうしてコレでみんなうまくいくのかが実はよくわからず。

自分なりの解決方法をで解決を試みる。*1

Symbol name = new AttributeFinder("name");

結局 Symbol が見つからないだけなので、上記のようにあらかじめ指定して解決。

(BeanShell ではこのままでうまくいったりするのでしょうか?これがよくわからないです。あくまでも例文はそれくらいわかるやろ的なある程度抽象化したコードだったのでしょうか?)


その他のシンボルはこのような感じで指定できる。

Symbol value = new AttributeFinder("value");
Symbol text = new TextFinder();
Symbol xpath = new XPathFinder();
Symbol tag = new TagFinder();
Symbol url = new UrlFinder();

スクリーンショット

ie.windowCapture("C:\\xxx\\yyy\\0000.png");
ie.windowCapture("./0000.png");

Aタグの href属性に記述された特定の文字列を探し、そのリンクをクリックする方法。

ie.link(xpath,"//A[contains(@href,'javascript') and contains(@href,'shop=00001') and contains(@href,'dept=DA0001')]").click();

例えば href="javascript('shop=00001','dept=DA0001','sex=female');" のように関数処理したりしている場合でもこのような指定で画面中の任意のリンクをクリックできる。

xpath文の記述中でHTMLタグは大文字で記述しないとelementの検索がうまくいかないので注意が必要。



※ 2010.04.09 追記

この問題は

import static watij.finders.SymbolFactory.*;

とする事で解決できる事を確認 ( Release 3.1.0にて確認済み。 )


*1:1.2010.04.09 追記