在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
。
答案 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。但是你怎么知道你需要哪个版本?希望即使版本发生变化,此过程也会起作用:
向下滚动到 Selenium Client& WebDriver语言绑定。
在该部分的 Ruby 语言行中,点击"更改日志" (direct link)。
在更改日志中,确定您的Firefox版本所需的Selenium版本。
如果您正在使用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。
如果你需要在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版本不兼容时会发生此错误。
有两种选择。
更新selenium:
gem update selenium-webdriver
如果仍然失败,那么selenium还没有更新到最新版本。
降级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)