SeleniumでjQueryを利用する
jQueryをSelenium内に取得する
Seleniumを使っていて、テストページ内要素をjQueryで指定したりしたい場合、テストページ内にjQueryを埋め込んだあと、Seleniumで「jQuery」にアクセスしてjQueryを取得します。
取得するには、まずwindowオブジェクトを取得し、Firefoxのバージョンによって「wrappedJSObject」を経由するか、直接取得できるかが異なるため、条件分岐で判定して取得するようにします。 取得したjQueryは利用しやすいように変数に格納します。
その後、取得したjQueryを使って要素にアクセスします。
以下のテストケースは、まずjQueryを取得して変数に格納した後、電話番号フォーム値が「090」になっているかどうかをチェックしています。
テスト対象要素
<input type="text" id="tel1" name="tel1" value="" />
テストコマンド
コマンド | 対象 | 値 |
---|---|---|
getEval | win = this.page().getCurrentWindow() | |
getEval | jq = (win.jQuery) ? win.jQuery : win.wrappedJSObject.jQuery | |
assertEval | jq(“#tel1”).val() | 090 |
ページ内に記述した関数の実行方法
wrappedJSObject経由でなければjQueryを取得できない場合、ページ内に記述した関数などもwrappedJSObject経由で呼び出す必要があります。
例えば、ページ内に記述したユーザー関数「addTelNumber」を呼び出したい場合は以下のようにwin変数にwindowオブジェクトを格納する時点でwrappedJSObjectの存在を判別して格納し、jQueryやユーザー関数の実行を記述します。
コマンド | 対象 | 値 |
---|---|---|
getEval | win = (this.page().getCurrentWindow().wrappedJSObject) ? this.page().getCurrentWindow().wrappedJSObject : this.page().getCurrentWindow() | |
getEval | jq = win.jQuery | |
getEval | win.addTelNumber() | |
assertEval | jq(“#tel1”).val() | 090 |
2011-11-24
2 件のコメント
いつも大変参考にさせていただいています。
wrappedJSObjectですが、FF3系では必要ですが、FF4系以上では不要ではないでしょうか。
また、この方法でjquery使用ができるようになりましたが、FF3系で、ページ内の関数を呼び出そうとすると、セキュリティマネージャーに拒否されます。
jqueryは実行できるのに何故ページ内関数は不可なのかが、謎です。
どりさん、アドバイスありがとうございました! 記事を修正致しました。
また、質問の件ですがFF3系でページ内関数を呼び出す場合もやはりwrappedJSObject経由で行う必要があるので、this.page().getCurrentWindow().wrappedJSObject.ユーザー関数() という形で実行すれば良いかと思います。 この件についても新たにこちらに追記しましたので参考にしていただければと思います。