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
安全のために、GelefileにSelenium-webdriver 2.29.0を追加しました。
Selenium WebdriverはFirefoxに追いつくために頻繁に更新されるようです。しかし、どのバージョンが必要かをどのようにして知るのでしょうか?バージョンが変わってもこの手順がうまくいくことを願っています:
Selenium Client&WebDriver Language Bindingsまでスクロールします。
そのセクションのRuby言語行で、「ログの変更」(- 直接リンク )をクリックします。
変更ログで、Firefoxのバージョンに必要なSeleniumのバージョンを決定します。
Bundlerを使用している場合は、bundle show Selenium-webdriver
を実行して、使用しているバージョンを確認してください。 2.35.0などに更新するには、次の行をGemfile
に追加します。
gem 'Selenium-webdriver', '2.35.0'
bundle update
を実行してインストールします。 Sporkを使用している場合は、テストを再実行する前に必ずSporkを再起動してください。
Update1つの StackOverflow answer は、変更ログがseleniumhq.orgよりもソースコードリポジトリでより早く更新される可能性があることを示します。 Ruby=のリポジトリ変更ログはここにあります: https://github.com/SeleniumHQ/Selenium/blob/master/rb/CHANGES 。
Ubuntu 12.04でFirefoxをダウングレードする必要がある場合、 この回答 Firefox 20に戻る方法を説明します。Firefoxの任意のバージョンに切り替える方法のより一般的な説明は こちら 。次に、 this answer を使用して、SeleniumがFirefoxの新しいバージョンで動作するアップデートをリリースするまでFirefoxのアップデートを保留にします。
私の場合、Firefoxをダウングレードしたのは、Selenium Webdriverが最新バージョンに対応するように最近更新されたことがわかったためです。最初にSeleniumの更新を確認してください。
bundle update Selenium-webdriver
CIサーバーでこれに遭遇しましたが、それはFirefoxに使用するディスプレイがないためであることがわかりました。私はSelenium Webdriverがそれ以上の介入なしで動作するだろうと思っていましたが、そうではありませんでした。
Xvfbをミックスに追加すると機能しました。
Rails Cucumber機能の実行:
gem 'headless'
次に、features/support/env.rb
Before do
if Capybara.current_driver == :Selenium
require 'headless'
headless = Headless.new
headless.start
end
end
このエラーは、Seleniumとfirefoxのバージョンに互換性がない場合に発生します。
2つのオプションがあります。
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ドライバー2.32.1(執筆時点で最新)でした。 Firefox 20.xおよび21.xは機能しませんでした。 Firefoxをダウングレードする必要がありました。 (少なくともMac OSでは)FireFoxメニュー-> Firefoxについてを選択すると、自動的に最新リリースにアップグレードされることに注意してください。それをしないでください。
私の場合のように、上記がうまく機能する場合、これを試してみてください。
あるマシンでタイムアウトエラーが発生し、別のマシンでは発生しませんでした。両方のマシンは、まったく同じバージョンのすべてを実行するシンクライアントです。そのため、互換性のないFirefoxバージョンは除外されました(一方のマシンではエラーが発生し、もう一方のマシンではエラーは発生しませんでした)
ヘッドレスが使用しているポートに問題があることが判明しました。そのポートを使用する別のプロセスがありました。
以下は私のために問題を修正しました:
次の行を。zshenvファイルに追加しますexport XVFB_DISPLAY='new-port-number'
次に、ターミナルでコマンドzsh
を実行して変更を設定します
私にとって、私はすでにgemを更新していましたが、その後バンドルを更新する必要がありました。
PowerShellで、ディレクトリに移動し、バンドルを更新します。
cd D:\Projects\LazyAutomation
bundle update
別のユーザーに自分を訴えた端末からirbを起動したときに、この問題が発生しました。そのユーザーとしてirbを実行すると、このエラーが発生します。しかし、ルートとして実行した場合はそうではありません。そして、ログインしたユーザーが所有するシェルに戻ったときではありません。
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
新しいターミナルタブを開き、キュウリの仕様/ Seleniumの仕様を実行します。
Firefoxの最新バージョンをダウンロードし、.desktop
に/usr/share/applications/
ファイルを作成して、ドックからアクセスできるようになりました。そして、デフォルトでSeleniumに古いバージョンを検出させます。 参照のためにこれを取る
vagrantを使用している人は誰でも、XServerを有効にしてログインすると、firefoxが正常に起動し、解決されました。 vagrant ssh--X