質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

4751閲覧

【Capybara & Selenium】SystemSpecで9515ポートの接続を拒否されてしまう。

reon.negi

総合スコア13

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2019/07/12 17:01

前提・実現したいこと

※ 文字数制限を受けたため、こちらの記事の続きとなります。

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のパスは通っている。
  • スクリーンショットは真っ白

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

system spec側の文法ミスで、visitをつけ忘れていた..。
subject { root_path }

subject { visit root_path }

そもそも要素がない状態で要素検証していたのが原因。
page.html
=> <html><head></head><body></body></html>

投稿2019/07/14 06:36

reon.negi

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

前回の質問にもコメントさせていただたものですが、気になっているので、コメントさせていただきます。

Dockerの中でrailsを起動されていますが、rspec (system spec) はどこで実行していますか?
Dockerのコンテナの中ではなくて、もしかしてホスト側でしょうか?
間違っていたらすみません。

docker-compose exec web bash

で、Dockerのコンテナの中に入ってから実行していますか?

投稿2019/07/13 12:13

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reon.negi

2019/07/13 15:08 編集

前回に続き本当にありがとうございます????‍♂️ コンテナの中で実行しております! `docker-compose run web bundle exec rspec spec/system/**` もしお時間あればで恐縮ですが、 https://github.com/ngron/ideabox の`feature/34`ブランチで確認可能です。 よろしくお願いいたします。
suama

2019/07/13 22:34

ありがとうございます!
suama

2019/07/14 02:37 編集

簡単にdocker-compose build -> docker-compose up した状態で、試してみました。 ちょっとアプリケーションのほうはよくわからないのですが、spec中のURLを外部サイトに変更してvisitさせると、Seleniumが起動、テスト失敗&キャプチャが取れています。 原因はわからないので申し訳ないのですが、コンテナをいったん停止させて、docker-compse build --no-chache でなどでイメージを再作成してみて、再度テストではどうでしょう?
reon.negi

2019/07/14 06:53 編集

suamaさん、動作確認までしていただき、本当にありがとうございます! 率直に申し上げますと、 私がsystem specの書き方を誤り、ページにアクセスすらできたいなかったみたいで、urlの前にvisitメソッドを追加することで解決いたしました。 ``` RSpec.describe 'Ideas', type: :system, js: true do subject { visit root_path } #root_path => visit root_path it "投稿一覧表示" do subject expect(page).to have_content("テキスト") end end ``` (まさかここだとは思わず、載せなかったことを激しく後悔..) たった4文字という本当にくだらないミスで2週間の期間を無駄にしてしまうプログラミングの恐ろしさを痛感しました。 こんなオチで申し訳ないですが、なにはともあれ、ここまでご協力いただいたことを本当に感謝しております????‍♂️
suama

2019/07/14 07:49 編集

よかったです!!! (わたしもちょっといじって、 visit "http://www.google.com"とかで試しました。ソース見せてくださってありがとうございました!) 頑張ってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問