Trying to get selenium working in rails 3 - “WebMock::NetConnectNotAllowedError”

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

I'm trying to use selenium for the first time in a rails 3 app. (I've used it before with rails 2). I'm in an rvm which of course has its own gemset.

I first ran a task with capybara, without selenium:

#./spec/requests/homepage_spec.rb require 'spec_helper'  describe 'home page', :type => :request do   it 'should welcome the user' do     visit '/'     page.should have_content('Buddy')   end end 

This ran fine. I then added a ":js => true" option to the options for describe, which is supposed to make it run using selenium (as far as i know). And got this error:

 Failure/Error: @page.start_new_browser_session  WebMock::NetConnectNotAllowedError:    Real HTTP connections are disabled. Unregistered request: POST http://localhost:4444/selenium-server/driver/ with body 'cmd=getNewBrowserSession&1=%2Afirefox&2=http%3A%2F%2Flocalhost%3A3000&3=&4=' with headers {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded; charset=utf-8', 'User-Agent'=>'Ruby'}     You can stub this request with the following snippet:     stub_request(:post, "http://localhost:4444/selenium-server/driver/").      with(:body => "cmd=getNewBrowserSession&1=%2Afirefox&2=http%3A%2F%2Flocalhost%3A3000&3=&4=",            :headers => {'Accept'=>'*/*', 'Content-Type'=>'application/x-www-form-urlencoded; charset=utf-8', 'User-Agent'=>'Ruby'}).      to_return(:status => 200, :body => "", :headers => {})     ============================================================ 

It's my first time using capybara and i think my config is just wrong somehow. Maybe missing some essential gems? I was following this blog post: Capybara (and Selenium) with RSpec & Rails 3: quick tutorial

Any ideas?

PS, here's my Gemfile contents:

source 'http://rubygems.org' gem 'rails', '3.0.7' gem 'haml' gem 'heroku' gem "heroku_backup_task" gem 'authlogic', '3.0.2' gem 'rails3-generators' gem 'txtlocal', :git => 'git://github.com/epigenesys/txtlocal.git' gem 'chronic' gem 'sqlite3-ruby', :require => 'sqlite3' gem 'bcrypt-ruby'  group :development, :test do   gem 'rspec'   gem 'mocha'   gem "rspec-rails", "~> 2.4"   gem "webmock"   gem 'database_cleaner', '0.5.2'     gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git'   gem 'selenium-client' end 

and my Gemfile.lock:

GIT   remote: git://github.com/epigenesys/txtlocal.git   revision: 66aab6628d4385eda959e4a8bd083cc2c259fea0   specs:     txtlocal (0.0.1)       json  GIT   remote: git://github.com/jnicklas/capybara.git   revision: 9cdf015e28637b7b0d94f5a69f9bc3605455ce22   specs:     capybara (1.0.0.beta1)       mime-types (>= 1.16)       nokogiri (>= 1.3.3)       rack (>= 1.0.0)       rack-test (>= 0.5.4)       selenium-webdriver (~> 0.2.0)       xpath (~> 0.1.4)  GEM   remote: http://rubygems.org/   specs:     abstract (1.0.0)     actionmailer (3.0.7)       actionpack (= 3.0.7)       mail (~> 2.2.15)     actionpack (3.0.7)       activemodel (= 3.0.7)       activesupport (= 3.0.7)       builder (~> 2.1.2)       erubis (~> 2.6.6)       i18n (~> 0.5.0)       rack (~> 1.2.1)       rack-mount (~> 0.6.14)       rack-test (~> 0.5.7)       tzinfo (~> 0.3.23)     activemodel (3.0.7)       activesupport (= 3.0.7)       builder (~> 2.1.2)       i18n (~> 0.5.0)     activerecord (3.0.7)       activemodel (= 3.0.7)       activesupport (= 3.0.7)       arel (~> 2.0.2)       tzinfo (~> 0.3.23)     activeresource (3.0.7)       activemodel (= 3.0.7)       activesupport (= 3.0.7)     activesupport (3.0.7)     addressable (2.2.5)     arel (2.0.9)     authlogic (3.0.2)       activerecord (~> 3.0.7)       activerecord (~> 3.0.7)     bcrypt-ruby (2.1.4)     builder (2.1.2)     childprocess (0.1.8)       ffi (~> 1.0.6)     chronic (0.3.0)     configuration (1.2.0)     crack (0.1.8)     database_cleaner (0.5.2)     diff-lcs (1.1.2)     erubis (2.6.6)       abstract (>= 1.0.0)     ffi (1.0.7)       rake (>= 0.8.7)     haml (3.1.1)     heroku (2.1.2)       launchy (>= 0.3.2)       rest-client (~> 1.6.1)       term-ansicolor (~> 1.0.5)     heroku_backup_task (0.0.5)       heroku (>= 1.13.7)       rake     i18n (0.5.0)     json (1.5.1)     json_pure (1.5.1)     launchy (0.4.0)       configuration (>= 0.0.5)       rake (>= 0.8.1)     mail (2.2.19)       activesupport (>= 2.3.6)       i18n (>= 0.4.0)       mime-types (~> 1.16)       treetop (~> 1.4.8)     mime-types (1.16)     mocha (0.9.12)     nokogiri (1.4.4)     polyglot (0.3.1)     rack (1.2.2)     rack-mount (0.6.14)       rack (>= 1.0.0)     rack-test (0.5.7)       rack (>= 1.0)     rails (3.0.7)       actionmailer (= 3.0.7)       actionpack (= 3.0.7)       activerecord (= 3.0.7)       activeresource (= 3.0.7)       activesupport (= 3.0.7)       bundler (~> 1.0)       railties (= 3.0.7)     rails3-generators (0.17.4)       railties (>= 3.0.0)     railties (3.0.7)       actionpack (= 3.0.7)       activesupport (= 3.0.7)       rake (>= 0.8.7)       thor (~> 0.14.4)     rake (0.8.7)     rest-client (1.6.1)       mime-types (>= 1.16)     rspec (2.6.0)       rspec-core (~> 2.6.0)       rspec-expectations (~> 2.6.0)       rspec-mocks (~> 2.6.0)     rspec-core (2.6.0)     rspec-expectations (2.6.0)       diff-lcs (~> 1.1.2)     rspec-mocks (2.6.0)     rspec-rails (2.6.0)       actionpack (~> 3.0)       activesupport (~> 3.0)       railties (~> 3.0)       rspec (~> 2.6.0)     rubyzip (0.9.4)     selenium-client (1.2.18)     selenium-webdriver (0.2.0)       childprocess (>= 0.1.7)       ffi (>= 1.0.7)       json_pure       rubyzip     sqlite3 (1.3.3)     sqlite3-ruby (1.3.3)       sqlite3 (>= 1.3.3)     term-ansicolor (1.0.5)     thor (0.14.6)     treetop (1.4.9)       polyglot (>= 0.3.1)     tzinfo (0.3.27)     webmock (1.6.2)       addressable (>= 2.2.2)       crack (>= 0.1.7)     xpath (0.1.4)       nokogiri (~> 1.3)  PLATFORMS   ruby  DEPENDENCIES   authlogic (= 3.0.2)   bcrypt-ruby   capybara!   chronic   database_cleaner (= 0.5.2)   haml   heroku   heroku_backup_task   mocha   rails (= 3.0.7)   rails3-generators   rspec   rspec-rails (~> 2.4)   selenium-client   sqlite3-ruby   txtlocal!   webmock 

回答1:

It's because you are using webmock. It blocks all outbound HTTP requests.

If you don't need it, remove it from the Gemfile. If you do need it, then you may need to configure it more precisely to your needs:

https://github.com/bblimke/webmock



回答2:

With this...

WebMock.disable_net_connect!(:allow_localhost => true) 

you allow real web access to your localhost. It's perfect when you need to use Selenium for you application and, at the same time, mock external resources.



回答3:

We use this to enable normal requests in capybara, and allow selenium's callbacks everywhere, because they are fired after requests are finished.

# spec/spec_helper.rb RSpec.configure do |config|   config.before(:all, type: :request) do     WebMock.allow_net_connect!   end      config.after(:all, type: :request) do     selenium_requests = %r{/((__.+__)|(hub/session.*))$}     WebMock.disable_net_connect! :allow => selenium_requests   end end 


回答4:

To improve on @grosser code

RSpec.configure do |config|   config.before do     WebMock.enable!     if Capybara.current_driver != :rack_test       selenium_requests = %r{/((__.+__)|(hub/session.*))$}       WebMock.disable_net_connect! :allow => selenium_requests       WebMock.disable_net_connect! :allow => "127.0.0.1:#{Capybara.current_session.driver.server_port}" # this only works for capybara selenium and capybara-webkit     else       WebMock.disable_net_connect!     end   end    # for connections where we need to have network access we just tag it network   config.before(:each, :network => true) do     WebMock.disable!   end end 


回答5:

WebMock.disable_net_connect! allow_localhost: true



回答6:

In my specific case my problem was in evergreen (javascript rspec).

I added:

WebMock.disable_net_connect! :allow_localhost => true 

To my environments/env*.rb because evergreen doesn't load rspec helpers.



回答7:

Good suggestions here. Another, more fine-tuneable, solution:

WebMock.disable_net_connect!(   allow: [     'localhost',     'dynamo:8000',     'pact-broker:81'   ] ) 

Works especially well for whitelisting docker-compose containers!



回答8:

I tried the above answers and none of them worked, then found that the issue was my workplace's Internet connection. It worked on my home's Internet connection.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!