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でテストケースを作ったものをそのまま使えるようになるのがとりあえずのゴールですね。

昼間のお仕事が結構ヘビーな状態なのと、それ以外にも色々やりながらの開発なのでいつ完成するやら、って感じですが><