Rails 3アプリで初めてSeleniumを使用しようとしています(以前にRails 2で使用したことがあります)。)もちろん独自のgemsetを持っているrvmで。
私は最初にセレンなしでカピバラでタスクを実行しました:
#./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
これはうまくいきました。次に、 ":js => true"オプションをdescribeのオプションに追加しました。これにより、Seleniumを使用して実行できるようになります(私の知る限り)。そして、このエラーが発生しました:
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 => {})
============================================================
カピバラを使うのは初めてで、設定がどういうわけか間違っていると思います。いくつかの重要な宝石が不足している可能性がありますか?私はこのブログ投稿をフォローしていました: Capybara(およびSelenium)とRSpec&Rails 3:クイックチュートリアル
何か案は?
PS、これが私の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
そして私の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
これは、webmockを使用しているためです。すべてのアウトバウンドHTTPリクエストをブロックします。
必要ない場合は、Gemfileから削除してください。必要な場合は、ニーズに合わせてより正確に構成する必要があります。
これとともに...
WebMock.disable_net_connect!(:allow_localhost => true)
ローカルホストへの実際のWebアクセスを許可します。アプリケーションにSeleniumを使用し、同時に外部リソースをモックする必要がある場合に最適です。
これを使用して、カピバラでの通常のリクエストを有効にし、リクエストが完了した後にSeleniumのコールバックが呼び出されるようにします。
# 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
@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
WebMock.disable_net_connect! allow_localhost: true
私の特定のケースでは、私の問題は evergreen (javascript rspec)にありました。
追加した:
WebMock.disable_net_connect! :allow_localhost => true
Evergreenはrspecヘルパーをロードしないため、私の環境/env*.rbに。
ここに良い提案があります。別の、より微調整可能なソリューション:
WebMock.disable_net_connect!(
allow: [
'localhost',
'dynamo:8000',
'pact-broker:81'
]
)
特にdocker-composeコンテナーをホワイトリストに登録する場合に有効です!
上記の回答を試したところ、どれもうまくいかなかったため、問題は職場のインターネット接続にあることがわかりました。それは私の家のインターネット接続で動作しました。