2011-05-12 15 views
31

Estoy tratando de usar selenio por primera vez en una aplicación de rails 3. (Lo he usado antes con rieles 2). Estoy en un rvm que por supuesto tiene su propio gemset.Intentando obtener selenio trabajando en rieles 3 - "WebMock :: NetConnectNotAllowedError"

me encontré por primera vez una tarea con capibara, sin selenio:

#./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 

Esto funcionó muy bien. A continuación, agregué una opción ": js => true" a las opciones para describir, que se supone debe hacer que funcione usando selenio (hasta donde yo sé). Y consiguió este 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 => {}) 

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

Es mi primera vez usando capibara y creo que mi configuración es simplemente incorrecto de alguna manera. Tal vez falta algunas gemas esenciales? Estaba siguiendo esta publicación en el blog: Capybara (and Selenium) with RSpec & Rails 3: quick tutorial

¿Alguna idea?

PS, aquí está mi contenido 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 

y mi 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 

Respuesta

28

Es porque está utilizando webmock. Bloquea todas las solicitudes HTTP salientes.

Si no lo necesita, elimínelo del Gemfile. Si lo necesita, entonces puede que tenga que configurar de forma más precisa a sus necesidades:

https://github.com/bblimke/webmock

+0

ahhhhhh ... gracias! –

15

Usamos esto para habilitar las solicitudes normales en capibara, y permitir que las devoluciones de llamada de selenio en todas partes, porque son despedidos después de las peticiones estan terminados.

# 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 
+0

¡Eso funcionó! ¡Gracias! Sin embargo, no estoy seguro de qué se trata la solicitud de selenio. – Rimian

+0

'WebMock.allow_net_connect!' Hizo el truco! –

8

Para mejorar el código @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 
7

WebMock.disable_net_connect! allow_localhost: true

49

Con esta ...

WebMock.disable_net_connect!(:allow_localhost => true) 

que permiten acceso a la web real a su servidor local. Es perfecto cuando necesita utilizar Selenium para su aplicación y, al mismo tiempo, se burla de los recursos externos.

3

En mi caso específico mi problema estaba en evergreen (javascript rspec).

añadí:

WebMock.disable_net_connect! :allow_localhost => true 

Para mi ambientes/env * .rb porque siempre verde no se carga ayudantes rspec.

+0

¡Esta fue la respuesta que funcionó para mí! Mi circunstancia es que estoy intentando ejecutar activos de rake: precompile con asset_sync para enviar los activos a Amazon S3 después de que mis pruebas tengan éxito. La gema de Webmock estaba impidiendo el empuje de los activos, a pesar de que había actualizado mi spec_helper.rb con 'WebMock.disable_net_connect! (: Allow => /s3.amazonaws.com/,: allow_localhost => true)' Tenía que actualizar los entornos/test.rb con esta línea y luego comenzó a funcionar, gracias a esta respuesta @carlosveucv –

0

Probé las respuestas anteriores y ninguna de ellas funcionó, luego descubrí que el problema era la conexión a Internet de mi lugar de trabajo. Funcionó en la conexión a Internet de mi casa.

1

Buenas sugerencias aquí.Otro, más bien sintonizable, solución:

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

funciona especialmente bien para listas blancas contenedores ventana acoplable a componer!