Seleniumでグローバルな値を扱う

Seleniumにはstoreという一種の変数の仕組みがあって、

store value1 key1
type textElement ${key1}

と書くとtextElementには'value1'という値が入る。

ただ、storeを使った場合、同一のケースでしか変数にアクセスすることができない。
どこのケースでも共通であるグローバル変数が必要になる場合どうするか。

  • storeGlobalを使う

こちらのstoreGlobalを使えばどのケースからも参照できるようになる。

storeGlobal global_value1 global_key1

という感じに使えて便利。詳しくはリンク先参照。

  • resetを拡張する

storeGlobalは便利だがグローバル変数定義のケースを一番最初に流すという制約がついてしまう。
なので、途中からケースを流したい場合に結構不便。


そこで、storeGlobalを使うのをやめて、下記の記述をuser_extensions.jsの一番下に書いてやる。

user_extensions.js

Selenium.prototype.reset = function() {
    storedVars = new Object();
    storedVars['global_key1'] = 'global_value1'
    this.browserbot.selectWindow("null");
};


こうすると全てのケースで${global_key1}にアクセスできるようになる。
もちろん途中からのケースにも対応可能。
Shouta