SeleniumでJavaScriptの評価結果をパラメータとして利用できる

WEB+DB PRESS Vol.36Selenium徹底入門で初めて知ったのですが、JavaScriptの評価結果をパラメータとして使用できます。

コマンド 対象
type name javascript{'name_' + (new Date()).getTime()}

こうすると、'name_' + 現在時刻(1970年1月1日からの経過時間(ms))を入力文字として使用できます。
テストを実行するタイミングによって入力値を変えたい場合に有効です。


javascript{式}の構文は、eval(式)と同じイメージです。
ということで、複数行あった場合には、最後の行の評価結果が有効となります。

値に下記のような式を指定すると、(new Date).getTime()の結果が偶数ならば'a'、奇数なら'b'が返ります。
(下記は1行でも書けますが、いい例が思い浮かばなかったので…)

javascript{var num = (new Date).getTime(); num % 2 == 0 ? 'a' : 'b';}


また、式で書ける(特別な)ものとして、下記のようなものがあります。

this.browserbot.getCurrentWindow()

テスト対象のウインドウを参照したい場合には、this.browserbot.getCurrentWindow() から参照できます。
下記は、ドキュメントのタイトルを取得して使用する場合です。

javascript{'name_' + this.browserbot.getCurrentWindow().document.title}

this.page().findElement("指定したいElementLocator")

ElementLocatorを使ってウインドウ内の要素を参照できます。
idが"pass"のelementを値を参照する場合には、下記のように書けます。

javascript{this.page().findElement('id=pass').value}

storedVars['変数']

store*(storeValue、storeTextなど)で設定した変数は、storedVarsというMapに設定されるので、JavaScriptの式からも参照できます。

javascript{storedVars['pass'].toUpperCase()}


上記を試すのにあたって、下記のドキュメントを参考にしました。

ほんと、これに全て書かれていると思います。翻訳していただいたotaoさんに感謝!!