无法在60秒内获得稳定的firefox连接(127.0.0.1:7055)

时间:2013-01-13 11:53:01

标签: ruby-on-rails cucumber capybara selenium-webdriver rspec-rails

cucumber测试方案时,我在运行rspec测试时遇到以下错误

  
    

无法在60秒内获得稳定的firefox连接(127.0.0.1:7055)(Selenium :: WebDriver :: Error :: WebDriverError)

  

使用ruby (1.9.2) selenium-webdriver (2.27.2)firefox (19.0)

使用rspec-rails (2.12.1)capybara (2.0.2)和其他几个宝石,我还添加了launchy宝石,但它们似乎不是问题。我正在使用Windows 7

12 个答案:

答案 0 :(得分:87)

我遇到了同样的问题(在Linux上)。修正:

gem update selenium-webdriver

现在我使用的是ruby 1.9.3-p286,selenium-webdriver 2.29.0,firefox 18.0 以及rspec-rails 2.9.0,capybara 1.1.2和capybara-webkit 0.12.1

为了安全起见,我将selenium-webdriver 2.29.0添加到我的Gemfile中。

答案 1 :(得分:46)

似乎Selenium Webdriver经常更新以跟上Firefox。但是你怎么知道你需要哪个版本?希望即使版本发生变化,此过程也会起作用:

  1. 转到http://www.seleniumhq.org/download/

  2. 向下滚动到 Selenium Client& WebDriver语言绑定

  3. 在该部分的 Ruby 语言行中,点击"更改日志" (direct link)。

  4. 在更改日志中,确定您的Firefox版本所需的Selenium版本。

  5. 如果您正在使用Bundler,请运行bundle show selenium-webdriver以查看您拥有的版本。要更新,例如更新为2.35.0,请将此行添加到Gemfile

    gem 'selenium-webdriver', '2.35.0'
    

    然后运行bundle update进行安装。如果您正在使用Spork,请记住在重新运行测试之前重新启动它。

    <强>更新 一个StackOverflow answer表示更改日志可能在源代码存储库中比在seleniumhq.org更快更新。 Ruby的存储库更改日志位于:https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES

    降级Firefox

    如果你需要在Ubuntu 12.04上降级Firefox,this answer解释了如何回到Firefox 20.有关切换到任何版本Firefox的方法的更一般描述here。然后使用this answer暂停Firefox更新,直到Selenium发布适用于更高版本Firefox的更新。

    在我的情况下,我降级Firefox仅发现Selenium Webdriver最近已更新以处理最新版本,因此首先检查Selenium更新!

答案 2 :(得分:10)

bundle update selenium-webdriver

答案 3 :(得分:9)

刚刚在CI服务器上遇到此问题,发现这是因为Firefox没有显示器可供使用。我原以为selenium webdriver会让它无需进一步干预就可以工作,但事实并非如此。

将Xvfb添加到混音中使其工作。

对于运行Cucumber功能的Rails:

Before do
  if Capybara.current_driver == :selenium
    require 'headless'

    headless = Headless.new
    headless.start
  end
end

然后在features / support / env.rb

var data = $(this).closest("form").serialize();

答案 4 :(得分:3)

当selenium和firefox版本不兼容时会发生此错误。

有两种选择。

  1. 更新selenium:

    gem update selenium-webdriver

    如果仍然失败,那么selenium还没有更新到最新版本。

  2. 降级firefox的版本:

    sudo apt-get purge firefox

    查看可供下载的软件包 apt-cache showpkg firefox

    sudo apt-get install firefox=#older_version#

答案 5 :(得分:1)

对我有用的神奇组合是Firefox 19.0和selenium web-driver 2.32.1(在撰写本文时最新)。 Firefox 20.x和21.x无效。我不得不降级Firefox。还要记住(至少在Mac OS上),如果你去FireFox菜单 - &gt;关于Firefox,它会自动升级到最新版本。不要那样做。

答案 6 :(得分:1)

如果以上情况现在有效,就像在我的情况下一样,请试一试。

我在一台机器而不是另一台机器上得到了超时错误。这两台机器都是运行完全相同版本的瘦客户机。因此排除了不兼容的firefox版本(错误发生在一台机器而不是另一台机器上)

原来,无头使用的端口存在问题。还有另一个使用该端口的进程。

以下为我解决了这个问题:
.zshenv 文件中添加以下行 export XVFB_DISPLAY='new-port-number'
然后在终端中运行命令zsh以设置更改

答案 7 :(得分:0)

当我从一个我自己的终端向另一个用户启动irb时,我遇到了这个问题。当我作为该用户运行irb时,我会收到此错误。但如果我以root身份运行则不行。而不是当我退出到登录用户拥有的shell时。

答案 8 :(得分:0)

对我来说,我已经更新了宝石,但随后需要更新我的捆绑包。

在powershell中,导航到您的目录,然后更新捆绑包:

cd D:\Projects\LazyAutomation
bundle update

答案 9 :(得分:0)

对于使用Vagrant的任何人,如果你登录启用XServer,firefox可以正确启动,这为我解决了它。 vagrant ssh - -X

答案 10 :(得分:0)

降级Firefox。

如果目前不希望使用gem 'headless'并更新gem,则需要降级Firefox。

对于Ubuntu(但其他Linux发行版将非常相似),您应该:

删除Ubuntu最新版本随附的firefox

sudo apt-get purge firefox

您可以按照说明here

的方法来补充一些关联的数据

现在,安装旧版本的Firefox。对我来说,版本42.0  有效(因为我们的Travis.ci使用它)

$ export FIREFOX_SOURCE_URL='https://download.mozilla.org/?product=firefox-42.0&lang=en-US&os=linux64'
$ wget --no-verbose -O /tmp/firefox-42.0.tar.bz2 $FIREFOX_SOURCE_URL
$ tar xvC ~/. -f /tmp/firefox-42.0.tar.bz2
ln -s ~/firefox/firefox ~/bin/firefox

打开一个新的终端标签并运行您的黄瓜规格/硒规格。

您现在可以下载最新版本的Firefox,并在.desktop中创建一个/usr/share/applications/文件,以从扩展坞访问它。并让Selenium默认查找较旧的版本。 Take this for reference

答案 11 :(得分:-3)

按照ballPointPenguin的建议,我现在可以使用watir-webdriver来检索本地文件,或我本地apache install的htdocs目录中的文件,或者网上的文件:

1) file:///Users/me/jquery_programs/1.htm
2) 'http://localhost:8080/my.html'
3) 'http://www.google.com'

require 'watir-webdriver'

browser = Watir::Browser.new :firefox
browser.goto 'http://localhost:8080/my.html'

在更新之前,我收到了错误:

  

`connect_until_stable':无法获得稳定的firefox连接   60秒(127.0.0.1:7055)   (硒::的webdriver ::错误:: WebDriverError)