footer;seleniumオブジェクトの参照は「this」でもOK?runScriptコマンドのような例外は除いて、通常はselenium空間の中でJavaScriptが実行されていますので、thisはseleniumオブジェクトのことを指します。getEvalコマンドなどでJavaScriptを実行する場合やassertEvalコマンドでチェックしたりする場合はthisが使えます。(runScriptコマンドでthisを使うと、テスト中のページのwindowオブジェクトを参照していることになるので注意してください。場合によっては便利なこともありますが。)以下の例はgetEvalコマンドでseleniumオブジェクトを取得するテストケースです。this;ページ管理オブジェクトを取得するseleniumオブジェクト内には、テストするページを監視するbrowserbotオブジェクトがあります。このbrowserbotオブジェクトの中にはテスト中のページのwindowオブジェクトを取り出したりdocumentオブジェクトを取り出したりできる便利な命令が入っているので、JavaScriptをテストケースに利用したい場合は事前に取得しておくと良いでしょう。以下の例はbrowserbot取り出し専用命令「selenium.page()」と、直接指定して取り出す「selenium.browserbot」指定方法の2種類を実行しているテストケースです。this」ですから、thisに置き換えても動作は変わりません。this.browserbot;JavaScriptでページ内のwindowオブジェクトを取得するSelenium実行中の空間では現在テスト中のページのwindowオブジェクトを「this.page().getCurrentWindow();」で取得することができます。selectWindowコマンドでテスト中のウィンドウを切り替えた場合は、変更後のwindowオブジェクトを返します。何度も使いそうな場合はgetEvalコマンドで事前に変数に入れておくと良いでしょう。以下の例は、現在テスト中のページのwindowオブジェクトを変数に格納しているテストケースです。this.page().getCurrentWindow();JavaScriptでページ内のdocumentオブジェクトを取得するテスト中のdocumentオブジェクトを取得する場合は、selenium空間内で「this.page().getDocument();」を使います。windowオブジェクトをgetCurrentWindow()で取得した後、通常通りdocumentオブジェクトを参照する方法もあります。以下の例ではdocumentオブジェクトを2種類の異なる方法で取得しています。this.page().getCurrentWindow().document;条件判断・待機JavaScriptの条件文と指定した値を比較する「assertEval」SeleniumでJavaScriptを使って条件判断を行う場合はassertEvalコマンドを使います。便利な命令で、事前に取得しておいた変数と現在の状況を比較する場合など、使いどころも多いかと思います。以下の例は、現在テスト中のdocumentオブジェクトを2通りの方法で取得して、同じものかどうかチェックするテストケースです。このテストケースは問題なく通ります。trueJavaScriptの実行結果が指定した値になるまで待つ「waitForCondition」waitForConditionコマンドはJavaScriptで条件を指定しておいて、それが指定しておいた値になるまで待機します。これも様々な場面で活躍してくれるコマンドで、例えば非同期データ通信のAjaxでデータを送信した場合に、受信が完了して画面が変わるまで待機させたり、自分が作成しておいたページ内のオブジェクトがある状態になるまでテストを待機させておいたりすることができます。以下のテストケースは、windowオブジェクトを取得(1)後、自作しておいたページ内のメッセージ管理オブジェクトにメッセージリストを読み込ませて(2)、読み込みが完了するのを待って(3)、メッセージが入っているかどうか(4)をテストする例です。true関数JavaScriptでページ内の関数を実行するページ内に作成しておいたJavaScriptカスタム関数を実行するには、ページのwindowオブジェクトを取得すれば簡単です。windowオブジェクトに事前に定義しておいた、データの数を取得する関数を呼び出すには以下のようにします。win.getDataCount();テストケース実行中に関数を作って実行する例えば、データを新規追加したあとで、本当に追加されたのかを確認したい場合など、処理実行前と実行後で結果がどう変わったかをテストしたいケースがありますね。いうときには事前にカスタム関数を作っておいてすぐに実行できるようにしておくと便利です。以下の例は、自作のデータコントローラーオブジェクトからデータの数を取得するための関数をテスト中に定義して、データ追加前と追加後で1増えたかどうかを確認するテストケースの例です。trueSeleniumに外部JavaScriptファイル(.js)を読み込んで関数を実行する外部JavaScriptファイルをSelenium内で利用する場合は以下の2つの方法があります。coreの指定フォルダの中にuser-extensions.jsファイルを配置する方法です。coreをインストールした場合は「C:selenium-corecorescripts」が該当フォルダになります。coreをインストールすると自動的に空っぽのファイルができていますので、これを編集するか、あるいは自分で独自に作成して置き換えればOKです。IDE上でテストを行っている場合は、テスト実行時に任意のJavaScriptファイルを利用することができます。coreが含まれています)。setAllLinksToBold();ログJavaScriptでログウィンドウにログを出力させる自分でもログウィンドウにログを出力させることができます。seleniumではテスト実行時にグローバルオブジェクト「LOG」が生成されます。exception()という関数群が用意されていますので、状況に応じて使ってみると良いでしょう。出力するログのレベルを調節できるsetBrowserLogLevelコマンドですが、テストケースに組み込んでもエラーが発生したので、どなたか調節方法がお分かりになればお教えくださいませ。LOG.exception()については何らかの例外処理と併せてぐらいでしか使わないかと思いますが、引数には文字列や数値、オブジェクトなど何でも指定できます。)が全て出力されます。膨大な量のメッセージが出力されます。サードパーティー製品との連携Selenium内でPrototype.jsを使うまず、テストページに事前にPrototype.jsが読み込まれている場合はwindowオブジェクトを取得して命令を実行することができます。src="path/to/js/prototype.js"></script>以下の例はIDが「myText」の要素をPrototype.jsの「Element.hide()」関数を使って非表示にし、実際非表示になっているかどうかを確認するテストケースです。myTextまた、Seleniumにはprototype.jsが組み込まれているので、selenium空間内で直接Prototype.jsの命令を呼び出すこともできます。$()などの要素参照命令についてはエラーになりますので、事前に「this.page().findElement()」関数などで要素を取得してから行うと良いでしょう。以下の例は、IDが「ok-button」のボタン要素を表示させて、実際に見える状態になっているかを確認するテストケースです。ok-buttonFireBugのコンソールウィンドウに変数内容を出力するFireBugのコンソールウィンドウに変数の内容などを出力する場合は、windowオブジェクトを取得して「console.log()」を使います。このconsole.log()関数はSeleniumに備わっている命令ではなく、FireBugをインストールすることで使えるようになる命令なので混同しないようにしてください。以下の例はページ内のJavaScriptで作成しておいたmyObjectインスタンスの内容をFireBugコンソールウィンドウに出力するテストケースです。コメントをキャンセルメールアドレスが公開されることはありません。Webサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。