在 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)
和其他几个 gem,我还添加了 launchy
gem,但它们似乎不是问题。我正在使用 Windows 7
。
我有同样的问题(在 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 似乎经常更新以跟上 Firefox。但是你怎么知道你需要哪个版本?希望即使版本更改,此过程也能正常工作:
访问 http://www.seleniumhq.org/download/。向下滚动到 Selenium 客户端和 WebDriver 语言绑定。在该部分的 Ruby 语言行中,单击“更改日志”(直接链接)。在更改日志中,确定您的 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。
降级 Firefox
如果您需要在 Ubuntu 12.04 上降级 Firefox,this answer 说明了如何返回到 Firefox 20。here 给出了关于切换到任何 Firefox 版本的方法的更一般描述。然后使用 this answer 暂停 Firefox 更新,直到 Selenium 发布适用于更高版本 Firefox 的更新。
就我而言,我降级了 Firefox,只是发现 Selenium Webdriver 最近已更新以处理最新版本,因此请先检查 Selenium 更新!
bundle update selenium-webdriver
刚刚在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
当 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#
对我有用的神奇组合是 Firefox 19.0 和 selenium web-driver 2.32.1(在撰写本文时最新)。 Firefox 20.x 和 21.x 不起作用。我不得不降级 Firefox。还要记住(至少在 Mac OS 上),如果您转到 FireFox 菜单 -> 关于 Firefox,它将自动升级到最新版本。不要那样做。
如果上述方法现在有效,就像我的情况一样,请试一试。
我在一台机器上而不是另一台机器上遇到超时错误。两台机器都是瘦客户端,运行完全相同的版本。这样就排除了不兼容的 Firefox 版本(错误发生在一台机器上而不是另一台机器上)
原来,headless 使用的端口存在问题。有另一个进程使用该端口。
下面为我解决了这个问题:
在 .zshenv 文件中添加以下行
export XVFB_DISPLAY='new-port-number'
然后在终端中运行命令 zsh
以设置更改
当我从一个终端启动 irb 时,我遇到了这个问题,我将自己起诉到另一个用户。当我以该用户身份运行 irb 时,我会收到此错误。但如果我以 root 身份运行,则不会。而不是当我退出到登录用户拥有的外壳时。
对我来说,我已经更新了 gems,但随后需要更新我的包。
在 powershell 中,导航到您的目录,然后更新捆绑包:
cd D:\Projects\LazyAutomation
bundle update
对于使用 Vagrant 的任何人,如果您登录启用 XServer firefox 可以正确启动,这为我解决了这个问题。流浪者 ssh -- -X
降级火狐。
如果已经使用 gem 'headless'
并且现在不希望更新 gems,那么您需要降级 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 并在 /usr/share/applications/
中创建一个 .desktop
文件以从 Dock 访问它。并让 Selenium 默认查找旧版本。 Take this for reference
遵循 ballPointPenguin 的建议后,我现在可以使用 watir-webdriver 检索本地文件,或本地 apache 安装的 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': 无法在 60 秒内获得稳定的 firefox 连接 (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)