2

我有一个用 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 构建的一部分在这台机器上运行时,通过调用 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'

我已经在使用最新的稳定版本的 capybara、headless、selenium-webdriver。这是在 jruby-1.6.7.2 上以 1.8 模式运行的。

我也尝试过为 Jenkins 使用 Xvfb 插件,但这并没有什么不同(并且不应该需要,因为无头 gem 应该为我管理启动 Xvfb)。我对错误消息的印象是问题出在连接到 Firefox 上。

我将不胜感激有关如何调试此问题的任何建议。如果我可以在登录 CI 服务器时手动运行规范时重现错误,我只需将“binding.pry”添加到规范中并使用 pry 控制台进行调试。不幸的是,此错误仅在规范作为 Jenkins 构建的一部分运行时发生。

针对我的特殊情况的建议会有所帮助,但我也很欣赏有关如何调试“无法获得稳定的 Firefox 连接”错误的建议。有没有人遇到过这种问题,并找到了一种方法来收集更多关于问题所在的线索?

4

1 回答 1

0

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

于 2013-06-08T04:57:33.957 回答