前提・実現したいこと
※ 文字数制限を受けたため、こちらの記事の続きとなります。
Docker環境で、Capybaraとseleniumを使ってSystemテストをしたいです。
そのために、SeleniumWebDriverを使ってsystem specを実行したのですが、9515ポートがアクセス拒否されてしまいます。
bundle exec rspec spec/system/**
↓
発生している問題・エラーメッセージ
1.3) Failure/Error: raise e, "Failed to open TCP connection to " + "#{conn_address}:#{conn_port} (#{e.message})" Errno::ECONNREFUSED: Failed to open TCP connection to 127.0.0.1:9515 (Connection refused - connect(2) for "127.0.0.1" port 9515) [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_ideas_xxxx_690.png # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/http/default.rb:129:in `response_for' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/http/default.rb:82:in `request' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/http/common.rb:64:in `call' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/bridge.rb:167:in `execute' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/w3c/bridge.rb:567:in `execute' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/w3c/bridge.rb:173:in `window_handles' # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/driver.rb:187:in `window_handles' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara/selenium/driver.rb:178:in `window_handles' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara/selenium/driver_specializations/chrome_driver.rb:34:in `reset!' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara/session.rb:128:in `reset!' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara.rb:315:in `block in reset_sessions!' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara.rb:315:in `reverse_each' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara.rb:315:in `reset_sessions!' # /usr/local/bundle/gems/capybara-3.15.1/lib/capybara/rspec.rb:18:in `block (2 levels) in <top (required)>' # ------------------ # --- Caused by: --- # Errno::ECONNREFUSED: # Connection refused - connect(2) for "127.0.0.1" port 9515 # /usr/local/bundle/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/remote/http/default.rb:129:in `response_for'
localhost:9515
へのアクセスを拒否されました。サーバープロセスが存在しないように思えます。
該当のソースコード
spec/support/selenium_chrome.rb
Capybara.register_driver :chrome_headless do |app| options = ::Selenium::WebDriver::Chrome::Options.new options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--window-size=1400,1400') Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end
spec/rails_helper.rb
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true) do driven_by :selenium_chrome_headless end end
Gemfile
1gem 'rails', '~> 5.1.0' 2... 3... 4group :development, :test do 5 gem "rspec-rails" 6end 7 8group :test do 9 gem 'capybara' 10 gem 'selenium-webdriver' 11 gem 'webdrivers' 12end
Dockerfile
1FROM ruby:2.3.7 2 3ENV LANG C.UTF-8 4RUN apt-get update -qq && apt-get install -y build-essential node.js 5RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ 6 && apt-get install -y nodejs 7 8# chromeの追加 9RUN apt-get update && apt-get install -y unzip && \ 10 CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ 11 wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ 12 unzip ~/chromedriver_linux64.zip -d ~/ && \ 13 rm ~/chromedriver_linux64.zip && \ 14 chown root:root ~/chromedriver && \ 15 chmod 755 ~/chromedriver && \ 16 mv ~/chromedriver /usr/bin/chromedriver && \ 17 sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ 18 sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ 19 apt-get update && apt-get install -y google-chrome-stable 20 21RUN mkdir /app 22WORKDIR /app 23COPY Gemfile /app/Gemfile 24COPY Gemfile.lock /app/Gemfile.lock 25RUN bundle install 26COPY . /app 27CMD ["rails", "server", "-b", "0.0.0.0"]
試したこと
##1. chromedriverが起動しているか確かめる
chromedriverが起動していないのでは?と思い、以下のコマンドで確認したところ、9515番portは起動していませんでした。
netstat -atn|grep LISTEN
tcp6 0 0 ::1.3000 *.* LISTEN tcp4 0 0 *.3000 *.* LISTEN tcp6 0 0 ::1.4306 *.* LISTEN tcp4 0 0 *.4306 *.* LISTEN tcp4 0 0 127.0.0.1.53253 *.* LISTEN tcp6 0 0 ::1.53253 *.* LISTEN tcp4 0 0 127.0.0.1.631 *.* LISTEN tcp6 0 0 ::1.631 *.* LISTEN tcp46 0 0 *.33060 *.* LISTEN tcp4 0 0 127.0.0.1.3306 *.* LISTEN
###2. Railsの再起動
変化なし。
###3. ポートフォワーディング
dockerコンテナにアクセスできてないのでは?と思い、docker-compose
に以下を追加してみましたが解決せず。
web: build: . command: bundle exec rails server -p 3000 -b 0.0.0.0 ports: - 3000:3000 - 9515:9515 #追加
###4. ChromeDriverをGoogle Chromeのバージョンがおかしい?
ChromeDriver・・・ 75.0.3770.90
Google Chrome・・・ 75.0.3770.100
こちらの記事を参考に、
ChromeDriverをGoogle Chromeのバージョンに合わせてみようとしましたが、ChromeDriver 75.0.3770.100
が見つかりませんでした。
chromedriverが起動しない原因がわかりません。
素のRubyスクリプトであれば、ChromeDriver
自体は動作したので、Capybara
の方で、どこか設定を誤っているのではないかと考えてます。
ここ2週間ハマっており、、なかなか解決しません。。よろしくお願いいたします????♂️
補足情報(FW/ツールのバージョンなど)
- Rails 5.1.7
- ruby:2.3.7
- RSpec 3.8
- ChromeDriver 75.0.3770.90
- google-chrome-stable 75.0.3770.100
- capybara (3.15.1)
- DockerImage
- chromedriverのパスは通っている。
- スクリーンショットは真っ白
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。