RSpec
導入まわりのエラーに遭遇したので、対処法についてまとめておきたいと思います。
「Selenium::WebDriver::Error::WebDriverError:」への対処
エラー内容
コード
Selenium::WebDriver::Error::WebDriverError:
Unable to find chromedriver. Please download the server from
https://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
👆ですが要するにchromedriver
が見つからないという話です。
解決策
👇以下の記事を参考に、gem
ファイルへselenium-webdriver
とcapybara
の追記をしました。
https://qiita.com/ngron/items/f61b8635b4d67f666d75
※chromedriver
のインストールですが、私の場合Dockerfile
ではなくdocker-compose.yml
の方で、記載してました。
以下は作成したファイルと、docker-compose.yml
のファイルだけ載せておきます。
spec/support/selenium_chrome.rb # 新たに作成する必要があります
require 'capybara/rspec'
require 'selenium-webdriver'
Capybara.register_driver :selenium_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')
driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :selenium_chrome_headless
spec/rails_helper
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # コメントアウトされているところがあるので、それを修正する形でもOKです
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
group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[mri mingw x64_mingw]
gem "rspec-rails"
end
group :development do
# Use console on exceptions pages [https://github.com/rails/web-console]
gem "web-console"
# Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler]
# gem "rack-mini-profiler"
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
# gem "spring"
gem 'pry-byebug'
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false
gem 'rubocop-rspec'
end
group :test do
# Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers", require: !ENV['SELENIUM_REMOTE_URL']
end
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
stdin_open: true
tty: true
environment:
SELENIUM_REMOTE_URL: http://webdriver_chrome:4444/wd/hub
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
- webdriver_chrome
webdriver_chrome:
image: selenium/standalone-chrome