web-dev-qa-db-fra.com

Essayer de faire fonctionner le sélénium dans Rails 3 - "webmock :: neconnectnoallowederror"

J'essaie d'utiliser sélénium pour la première fois dans un Rails App. (Je l'ai utilisé auparavant avec Rails 2). Je suis Dans un RVM qui a bien sûr sa propre gemise.

J'ai d'abord couru une tâche avec Capybara, sans 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

Cela a couru bien. J'ai ensuite ajouté une option ": JS => vraie" pour décrire les options de décrire, qui est censée le faire courir à l'aide de sélénium (autant que je sache). Et a eu cette erreur:

 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 => {})

   ============================================================

C'est ma première fois à l'aide de Capybara et je pense que ma configuration est fausse d'une manière ou d'une autre. Peut-être que des gemmes essentielles? Je suivais ce blog post: Capybara (et sélénium) avec RSPEC & Rails 3: tutoriel rapide

Des idées?

PS, voici mon contenu gemfile:

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

et mon 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
32
Max Williams

C'est parce que vous utilisez WebMock. Il bloque toutes les demandes HTTP sortantes.

Si vous n'en avez pas besoin, retirez-le du gemfile. Si vous en avez besoin, vous devrez peut-être le configurer plus précisément à vos besoins:

https://github.com/bblimke/webmock

30
twmills

Avec ça...

WebMock.disable_net_connect!(:allow_localhost => true)

vous autorisez un réel accès Web à votre localhost. C'est parfait lorsque vous devez utiliser Sélenium pour votre application et, dans le même temps, des ressources externes simulées.

54
Gawyn

Nous utilisons cela pour activer les demandes normales à Capybara et permettre à Selenium's Callbacks partout, car ils sont tirés après la fin des demandes.

# 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
16
grosser

Pour améliorer le code @grosser

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
8
user1439899

WebMock.disable_net_connect! allow_localhost: true

7
Jack Kinsella

Dans mon cas particulier, mon problème était dans Evergreen (JavaScript RSPEC).

J'ai ajouté:

WebMock.disable_net_connect! :allow_localhost => true

À mes environnements/env * .rb, car Evergreen ne charge pas les aides RSPEC.

3
carlosveucv

Bonnes suggestions ici. Un autre, plus puissant, solution:

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

Fonctionne particulièrement bien pour les conteneurs de docker-compose de whitelisting!

1
mycargus

J'ai essayé les réponses ci-dessus et aucun d'entre eux n'a travaillé, puis a constaté que la question était la connexion Internet de mon lieu de travail. Cela a fonctionné sur la connexion Internet de ma maison.

0
user1045085