miau's blog?

最近の Selenium

Selenium 周りでネタが溜まってきたので、ごっちゃり書く・・・つもりが、気がつくとすごい量になったので、やっぱり 2 回に分けて書きます。

まずは、
・最近の戦略とか
・Selenium RC 1.0 beta 2 で Test Suite が Not Found になる件
・CakePHP 用にアクションを追加
について。




■最近の戦略とか

○スクリプトを使わず Selenium IDE で

Perl や PHP から Selenium RC を呼び出したりして使っていたこともありますが、特にそうする必要がない場合は Selenium IDE でやってます。前の案件では結合テストから Selenium を使ってたんですが「こんな便利なら開発中の確認でも使えばよかった〜」と言われたので、今回の案件では開発中の動作検証から Selenium IDE で実施して、後半の結合テスト、シナリオテストにテストケースを流用しました。

気軽に導入できるので、それなりにうまく回った気がします。Selenium で凝ったテストを書こうとすると、XPath、正規表現、JavaScript といった知識が要求されるので、その辺りの学習にもちょうどいいですし。

○XPath のお供に

XPath Checker :: Firefox Add-ons

XPath でうまいこと要素を拾うために、Selenium IDE と一緒に入れておくべきプラグインです。

XPath使いのための日本語チートシート

最近はいいかげん慣れてきましたが、慣れないうちはよくこれ見てました。

○XPath はシングルクォート推奨で

テストケースも SVN で管理していますが、diff を見るときは plain text で見ることになるので、ダブルクォートを使うと

//a[@href = "/users/update/1"]/img/[@alt="更新"]

こんな感じでそれなりに見づらくなってしまいます。そんなわけでシングルクォート推奨でやってます。こういう風にルール決めておくと、一括置換もしやすいですし。

○Eclipse を使うときは拡張子を .xml で?

前の案件では、parse error になって鬱陶しかったので?(Java だったからエラーがあるとコンパイルできないとか?よく覚えてない・・・)拡張子を .xml にした覚えがあります。今回の PHP 案件では .html でいきましたが、一応頭の片隅に。

■Selenium RC 1.0 beta 2 で Test Suite が Not Found になる件

最近の話。Selenium RC で

java -jar selenium-server.jar -userExtensions scripts\user-extensions.js
-htmlSuite "*firefox" http://localhost tests\functional_test_suite.html result.html

とやってみると、左上のフレームに

Not Found

Error: The requested address '/selenium-server/tests/functional_test_suite.html'
was not found on this server.

なんてエラーが表示されて実行できないことがありました。

アドレスバーを見ると URL が

chrome://src/content/TestRunner.html?auto=true&multiWindow=true&defaultLogLevel=info
&baseUrl=http%3A%2F%2Flocalhost/selenium-server/tests/
&resultsUrl=http://localhost:4444/selenium-server/postResults
&test=http%3A%2F%2Flocalhost%2Fselenium-server%2Ftests%2Ffunctional_test_suite.html

になってて。最後のパラメータ(デコード済)が

test=http://localhost/selenium-server/tests/functional_test_suite.html

なのはおかしいような。http://localhost:4444 のほうから見ないとテストケース参照できないんじゃない?

この辺で苦労した覚えはないので、1.0 beta 2 特有の問題だと目星をつけてググってみると。

OpenQA: Selenium: Selenium RC Beta-2 Goodies and Gotchas(コメント欄)

>When you run java -jar selenium-server.jar and use the *chrome vs the *firefox option, you will get different URL's.

とのことで。-htmlSuite の第一引数で "*firefox" じゃなくて "*chrome" を使えば OK と。

ちなみにこの URL はこちら経由。1.0 beta 2 では multiWindows の挙動が違う等の情報もあり。

Selenium RC 1.0beta2で、multiWindowがデフォルトでtrueになっているが、Windows XP 上のFirefox3で動かない(*firefox指定時) - Enjoy*Study

Selenium AES、Selenium HTMLSuite Extension で、Selenium RC 1.0beta2に対応したものをSNAPSHOTとしてリリースしました - Enjoy*Study

■CakePHP 用にアクションを追加

一度 CakePHP のエラーが画面の下部くらいに出ていたことがあって。これを見落とすとヤバい、ということで user-extensions.js にこんな関数を追加。

Selenium.prototype.assertCakeDebugNotPresent = function() {
// search CakePHP debug output
var xpath;

xpath = "//pre[@class='cake-debug']";
var element = this.page().findElementOrNull(xpath);
Assert.equals(xpath + ' exists.', null, element);

xpath = "//div[@class='cake-stack-trace']";
var element = this.page().findElementOrNull(xpath);
Assert.equals(xpath + ' exists.', null, element);
};

CakePHP でエラーが出た場合に表示されそうな項目を探して、見つかった場合はエラーにしています。これを、各 assertTitle アクションの前で(要するに画面遷移直後に)呼び出すようにルール化。

本当は、

Selenium.prototype._getTitle = Selenium.prototype.getTitle;
Selenium.prototype.getTitle = function() {
// (上記の assertCakeDebugNotPresent の処理をここに)

// 元の処理を呼び出し
return this._getTitle();
};

みたいな感じで assetTitle アクションを上書きしたかったんだけど、うまくいかなかった。Selenium Core で使う場合は selenium-api.js を直接いじればうまくいくっぽいけど・・・他にいいやり方あるのかな?

あと user-extensions.js は便利なんだけど、Selenium IDE からフルパスで指定する必要があるのが面倒。Suite ファイル中で相対パス指定とかできればいいんだけど。

■その他 URL メモ

Home - Selenium - OpenQA Wiki

公式の Wiki です。Contributed User-Extensions のページに便利な拡張がたくさん載ってます。

SeleniumでJavaScriptを使う方法いろいろ(変数・関数などの利用)

仕組みを理解したい場合に。なんだか JavaScript がうまく動かないなー、ってときは名前空間が間違ってることが多かった。

Selenium RC + PHPUnitのしくみと使用法図解

こっちもついでに。Selenium RC 使い始めの頃に眺めてたので。

Help with XPath

Seleniu RC で XPath Checker や Firebug を使う方法?必要になるかもしれないのでメモ。

Source Code

Selenium の各ツールのリポジトリ。たまに Selenium のソースいじりたくなるのでメモ。
posted at 19:19:32 on 2009-04-14 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。