confirmダイアログのキャンセルが押せない病
そんなwatijのアンチクショウを触っておるワケですが、再びダイアログ系で躓きました><
まず躓いている最中のテストコード。
@Test public void test_2_confirmのCancelを押す() { class Clicker implements Runnable { IE ie; public Clicker(IE ie) { this.ie = ie; } public void run() { try { this.ie.button(SymbolFactory.id, "btn2").click(); } catch (Exception e) { ; } } } try { this.ie.start(TEST_PAGE); Thread t = new Thread(new Clicker(this.ie)); t.start(); Thread.sleep(500L); t = null; Thread.sleep(4000L); // this.ie.confirmDialog().cancel(); // this.ie.sendKeys(this.ie.confirmDialog().title(), " "); } catch (Exception e) { e.printStackTrace(); fail(); } }
btn2というidを振られたボタンは、confirmダイアログを表示させる為のトリガーにしています。
で、主のスレッドではないスレッドにこのボタンを押させ、主スレッドで表示されているであろうconfirmダイアログを押させるのですが、[this.ie.confirmDialog().cancel();]を用いると
watij.time.TimeException: Timeout exceeded. Reason= Could not find Dialog with windowClassName = Button windowText=Cancel
とエラーログが図れます><([this.ie.confirmDialog().ok();]だと問題なく使えます><)
続いて、[this.ie.sendKeys(this.ie.confirmDialog().title(), " ");](第二引数はタブと半角スペース)を用いると、confirmダイアログから親画面にフォーカスが移る、というありえない挙動に><
けっこう痛いトコロで挙動が不明瞭、というのはツライですね。今週暇をぬって何とかここを解決させられると良いのですが。。。
IEをテストするツール
watijをあれこれ試していると、「コンソールに出てくるログを気にしない」「WindowsVistaを使わないw」とすればJUnitでテストコードを書いてIEの画面をテストする事は可能っぽいです。
開発中のテストをこれでまかなおうとするのではなく、規定のテストコードを使ってテストするというイベントを毎晩実施する事で、たとえばColdFusionのようにコマンドラインから実行できない、ビルドというプロセスが開発のタームに存在しない環境でも、継続的インテグレーションは可能になるんじゃなかろうか、と。(僕の継続的インテグレーションの解釈が間違ってなければ・・・w)
ちょっと夢が膨らみますね。
夢が膨らんだので、CSV/Excel/HTML等のファイルフォーマットで一気にテストケースを記述して、それを一括して実行するツールをcfneoの支援ツールの1つとして開発中です。テストケースの記述は、Seleniumのリファレンスに則って作っていこうとしているので、SeleniumIDEでテストケースを作ったものをそのまま使えるようになるのがとりあえずのゴールですね。
昼間のお仕事が結構ヘビーな状態なのと、それ以外にも色々やりながらの開発なのでいつ完成するやら、って感じですが><