私は自分のウェブサイトをテストするために Selenium を使用しています。Firefox を使用して URL を開き、ログインしてページでいくつかのことを行い、ログアウトして Firefox をシャットダウンします。これはすべて Windows 7 でうまく機能します。コードは次のように始まります。
WebDriver driver = new FirefoxDriver();
driver.get(URL);
ここで、iceweasel を搭載した Debian lenny を実行する Linux ボックスに jar をデプロイしました。cron ジョブは、Firefox を開こうとすると次のエラーをスローするプログラムを開始します。
org.openqa.selenium.firefox.NotConnectedException: 45000 ミリ秒後にポート 7055 でホスト 127.0.0.1 に接続できません。Firefox コンソール出力: エラー: ディスプレイを開けません: :0 エラー: ディスプレイを開けません: :0
org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:106) で org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:244) で org.openqa.selenium.remote.RemoteWebDriver (RemoteWebDriver.java:110) org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:190) org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:183) org.openqa.selenium .firefox.FirefoxDriver.(FirefoxDriver.java:179) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:92) at auth.Authenticator.authenticate(Authenticator.java:15) at reader.ReaderThread.run( ReaderThread.java:67) org.openqa.selenium.WebDriverException: ポート 7055 でバイナリ FirefoxBinary (/usr/bin/firefox) に接続できませんでした。プロセス出力は次のとおりです: エラー:
ビルド情報: バージョン: '不明'、リビジョン: '不明'、時刻: '不明' システム情報: os.name: 'Linux'、os.arch: 'i386'、os.version: '2.6.26-2- 686'、java.version: '1.6.0_26' ドライバー情報: driver.version: FirefoxDriver at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:118) at org.openqa.selenium.firefox. org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:110) の FirefoxDriver.startClient(FirefoxDriver.java:244) org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:190) の org.openqa .selenium.firefox.FirefoxDriver.(FirefoxDriver.java:183) org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:179) org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:92) auth.Authenticator.authenticate(Authenticator.java:15) で、reader.ReaderThread.run(ReaderThread.java:67) で
ボックス内で Xvfb を正常に実行し、変数 DISPLAY を 0 に設定しました。検索しましたが、解決策 (env 変数の設定など) はどれも機能しませんでした。
XVfb は、ブラウザが起動して必要なアクションを実行する非グラフィカル環境として機能するはずではありませんか? 起動を妨げているのは何ですか?
最新の Selenium バージョン 2.31 と Firefox 3.0.6 Iceweasel を使用しています。
編集: Firefox 14 に更新しても、同じ問題が発生します。タイムアウト制限を 60 秒に引き上げました。
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
解決済み: xvfb ラッパーで実行すると、次のように xvfb-run が実行されます。
export DISPLAY=:0.0
xvfb-run --auto-servernum --server-num=0 nohup java - jar X.jar