「Selenium::WebDriver::Error::WebDriverError:」への対処

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-webdrivercapybaraの追記をしました。

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

Leave a Reply

Your email address will not be published.

CAPTCHA