2015年2月26日木曜日

JenkinsでSeleniumを動かしたときに「Firefox console output: Error: no display specified」が発生する

株式会社Pro-SPIRE エンジニアリングサービス事業部の相川です。

CentOS 6.6に立てたJenkinsでSeleniumを動かすと以下のようなエラーが発生しました。
「mvn test」コマンドでFirefoxDriverを動かしたときに、CentOS上のブラウザが立ち上がらずにテストが終了してしまったときのエラーです。

org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: Error: no display specified Error: no display specified at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:106)


ブラウザが検出できませんといわれてしまいました。

今回は、そのときに私が行った対処法についてのお話です。

動作環境はこのようになっています。

  • VirtualBox 4.3.22
  • CentOS 6.6.64bit版
  • Jenkins 1.596
  • Firefox 31.4.0
  • Selenium 2.43.1

CentOS上で、Firefoxが正常に起動できることを確認しました。

Linux系のOSでSelenium WebDriverを動かすときは、
環境変数DISPLAYに有効なディスプレイを指定する必要があるということで、
以下のコマンドを叩いて指定しました。

---------------------------------------------------------------------------
$ export DISPLAY=:0
---------------------------------------------------------------------------

次にJenkinsにやらせたいことを手動で実行してみます。

---------------------------------------------------------------------------
$ mvn test
---------------------------------------------------------------------------

テストが開始され、ブラウザが立ち上がり、実行完了を確認しました。


手動では問題無く動作したため、
Jenkins上で動作確認を行います。

Jenkinsを起動し、ジョブの設定で、
「前処理」で「シェルの実行」を選択し、
テキストボックス内に「export DISPLAY=:0」と入力します。
そしてビルドのゴールに「clean test」としました。

これで、Jenkinsのビルド実行を行ったところ、ブラウザが立ち上がらずにConsol Outputに冒頭のエラーが出力されていました。

ここで、Jenkinsの起動方法を変えてみました。

---------------------------------------------------------------------------
$ service jenkins start
---------------------------------------------------------------------------

上記serviceコマンドで実行していたのを、

---------------------------------------------------------------------------
$ java -jar jenkins.war
---------------------------------------------------------------------------

で.warファイルを実行してみました。
(.warファイルは「/usr/lib/jenkins」にありました。)

そしてserviceコマンドのJenkinsとまったく同じ設定にしてジョブ実行をしたところ。。

うまくいきました!!

その後に色々と調べてみると、
どうやらserviceコマンドの特性に原因があったようで、DISPLAY値を読み取られていないようでした。

今回、私が取った対策はあくまで数あるうちの一つの対策に過ぎないかもしれません。
ですが、同じ状況で躓いている方の助けになれば幸いだと思います。

以下、参考にさせていただいたサイトです。


デーモンの起動・終了にはserviceコマンドを利用しよう
※上記のリンクは外部サイトが別ウィンドウで開きます。

Selenium No Display Specified
http://blog.markshead.com/392/selenium-no-display-specified/
※上記のリンクは外部サイトが別ウィンドウで開きます。

0 件のコメント:

コメントを投稿