はじめに
RSpecのシステムスペックで非同期通信のテストをしていました。
visit root_path
によって画面を表示しようとした際に以下のエラーに遭遇しました。
1.1) Failure/Error: visit root_path
TypeError:
no implicit conversion of nil into String
# ./spec/system/tasks_spec.rb:20:in `block (2 levels) in <main>'
1.2) Failure/Error: @pid = Process.spawn(*@command, options)
TypeError:
no implicit conversion of nil into String
環境
rails 6.1.3.7
selenium-webdriver 4.8.2
webdrivers 5.2.0
該当のコード
app/rspec/system/sample_spec.rb
require 'rails_helper'
RSpec.describe "Tasks", type: :system, js: true do
before do
driven_by :selenium_chrome_headless
end
scenario 'home画面に遷移する' do
visit root_path
.
.
.省略
end
end
テストを実行すると、冒頭で記載したエラーがvisit root_path
の部分で発生しました。
1.1) Failure/Error: visit root_path
TypeError:
no implicit conversion of nil into String
# ./spec/system/tasks_spec.rb:20:in `block (2 levels) in <main>'
1.2) Failure/Error: @pid = Process.spawn(*@command, options)
TypeError:
no implicit conversion of nil into String
他のテストでもvisit root_path
は使っていて問題はなかったので、なぜエラーが発生しているのか戸惑いました。
原因と対処法
原因
gem selenium-webdriver '4.8.2'
で起こるバグのようです。
ブラウザを立ち上げた時にエラーが発生します。
参考:
対処法
gem selenium-webdriver '4.8.3'
以上をインストールする。
(もしくは4.8.1
にダウングレードする)
Gemfile
gem 'selenium-webdriver', '~> 4.8.3'
バージョンを変更した後、テストを実行すると非推奨通知が表示されます。
2023-04-27 20:09:03 WARN Selenium [:logger_info] Details on how to use and modify Selenium logger:
https://selenium.dev/documentation/webdriver/troubleshooting/logging#ruby
2023-04-27 20:09:03 WARN Selenium [DEPRECATION] [:capabilities] The :capabilities parameter for Selenium::WebDriver::Chrome::Driver is deprecated. Use :options argument with an instance of Selenium::WebDriver::Chrome::Driver instead.
これを非表示にするには以下のような設定を追記します。
rspec
before do
driven_by :selenium_chrome_headless
Selenium::WebDriver.logger.ignore :capabilities
end