前提・実現したいこと
Docker環境でRailsの開発をしています。
RailsでSystem Testできるようにしたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
Gemfile
にはcapybara
とselenium
、webdrivers
を導入してbundle install
。
(参考記事)
Dockerfile
にchrome-driver
を入れて、bundle exec rspec spec/system/**
と実行して結果、以下のエラーが発生しました。
(参考記事)
発生している問題・エラーメッセージ
Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
[翻訳]
- Chromeが異常終了
- DevToolsActivePortファイルが存在しません
- CHromeの場所(/usr/bin/chromium)から開始したプロセスはもう実行されていないので、ChromeDriverはChromeがクラッシュしたと見なします。
chromedriver
起動後↓
Starting ChromeDriver 75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003}) on port 9515 Only local connections are allowed. Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code. [1562475145.473][SEVERE]: bind() failed: Cannot assign requested address (99)
該当のソースコード
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 13
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"]
chromedriver -v
↓
ChromeDriver 75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003})
spec/rails_helper.rb
は特にいじってません。
試したこと
####1. gemを最新にする
bundle update rspec-rails capybara selenium-webdriver
のようにブラウザテストに利用するgemwをすべてupdateしましたが、変化なし
####2.Sandboxオプションをつける
spec/rails_helper.rb
に以下の内容を記述。
Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, { browser: :chrome, desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( chrome_options: { # NOTE: ここでno-sandboxオプション追加する args: %w[no-sandbox headless disable-gpu window-size=1680,1050], } ) }) end Capybara.javascript_driver = :selenium
同じエラーを吐いたので、
こちらの記事にあったようchromeのoptionにdisable-dev-shm-usage
を追加。
args: %w[no-sandbox disable-dev-shm-usage headless disable-gpu window-size=1680,1050]
しかし、エラー内容は変わりませんでした。
##3.chromedriverが通ったときと同じoptionを追加
selenium-webdriver
が正常に動いた時と同じオプションを追加し、spec/rails_helper.rb
に include。
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
すると9515番ポートの接続を拒否されました。
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'
##4. 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
##chromeのversionを合わせる
ChromeDriver
をGoogle Chrome
のバージョンに合わせてみようとしましたが、ChromeDriver 75.0.3770.100
が見つかりませんでした。
- ChromeDriver 75.0.3770.90
- Google Chrome 75.0.3770.100
参考: https://chida09.com/selenium-error-tcpconnection/
chromedriver
が起動しない原因がわかりません。
ここ数日間ハマっており、、なかなか解決しません。。よろしくお願いいたします????♂️
補足情報(FW/ツールのバージョンなど)
- Rails 5.1.7
- RSpec 3.8
- ChromeDriver 75.0.3770.90
- Google Chrome 75.0.3770.100
- capybara (3.15.1)
- DockerImage
- chromedriverのパスは通っている。
- スクリーンショットは真っ白
- 使用できるドライバ↓
:selenium, :selenium_headless, :selenium_chrome, :selenium_chrome_headless
の4つ。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。