3行まとめ
- SeleniumやBackstopを使用してChromiumなどでスクリーンショットを取るVRTでChrome(Chromium)のバージョンが121の場合、要素を選択できず落ちてしまうことがある
- ウインドウサイズの変更をすることで発生する可能性がある
- 現在のところ解決策はChrome(Chromium)のバージョンを下げるか
--headless=old
にする必要がある。
所感
私の環境では、Backstop(内部はPuppeteer)を使っている環境で、Chromiumのバージョンを121
に上げたところ、400ほどあるVRTの半分が落ちてしまっている問題が発生しました。エラーでは、Element Not Found
が多くその次にConnection Timeout
エラーもありました。また、スクリーンショットがとれても502になるケースも数多く見られています。
このテストでは、ci内にローカルなサーバーを立てて比較するのですがほとんどローカル環境で失敗してしまっています。そのため、ローカル環境のアクセスログ(nginx)を確認したところ499のエラーになっていることがわかりました。499はクライアント側でコネクションが閉じられた際に出されるものらしいのでブラウザ側の問題っぽいです。
調査したところ、このようなPRにたどり着きました(教えていただきました)。
どうやら、ウィンドウサイズが小さくなりすぎるためエラーになるっぽいです。--headless=old
にすると直るらしいので試したところ、解決しました。
現在、私は--headless=old
にしましたが、Chrome 121にバグが起きているという状況を考えるとバージョンをダウングレードしてテストしてもいいかもしれません。とはいえ、最新ブラウザでテストできなくなるのでVRTはそれでいいんかという話題もありそうです。
もし、同じ問題が発生しているのであれば、--headless=old
に設定の上、 4709 - chromedriver - WebDriver for Google Chrome - Monorail をウォッチして解決してリリースされたらnew
に戻すようにするのが一番いいかもしれません*1。
*1:忘れないように気をつけましょう