Selenium RCをCentOS上のFireFoxで実行してみた

ぜんぜんテスト目的ではなくて、個人的な欲求のため、CentOSで動かしてみました。
ちょっと探したところ、FireFoxでは動かんぜ、みたいな話もあったんだけど、結論を言うと動きました。


ただ、すんなりとは動きませんでしたので、メモとして残します。
// JDKのインストールは省きます。
// 基本的に全作業をrootユーザで実行しています。
// CentOS 5.4、FireFoxは3.6(/usr/lib/firefox-3.6/firefox


(1)素材の準備
まず、ここでつまづきました。今日(3/2)の時点で最新ファイルは、

selenium-server-standalone-2.0b2.jar 

というファイルなのですが、これで起動すると時と場合によってうまく動かないことがあったので、ひとつ前のバージョンと思われるファイルをダウンロードします。

selenium-server-2.0b1.zip

たぶん、解凍すると

selenium-server-standalone-2.0b1.jar

というファイルがでてきますので、これでOKです。


(2)起動実験
まず適当に実行します。

java -jar selenium-server-standalone-2.0b1.jar -interactive

適当に起動すると思います。interactiveモードで起動してるので、コマンドを発行してくれみたいなメッセージがでてきたら、

cmd=getNewBrowserSession&1=*firefox /usr/lib/firefox-3.6/firefox&2=http://www.google.com

みたいなコマンドを発行すると、

Preparing Firefox profile...

という状態で、そのまま無言になります。これではどうにもならないので、いろいろ思考錯誤したところ、下記のようにすると動きました。

java -jar selenium-server-standalone-2.0b1.jar -interactive -firefoxProfileTemplate /root/.mozilla/firefox/Profileのディレクトリ名/

これで、Xの上で実行した場合は、FireFoxが起動してくれると思います。


(3)本当に起動
Xの上では実行できるようになりましたが、最終的には名のとおりリモート経由で実行したいわけです。
というわけで、少し小細工します。
まず仮想フレームバッファを使用します。
// すみません。詳しくは理解してません。

export DISPLAY="localhost:1.0"
/usr/bin/Xvfb :1 -screen 0 1024x768x8 &
java -jar selenium-server-standalone-2.0b1.jar -firefoxProfileTemplate /root/.mozilla/firefox/Profileのディレクトリ名/

とします。
これで、起動し外部からの接続を待ち受ける状態になりました。
デフォルトでは、4444ポートで待ち受けるのでクライアントからの接続を受け付ける状態にしておきます。


(4)接続実験
サーバ側のseleniumは問題ないので、次にクライアント側です。
僕は、JAVAを使いました。

selenium-java-2.0b2.zip

をダウンロードし、解凍してEclipseで全jarファイルをライブラリとして追加しました。

適当にクラスを作ります。

public class Test extends TestCase {
	public void test接続() throws Exception {
		String url = "http://対象のドメイン/";
		DefaultSelenium sel = new DefaultSelenium("Seleniumのサーバ", 4444, "*firefox /usr/lib/firefox-3.6/firefox", url);
		sel.start();
		
		sel.open("http://対象のドメイン/開きたいページ");
		sel.type("loginid", "ログインIDだよ");
		sel.type("password", "パスワードだよ");
		sel.click("//input[@value='ログイン']");
		sel.waitForPageToLoad("5000");
		
		System.out.println(sel.getTitle());
		System.out.println(sel.getHtmlSource());
		
		sel.stop();
	}
}

これで、実行すると不思議なことに、指定したページのタイトルと、htmlソースが表示されると思います。


(5)困ったとき

  • その1
Preparing Firefox profile...

で応答がなくなる場合は、起動時のオプションのfirefoxProfileTemplateでProfileディレクトリを指定するとうまくいくかも。

  • その2
java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String

selenium-server-standalone-2.0b2.jarを使っているからかも。selenium-server-standalone-2.0b1.jarを使うとうまくいくかも。
ちなみに、既知の問題ですでに修正済みらしいのですが、本日の段階ではまだだめでした。

  • その3
Preparing Firefox profile...
Launching Firefox...

で応答がなくなる場合は、

export DISPLAY="localhost:1.0"
/usr/bin/Xvfb :1 -screen 0 1024x768x8 &

を実行した後、実行するとうまくいくかも。

/usr/bin/Xvfb :1 -screen 0 1024x768x8 &

は一度実行すればよいと思われます。

  • その4

それでもだめな場合は、もうがんばるしかないです。起動オプションにデバックモードと、ログ出力を加えれば少し幸せな結果になるかもしれません。

java -jar selenium-server-standalone-2.0b1.jar -debug -log ./_selenium.log -firefoxProfileTemplate /root/.mozilla/firefox/Profileのディレクトリ名/

など。_selenium.logにログが出力されますので、眺めて変なものが出ていないか確認し、Google先生アンパンマン先生の助言を心にがんばります。