Trying to get selenium working in rails 3 - “WebMo

2019-01-21 22:31发布

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

8条回答
我想做一个坏孩纸
2楼-- · 2019-01-21 22:45

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!

查看更多
Ridiculous、
3楼-- · 2019-01-21 22:46

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.

查看更多
Emotional °昔
4楼-- · 2019-01-21 22:48

WebMock.disable_net_connect! allow_localhost: true

查看更多
孤傲高冷的网名
5楼-- · 2019-01-21 22:48

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.

查看更多
不美不萌又怎样
6楼-- · 2019-01-21 22:49

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

查看更多
可以哭但决不认输i
7楼-- · 2019-01-21 22:52

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.

查看更多
登录 后发表回答