在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
.
我有同样的问题(在Linux上)。固定:
gem update selenium-webdriver
现在我使用ruby 1.9.3-p286, selenium-webdriver 2.29.0, firefox 18.0以及respect -rails 2.9.0、capybara 1.1.2和capybara-webkit 0.12.1
我添加硒webdriver 2.29.0到我的Gemfile是安全的。
似乎Selenium Webdriver经常更新以跟上Firefox。但是你怎么知道你需要哪个版本呢?希望这个过程即使在版本改变时也能正常工作:
-
进入http://www.seleniumhq.org/download/。
-
向下滚动到Selenium Client &WebDriver语言绑定。
-
在该部分,在Ruby语言行,单击"更改日志"(直接链接)。
-
在Change Log中,确定您的Firefox版本需要哪个Selenium版本。
如果您正在使用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更新!
bundle update selenium-webdriver
刚刚在CI服务器上遇到这个问题,发现这是因为Firefox没有显示可用。我曾认为selenium webdriver将使其工作而无需进一步干预,但事实并非如此。
在混合物中加入Xvfb使其有效。
对于Rails运行Cucumber的特性:
gem 'headless'
then in features/support/env.rb
Before do
if Capybara.current_driver == :selenium
require 'headless'
headless = Headless.new
headless.start
end
end
当selenium和firefox版本不兼容时,会出现此错误。
有两个选项
-
更新硒:
gem update selenium-webdriver
如果仍然失败,则说明selenium还没有更新到最新版本。
-
降级firefox版本:
sudo apt-get purge firefox
查看可供下载的软件包
apt-cache showpkg firefox
sudo apt-get install firefox=#older_version#
对我来说最神奇的组合是Firefox 19.0和selenium web driver 2.32.1(在撰写本文时是最新的)。Firefox 20。X和21。X不起作用。我不得不降级火狐浏览器。另外请记住(至少在Mac OS上),如果你进入FireFox菜单->关于FireFox,它会自动升级到最新版本。不要那样做。
如果上面的工作现在,像我的情况,给这个尝试。
我在一台机器上得到超时错误,而不是另一台机器。两台机器都是瘦客户机,运行所有东西的完全相同的版本。这样就排除了不兼容的firefox版本(错误发生在一台机器上而不是另一台机器上)
结果是headless使用的端口有问题。有另一个进程使用该端口。
下面为我修复了这个问题:
在中添加以下行。zshenv 文件export XVFB_DISPLAY='new-port-number'
然后在终端中运行命令zsh
来设置change
当我从一个终端启动irb时,我已经将自己susued到另一个用户。当我以那个用户身份运行irb时,我会得到这个错误。但如果我以root身份跑就不会了。当我退出到登录用户拥有的shell时就不会了。
对于我来说,我已经更新了gems,但接下来需要更新我的bundle。
在powershell中,导航到你的目录,然后更新bundle:
cd D:ProjectsLazyAutomation
bundle update
对于任何使用Vagrant的人,如果您登录启用XServer firefox可以正确启动,这为我解决了这个问题。
降级Firefox。
如果已经使用gem 'headless'
和更新gems是不可取的,那么你需要降级firefox。
对于Ubuntu(但其他linux发行版将非常相似),您应该:
删除Ubuntu最新版本自带的firefox
sudo apt-get purge firefox
您可以像这里解释的那样删除一些相关数据作为补充
现在,安装旧版本的Firefox。对我来说,是42.0版就像我们的特拉维斯。
$ 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在默认情况下查找旧版本。参考
在遵循ballPointPenguin的建议之后,我现在可以使用watir-webdriver来检索本地文件,或我本地apache安装的htdocs目录中的文件,或web上的文件:
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)