2013年4月29日月曜日

WebDriverでのalert(confirm)検知方法

WebDriverでのalertを検知する方法として、
switchToメソッドを使ってalertオブジェクトを取得する方法等が存在した。
しかしながら、この方法ではオブジェクトを取得するまでに一定時間待機してしまい
時間がかかりすぎてしまう。

先人の知恵を元に強制js書き換えを行うのが通例とされてきたが、2.32から
selenium自体がこの方法をラッピングしてくれた。


WebDriver driver = new ChromeDriver();
AlertOverride alertOverride = new AlertOverride(true);
alertOverride.replaceAlertMethod(driver);                //①

 ・
 ・
 ・
if(alertOverride.isAlertPresent(driver)){                                     //②
    String alertMsg = alertOverride.getNextAlert(driver);               //③
}
if(alertOverride.isConfirmationPresent(driver)){                          //④
    String confirmMsg = alertOverride.getNextConfirmation(driver);//⑤
}


①でwindow.alert、confirmを上書きし、内部バッファに溜め込むようにしている
②でalertが発生しているかどうか確認し、③でそのメッセージを取得している。
④、⑤も同様。

Jsの書き換えを行っているため、各画面を開くごとに実行する必要があるところが
注意点。WebDriverぐらい内部に保持して、いちいち引数に指定しなくて
いいようにしてほしいなと思う今日この頃。

alertやconfirmはスクリーンショットで取得できないので、実装ミスによる
alertが表示された場合、この方法をとらないとどんなメッセージが表示されたか
わからない。

JQueryのメッセージボックスを使用していて、alertやconfirmは使用していないという
場合は、あらいざらいこの方法ですくってやればいい。