前提・実現したいこと
お世話になります。
現在ruby(ruby on rails)でポートフォリオ用アプリを制作しております。
発生している問題・エラーメッセージ
ユーザーを削除する挙動のテストをsystem specで書いておりますが、
こちらのエラーが出ており解決できません。
Failure/Error: fill_in "user_email", with: user.email Capybara::ElementNotFound: Unable to find field "user_email" that is not disabled [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_users_nested_3_nested_2_正しく削除できること_952.png
該当のソースコード
通したいテストは以下の通りです。
describe "プロフィール編集ページ" do before do login_for_system(user) visit user_path(user) click_link "プロフィール編集" end context "アカウント削除処理", js: true do it "正しく削除できること" do click_link "アカウントを削除する" page.accept_confirm do click_on :delete_button end expect(page).to have_content "アカウントを削除しました" end end end
login_for_system(user)はspec/support/test_helperに書いています。
def login_for_system(user) visit login_path fill_in "user_email", with: user.email fill_in "user_password", with: user.password click_button "ログイン" end
試したこと
そもそも以下のエラーが出ており、Docker環境内のためChromeが入っていないのかと考え、docker-compose.ymlやcapybara.rbにselenium_chromeに関連する記述をしました。そうすると初めに提示したエラーになった次第です。
Failure/Error: visit login_path Webdrivers::BrowserNotFound: Failed to find Chrome binary.
またvisitlogin_pathの後にputs page.bodyを入れたところ、
テスト失敗箇所のhtmlは作成中のアプリと全く関係のない何かのゲーム?の様なコードが出てきました。
// Game intro animation, T-rex moves in from the left. if (this.playingIntro && this.xPos < this.config.START_X_POS) { this.xPos += Math.round((this.config.START_X_POS / this.config.INTRO_DURATION) * deltaTime); this.xInitialPos = this.xPos; }
スクリーンショットの127.0.0.1についても調べておりますが、解決に到っておりません。
補足情報(FW/ツールのバージョンなど)
開発環境は、
ruby 2.5.1
rails 5.2.4
docker,rails,puma,nginx,mysqlで動かしています。
Dockerfile
FROM ruby:2.5.1 RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs RUN mkdir /webapp WORKDIR /webapp ADD Gemfile /webapp/Gemfile ADD Gemfile.lock /webapp/Gemfile.lock RUN bundle install ADD . /webapp RUN mkdir -p tmp/sockets
docker-compose.yml
version: '3' services: app: build: context: . env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/webapp - public-data:/webapp/public - tmp-data:/webapp/tmp - log-data:/webapp/log depends_on: - db environment: - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub" db: image: mysql:5.7 env_file: - ./environments/db.env volumes: - db-data:/var/lib/mysql web: build: context: containers/nginx volumes: - public-data:/webapp/public - tmp-data:/webapp/tmp ports: - 80:80 depends_on: - app selenium_chrome: image: selenium/standalone-chrome-debug logging: driver: none volumes: public-data: tmp-data: log-data: db-data:
spec/support/capybara.rb
Capybara.javascript_driver = :chrome_headless RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true) do if ENV["SELENIUM_DRIVER_URL"].present? driven_by :selenium, using: :chrome, options: { browser: :remote, url: ENV.fetch("SELENIUM_DRIVER_URL"), desired_capabilities: :chrome } else driven_by :selenium_chrome_headless end end end
以上です。
何卒、宜しくお願い致します。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記
ログインフォームのビューは以下の通りです。
<% provide(:title, "ログイン") %> <h1>ログイン</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(:session, url: login_path, local: true) do |f| %> <div class = 'form-group'> <%= f.label 'メールアドレス' %> <%= f.email_field :email, class: 'form-control', id: 'user_email' %> </div> <div class = 'form-group'> <%= f.label 'パスワード' %> <%= f.password_field :password, class: 'form-control', id: 'user_password' %> </div> <div class = 'form-group'> <%= f.label :remember_me, class: "checkbox inline" do %> <%= f.check_box :remember_me %> <span>ログインしたままにする</span> <% end %> </div> <%= f.submit 'ログイン', class: 'btn btn-primary' %> <% end %> <br>ユーザー登録されていない方は<%= link_to 'こちら', signup_path %><br> パスワードをお忘れの方は<%= link_to 'こちら', '#' %> </div> </div>
rootは以下の様に記述しております。
get :login, to: 'sessions#new' post :login, to: 'sessions#create'
Dockerファイルに以下を追加してみましたがダメでした....
RUN apt-get update && apt-get install -y unzip && \ CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ unzip ~/chromedriver_linux64.zip -d ~/ && \ rm ~/chromedriver_linux64.zip && \ chown root:root ~/chromedriver && \ chmod 755 ~/chromedriver && \ mv ~/chromedriver /usr/bin/chromedriver && \ sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ apt-get update && apt-get install -y google-chrome-stable
何卒宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー