カピバラを使用して、rspec で記述されたリクエスト仕様があります。
scenario "request for a page with js driver", :js => true do
visit "/foo" # redacted here, in my spec it's a legitimate URL
end
私の spec_helper.rb には次のものがあります。
Capybara.javascript_driver = :selenium
require 'spec/spec_test_helper.rb'
require 'headless'
headless = Headless.new
headless.start
at_exit do
headless.destroy
end
この仕様を CI サーバーで手動で実行すると、次のようになります。
bundle exec rspec spec/feature/sample_spec.rb
仕様は合格です。問題のマシンは Debian を実行し、Xvfb と iceweasel がインストールされています。すべて良い。
しかし、このマシンで Jenkins ビルドの一部としてこのスペックを実行すると、rspec を呼び出す Ant を介して、「visit」コマンドで次のエラーがトリガーされます。
unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055)
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/firefox/launcher.rb:79:in `connect_until_stable'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/firefox/launcher.rb:37:in `launch'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/firefox/socket_lock.rb:20:in `locked'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/firefox/bridge.rb:20:in `initialize'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver/common/driver.rb:31:in `for'
./.bundle/jruby/1.8/gems/selenium-webdriver-2.27.2/lib/selenium/webdriver.rb:67:in `for'
./.bundle/jruby/1.8/gems/capybara-2.0.2/lib/capybara/selenium/driver.rb:13:in `browser'
./.bundle/jruby/1.8/gems/capybara-2.0.2/lib/capybara/selenium/driver.rb:34:in `visit'
./.bundle/jruby/1.8/gems/capybara-2.0.2/lib/capybara/session.rb:183:in `visit'
org/jruby/RubyKernel.java:2080:in `send'
./.bundle/jruby/1.8/gems/capybara-2.0.2/lib/capybara/dsl.rb:51:in `visit'
私はすでにカピバラ、ヘッドレス、セレンウェブドライバーの最新の安定バージョンを使用しています。これは 1.8 モードの jruby-1.6.7.2 で実行されています。
Jenkins 用の Xvfb プラグインも使用してみましたが、違いはありませんでした (ヘッドレス gem が Xvfb の起動を管理する必要があるため、必要ありません)。エラー メッセージからの私の印象は、問題は Firefox への接続にあるということです。
この問題をデバッグする方法についてアドバイスをいただければ幸いです。CI サーバーにログインしているときに手動でスペックを実行したときにエラーを再現できる場合は、単に "binding.pry" をスペックに追加し、pry コンソールを使用してデバッグします。残念ながら、このエラーは仕様が Jenkins ビルドの一部として実行された場合にのみ発生します。
私の特定の状況に関するアドバイスは役に立ちますが、「安定したFirefox接続を取得できません」というエラーをデバッグする一般的な方法についてもアドバイスをいただければ幸いです. 誰かがこの種の問題に遭遇し、何が問題なのかについてより多くの手がかりを集める方法を見つけましたか?