如何调试在Jenkins构建中运行时失败的selenium请求规范(但是当作为规范手动运行时传递)

时间:2013-02-08 14:32:05

标签: firefox selenium jenkins jruby capybara

我有一个用rspec编写的请求规范,使用capybara:

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构建的一部分运行时,通过Ant调用rspec,"访问"命令触发以下错误:

    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插件,但这并没有什么区别(因为无头宝石应该管理为我启动Xvfb,所以不应该这样做)。我从错误消息中得到的印象是问题在于连接到Firefox。

我很感激有关如何调试此问题的任何建议。如果我在登录CI服务器时手动运行规范时可以重现错误,我只需添加" binding.pry"进入规范并使用pry控制台进行调试。不幸的是,只有当规范作为Jenkins构建的一部分运行时才会出现此错误。

对我的特定情况的建议会有所帮助,但我也非常感谢有关如何调试"无法获得稳定的firefox连接的建议"错误。有没有人遇到过这种问题,并找到了一种方法来收集更多关于错误的线索?

1 个答案:

答案 0 :(得分:0)

我在使用Selenium和Java时遇到了同样的问题。解决方案是使用WebDriver的TakesScreenshot函数在我的测试失败时截取屏幕截图并将其保存在Jenkins工作区的任何位置。然后你可以看到应用程序的状态。我不知道是否可以用Ruby和Capybara做到这一点?