circleCIで通常通り動いていたテストコードが突然動かなくなりましたが解決したのでその方法を書いていきます。
#開発環境
Ruby 2.6.2
Rails 5.2.3
Docker 18.09.2
docker-compose 1.23.2
#今回発生したエラー
Selenium::WebDriver::Error::UnknownError:
unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
##原因
エラーを調べたところ日本語での記事が少なく詳しくはわからなかったのですが、メモリ不足によってクラッシュしてしまうとのこと。
ブラウザのサイズを小さくすれば解決するとの記事を見て試してみたのですが、僕の場合小さくしても解決しませんでした。
#解決方法
rails_helperのchromeOptionsのところに--no-sandbox
と--disable-dev-shm-usage
というargumentsを追加してください。--disable-dev-shm-usage
と書くことでChromeは/tmpディレクトリを代わりに使用するようになるみたいです。メモリの代わりにディスクが使用されるので、実行が遅くなる場合があるみたいですがそんなに変わってない気がします。
Capybara.register_driver :selenium_remote do |app|
driver = Capybara::Selenium::Driver.new(
app,
browser: :remote,
desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
args: [
'window-size=500,500', #念の為サイズも小さく
'headless',
'--no-sandbox', # crush回避
'--disable-dev-shm-usage' # crush回避
]
}
),
url: 'http://chrome:4444/wd/hub',
)
end
これで解決すると思います。
もし間違いがあれば訂正お願いいたします。
#参考サイト
https://qiita.com/jb-vasseur/items/d3aa33e08ebba3b9231e
https://stackoverflow.com/questions/53902507/unknown-error-session-deleted-because-of-page-crash-from-unknown-error-cannot