2012年5月27日日曜日

[Selenium 2] Try & Error集

「window is null」例外対処法

確認バージョン:Selenium 2.2
ブラウザ:Firefox 4
対処法:バージョン上げる ※2.15以降検証済

見てお分かりの通り、かなり古いバージョンでのお話ですが…
コードを実行していたら、突然「window is null」的な例外が発生し、キャッチしてfinally節でWebDriver#close()してるのにブラウザ閉じないという現象に遭遇した。
残念ながら例外メッセージはメモが見つからなかったのでお見せできませんが(何分古いバージョンのお話なもので…)、以下みたいなのだったっけな…
Handling “Selenium (WebDriver) Exception: this.getWindow() is null” ~ Nishant Verma
org.openqa.selenium.WebDriverException: this.getWindow() is null

恐らくブラウザウィンドウの参照を見失ってアクセスできなくなったとかそんな感じの事なんでしょう。

発生原因は不明。ただ発生するページ・しないページがハッキリしていたので、ページ構造とかDOCTYPEとかが関係しているのかもしれない。
対処法は見つからず。ただバージョンを2.15に上げたら全く発生しなくなった。

リッチテキスト要素(iframe)スイッチ例外対処法

確認バージョン:Selenium 2.15・2.18
ブラウザ:Firefox 9
対処法:JavaScript使って入力

ブログの記事エディタのような所謂リッチテキストエディタへの文字入力で遭遇したトラブル。
エディタの実態はiframe要素だったので、定石に従って以下のように書いたら…例外発生。

発生した例外は確か以下(「確か」ですみません…)。
org.openqa.selenium.WebDriverException: Permission denied for to get property HTMLDocument.compatMode


発生原因は不明。「compatMode」とかあるので、これももしかしたらDOCTYPEが関係しているのかも(申し訳ないですが未検証)。
対処法は、JavaScriptでinnerHTMLプロパティセットするというNotスマートな方法しか見つからず。

ちなみにSeleniumバージョン2.2だと発生しませんでした。はいそうです、前述の「window is null」対処によるデグレです。

要素クリックでの「Permission denied」対処法

確認バージョン:Selenium 2.15・2.18
ブラウザ:Firefox 9
対処法1:リターンキー送出
対処法2:フォーカス(orマウスホバー)してからクリック ※効き目無い場合あり

ボタンやリンクを普通に「WebDriver#click()」したら発生。例外は前述のiframeのものと同じです。これも発生するページ・しないページはハッキリしていました。
対処法は以下の通り。

ちなみにこれもSeleniumバージョン2.2では発生しませんでした。


0 件のコメント: