SeleniumでjQueryを利用する
presented by 役に立つかもしれないBlog
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 |
このページに関連のある記事はこちら
- JavaScriptでDATETIME型の日付を得る方法
- JavaScriptで全角数字を半角数字に変換する方法(おまけつき)
- tableにjQueryのtoggleを使うと幅が100%に広がらない件
- JavaScript+Prototype.jsで右クリックメニューが作れる「Proto.Menu」
- jQueryでbit.lyと連携。短縮URLをTwitterに投稿してもらう方法
- JavaScriptで日付から「第○曜日」(何番目の曜日か)を調べる方法
- PhoneGapとAppleデベロッパーライセンスの同意事項について
- clickイベントが効かない人への処方箋(iPhone&jQuery)
- HTML5サイトを作らずにはいられない。「HTML5&API入門」
- リンクをクリックさせる前にJavaScript:confirmで確認する時の注意



いつも大変参考にさせていただいています。
wrappedJSObjectですが、FF3系では必要ですが、FF4系以上では不要ではないでしょうか。
また、この方法でjquery使用ができるようになりましたが、FF3系で、ページ内の関数を呼び出そうとすると、セキュリティマネージャーに拒否されます。
jqueryは実行できるのに何故ページ内関数は不可なのかが、謎です。
どりさん、アドバイスありがとうございました! 記事を修正致しました。
また、質問の件ですがFF3系でページ内関数を呼び出す場合もやはりwrappedJSObject経由で行う必要があるので、this.page().getCurrentWindow().wrappedJSObject.ユーザー関数() という形で実行すれば良いかと思います。 この件についても新たにこちらに追記しましたので参考にしていただければと思います。