Selenium RCでTestRunnerのデフォルトの速度を設定する

Selenium RCを使ってテストを自動実行させるときに、ブラウザが自動的に起動してTestRunnerが実行されるのですが、この時、コントロールパネルにある速度調整のスライダーは、一番左にあって最速の設定になってしまいます。

これはバグだと思うのですが、Selenium IDEやCoreで実行するとすべて正常終了するのに、RCで実行するとwaitFor*コマンド等であるエレメントが認識されるまで待機するようにしてあげても、そのエレメントにアクセスした時点でそのエレメントが存在しないというようなエラーが発生する場合があります。この場合、TestRunnerの速度スライダーを手動で少し遅くしてあげれば、大抵の場合は、うまく通るようになるようです。それでも通らない場合は、本当にAjax等で何かを待たないといけない場合なので、waitFor*を入れてあげる必要があります。

で、毎回このスライダーを動かす手動操作が入るのは面倒なので、その速度を指定してやりたいのですが、どうも現時点では、RCのコマンドラインパラメータでは指定できないようです。リファレンスには、setSpeedというコマンドが使えるように書いてあるのですが、これを指定するとIDEでもRCでもエラーになってそこで止まってしまいます。さて、どうしようと思い、現時点では直接ソースをいじるしかないと思い、それでやっつけてしまったので、とりあえずメモしておきます。尚、これはSeleneseではなく、JavaやPerl等のプログラミング言語インターフェイスを介せば簡単にsetSpeed相当のコールが使えるはずです。

以下、手順です(jarコマンドを使うのでJDKが必要):

1. まず、selenium-server.jarファイルからcore/scripts/selenium-testrunner.jsというファイルを取り出します。

jar -xvf selenium-server.jar /core/scripts/selenium-testrunner.js

2. runIntervalという変数に値を代入している箇所を見つけます。このメモを書いている時点では、次の2箇所です。
2-1.

変更前:
var runInterval = 0;
変更後:
var runInterval = 100;

2-2.

変更前:
this.runInterval = 0;
変更後:
this.runInterval = 100;

この修正だけでも一応速度は落ちますが、スライダーの表示が左端にあるままなので、ちょっと気持ち悪いので、下記の場所を修正します(他にもオプションがあります。使用しているのはこちら)。

変更前:


objectExtend(HtmlTestRunnerControlPanel.prototype, {
initialize: function() {
this._acquireQueryString();

this.runInterval = 100;
...
this.speedController = new Control.Slider('speedHandle', 'speedTrack', {
range: $R(0, 1000),
onSlide: fnBindAsEventListener(this.setRunInterval, this),
onChange: fnBindAsEventListener(this.setRunInterval, this)
});

this._parseQueryParameter();
},
...

変更後:


objectExtend(HtmlTestRunnerControlPanel.prototype, {
initialize: function() {
this._acquireQueryString();


this.runInterval = 100;
...

this.speedController = new Control.Slider('speedHandle', 'speedTrack', {
range: $R(0, 1000),
sliderValue: 100,
onSlide: fnBindAsEventListener(this.setRunInterval, this),
onChange: fnBindAsEventListener(this.setRunInterval, this)
});


this._parseQueryParameter();
},
...

3. そしてこの修正したファイルでjarファイルの中身を置換します。

jar -uvf selenium-server.jar /core/scripts/selenium-testrunner.js

これで、毎回手動操作で速度を落とす必要はなくなります。これは、一番よくないハードコードの方法なので、もう少しSeleniumの内部構造がわかってきたらコマンドラインで指定できるように変更したいと思っています。

This entry was posted in インターネット, コンピュータ, 技術 and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *