【概要】
seleniumを利用したテスト時に、遭遇したエラーです。
【環境】
・Docker
・rspec
・factory_bot
Selenium::WebDriver::Error::InvalidSessionIdErrorについて
specでテストを実行した際に、下記のようなエラーが吐かれました。
user_session.rb
require 'rails_helper'
RSpec.describe 'UserSessions', type: :system do
describe 'ログイン前' do
#省略
context 'フォーム値が正常' do
let(:user) { create(:user) }
it 'ログイン処理が成功' do
visit login_path
fill_in 'email', with: user.email
fill_in 'password', with: 'password'
click_button 'ログイン'
expect(page).to have_content 'ログインに成功しました'
expect(current_path).to eq root_path
end
end
end
end
ターミナル実行ログ
x.x) Failure/Error: Unable to infer file and line number from backtrace
Selenium::WebDriver::Error::InvalidSessionIdError:
invalid session id
解消方法
結論としては、メモリ不足のようでした。
compose.ymlで下記文言を追加することで、メモリ不足を解消し、実行することができます。
docker-compose.yml
chrome:
image: selenium/standalone-chrome:latest
shm_size: 256m # ← 追加しないと既存は64m
ports:
- 4444:4444
ターミナル
root@751b72a5cf5c:/myapp# bundle exec rspec spec/system/user_sessions.spec.rb
UserSessions
ログイン前
フォームの入力値が未入力
ログイン処理が失敗
emailのフォーム値が異常
ログイン処理が失敗
passwordのフォーム値が異常
ログイン処理が失敗
フォーム値が正常 ←メモリ不足を解消
ログイン処理が成功
Finished in 17.5 seconds (files took 23.53 seconds to load)
4 examples, 0 failures
また、設定として、画像サイズをリサイズするといいかもです。
spec/support/capybara.rb
options.add_argument('window-size=950,800')
【引用】