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

76

在使用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


展示一个复现案例(如果它很大,请将其发布到gist.github.com)。 - Andrei Botalov
1
我们在周末遇到了这个问题,之前稳定的测试出现了异常,我们进行了一次捆绑更新来解决它。 - psugar
将浏览器默认更改为selenium-webdriver支持的Chrome版本,是否可以解决这个问题? - Panjiyar Rahul
我已经在这里发布了复现案例。https://gist.github.com/4536512 - Panjiyar Rahul
顺便说一句:你的gist是一个堆栈跟踪,而不是一个复现案例。 - pje
12个回答

89

我遇到了同样的问题(在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文件中以确保安全。

完全可行!非常感谢。我正在使用selenium-webdriver 2.34.0和firefox 19(我将23降级到了19,没有在FF 23上尝试),没有任何错误。 - ersentekin
没错,在OS X中,Firefox 22只是一直等待,直到最终测试超时并出现错误。 - Sarah Vessels
更新selenium-webdriver对我也起作用了。我在OSX 10.9上使用FF 26.0。只是想评论一下,因为我不需要降级FF就能使其正常工作。 - Stenerson
更新没有帮助,使用Firefox 36.0.4、Selenium WebDriver 2.45.0和Watir-WebDriver 0.7.0。 - Marcello Romani
5
这不应该是被批准的答案。https://dev59.com/uWYq5IYBdhLWcg3wpyRE#18263152 是更正确的答案。 - Dean Galvin
显示剩余3条评论

47

看起来Selenium Webdriver会经常更新以跟上Firefox的脚步。但是你如何知道需要哪个版本呢?希望这个步骤即使版本不同也能适用:

  1. 前往 http://www.seleniumhq.org/download/

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

  3. 在该部分中,单击Ruby语言行中的“变更日志”(直接链接)。

  4. 在变更日志中,确定您需要哪个版本的Selenium以配合您使用的Firefox版本。

如果您使用Bundler,请运行bundle show selenium-webdriver命令以查看当前安装的版本。要升级版本(例如到2.35.0),请将以下行添加到您的Gemfile文件:

gem 'selenium-webdriver', '2.35.0'

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

更新一篇StackOverflow回答表明,更改日志可能会比seleniumhq.org更早地在源代码库中更新。Ruby的存储库更改日志在这里: https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES.

降级Firefox

如果您需要在Ubuntu 12.04上降级Firefox,这个答案解释了如何回到Firefox 20。一个更一般的切换到任何Firefox版本的方法在这里给出。然后使用这个答案将Firefox更新保持不变,直到Selenium发布与较新版Firefox兼容的更新为止。

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


10
bundle update selenium-webdriver

9

在CI服务器上遇到了这个问题,发现是因为Firefox没有可用的显示器。我曾经认为selenium webdriver会自动解决这个问题,但事实并非如此。

加入Xvfb就可以解决这个问题。

对于运行Cucumber测试的Rails项目:

gem 'headless'

接着在features/support/env.rb文件中

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

    headless = Headless.new
    headless.start
  end
end

JavaScript中相当于features/support/env.rb的是什么? - Scott Stensland
不是很确定,但它是一个在所有测试开始之前被包含和运行的文件。 - Matt Gibson

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#`

1
我找到的最佳组合是Firefox 19.0和selenium web-driver 2.32.1(撰写时最新版本)。 Firefox 20.x和21.x不起作用。 我必须降级Firefox。 还要记住,在Mac OS上,如果您转到FireFox菜单->关于Firefox,它将自动升级到最新版本。 不要这样做。

1
如果以上方法不起作用,就像我的情况一样,请尝试以下方法。
我在一个机器上遇到了超时错误,而在另一个机器上没有。这两台机器都是运行完全相同版本的所有软件的瘦客户端。因此,不兼容的Firefox版本被排除在外(错误发生在一台机器上而不是另一台机器上)。
结果发现,headless使用的端口存在问题。有另一个进程正在使用该端口。
以下操作解决了我的问题:
.zshenv文件中添加以下行:
export XVFB_DISPLAY='new-port-number'
然后在终端中运行命令zsh以进行更改。

0

降级Firefox。

如果已经使用了gem 'headless',并且暂时不希望更新gems,那么您需要降级firefox。

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

删除Ubuntu最新版本中自带的Firefox

sudo apt-get purge firefox

你可以通过删除一些相关数据来进行补充,具体解释请参见这里

现在,安装一个旧版本的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

打开一个新的终端选项卡并运行你的cucumber specs/selenium specs。

现在你可以下载最新版本的Firefox,并在/usr/share/applications/中创建一个.desktop文件,以便从dock访问它。并让Selenium默认找到旧版本。参考此链接


0

对我来说,我已经更新了gems但是需要更新我的bundle。

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

cd D:\Projects\LazyAutomation
bundle update

0

对于使用 Vagrant 的任何人,如果您启用了 XServer,则 Firefox 可以正确启动,这对我解决了问题。vagrant ssh -- -X


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接