環境
Rails 5.2.2
Ruby 2.6.3
Rspec 3.8.0
ChromeDriver 75.0.3770.140
Google Chrome 75.0.3770.142
エラーの内容
Dockerを使っていて、久々に docker-compose build
をしたら、Rspecの実行で下記のエラーが出た。
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/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
解消方法
元々の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
修正後のrails_helper.rb
Capybara.register_driver :selenium do |app|
options = ::Selenium::WebDriver::Chrome::Options.new
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1680,1050')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :selenium
optionの渡し方が悪かった。仕様が変わったのだと思われる。
どのタイミングからエラーになったのかなど、特にそこに関しては調査していない。
試したこと
最初は見当がつかなかったので、手当たり次第にググった。なんとなく、引数に問題がある気がした。なので、オプションの引数の書き方を変更してみた。
→成功するが、非推奨の警告が出る
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome, args: %w[no-sandbox headless disable-gpu window-size=1680,1050])
end
Capybara.javascript_driver = :selenium
2019-07-30 10:50:06 WARN Selenium [DEPRECATION] :args or :switches is deprecated. Use Selenium::WebDriver::Chrome::Options#add_argument instead.
Successfully ***********
オプションの引数に–を渡してみる。変化なし。
→成功するが、非推奨の警告が出る
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome, args: %w[--no-sandbox --headless --disable-gpu --disable-dev-shm-usage --window-size=1680,1050])
end
Capybara.javascript_driver = :selenium
2019-07-30 10:52:23 WARN Selenium [DEPRECATION] :args or :switches is deprecated. Use Selenium::WebDriver::Chrome::Options#add_argument instead.
Successfully ***********
Selenium::WebDriver::Chrome::Options#add_argument instead. と言っているので、ググった。
https://qiita.com/eightfoursix/items/6943cad899a571d02798
上記のサイトを参考にSelenium::WebDriver::Chrome::Optionsを使ってみる。
→ エラー
Capybara.register_driver :selenium do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1680,1050')
Capybara::Selenium::Driver.new(app, browser: :chrome, args: options)
end
Capybara.javascript_driver = :selenium
ArgumentError:
:args must be an Array of Strings
よくサイトを見たら、optionsを渡しているのは、:argsではなく:optionsだった
→ 成功
Capybara.register_driver :selenium do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1680,1050')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :selenium
Successfully ***********
各オプションの–を削除してやってみる
Capybara.register_driver :selenium do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1680,1050')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
Capybara.javascript_driver = :selenium
Successfully ***********
Dockerだったり、Rspecの設定周りというのをあまりいじってなかったので、時間がかかったが、無事できてよかった。
コメントを残す