ITトラブル解決録-SeleinumIDEの為にバックフォワードキャッシュをオフにする方法-
つ~じ~です。突然ですが、弊社のSeleniumIDE自動テストの記事は今回で最後になるかもしれません。な、なんだってー!?
…まぁ、半分冗談で半分ガチです。それというのも、最近はSeleniumIDEのページで「この拡張機能はまもなくサポートされなくなる可能性があります」とか書かれたり、
SeleniumIDEのコミュニティに「Why is v4 not a webextension anymore?(なぜv4はWeb拡張機能ではなくなったのですか?)」とか書かれていたり、
※2024年現在GoogleChromeで公開されているSeleniumIDEプラグインはv3
https://github.com/SeleniumHQ/selenium-ide/wiki/Selenium-IDE-v4
先行きがだいぶ不安です。
そんな中、弊社の自動テストにおいて致命的なトラブルが発生いたしました。
バックフォワードキャッシュ問題
いつも通り弊社で自動テストを動かしていたところ、以下のようなエラーが出ました。
“The page keeping the extension port is moved into back/forward cache, so the message channel is closed.”
「拡張ポートを保持しているページはバック/フォワード キャッシュに移動されるため、メッセージ チャネルは閉じられます。」
こちら、いつもは普通に使えていたのに急にこんなエラーが出るようになりました。バックフォワードキャッシュとは?調べてみたところ、
https://web.dev/articles/bfcache
「バックフォワード キャッシュ(bfcache)は、前のページと次のページにすぐに移動できるようにブラウザを最適化する機能です。 この機能を使うと、特にネットワーク速度やデバイスの動作が遅い環境で、ユーザーのブラウジング体験が大幅に向上します。」
つまり、進むや戻るの処理を効率化するために導入されたキャッシュシステムのようです。どうやらSeleniumIDEはこのバックフォワードキャッシュと相性が悪いらしく、バックフォワードキャッシュが機能しているブラウザでは上手く機能しないようです。
この機能は2024年現在、GoogleChromeで標準実装されている機能であるため、このままではSeleniumIDEが利用できません。
一昔前はChrome内部オプション設定のchrome://flags/#back-forward-cacheにアクセスするとバックフォワードキャッシュのフラグオンオフが切り替えられたのですが、いつの間にかこの設定が切り替え不可(メニューが存在しない)になっておりました。
本格的に弊社の自動テストの危機となったのですが、その対策をどう行ったかを本稿でご紹介いたします。(ここまでが本稿の前置きです!)
ネットで色々調べまくり、Githubの英語のコミュニティにもアクセスし、やっと有用な対応方法を見つけられました。
バックフォワードキャッシュをオフにする方法
- デスクトップに Chrome ショートカットを作成
- ショートカットの[プロパティ]を開き、リンク先に以下のコマンドを配置
“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –disable-features=DisconnectExtensionMessagePortWhenPageEntersBFCache
- このショートカットをダブルクリックしてChromeを開き、SeleniumIDEを実行する
これで上手くいきます。上記は元々chrome://flags/#back-forward-cacheで更新していたフラグをコマンド処理でdisableに更新させるためのものです。メニューが存在しなくなったとご紹介しましたが、内部的には残っているようです。ショートカットのプロパティに上記のコマンドを仕込んでおくことで、ショートカット実行時にコマンドを叩いた上でChrome起動、という事が可能になります。
なんとかSeleniumIDEは使えるようになりましたが、安心はできません。上記のコマンドがいつまで機能するのか保証できない為です。
そのため弊社では今後の自動テストに関してどのようにアプローチしていくか検討中です。有力なのはSeleniumIDE ver4.xの導入ですが、
https://github.com/SeleniumHQ/selenium-ide/blob/trunk/README.md
原因がわからないエラーに直面しており、現在調査中です。
なんとか自動テストの活用を継続していけるよう、頑張って参りたいと思います。今回はこれにて。
補足
back/forward cacheをオフにする是非については、諸々検討した結果、
「バックフォワードキャッシュはブラウザの進むと戻るを効率化するためにキャッシュを作るだけのものなので、それをオフにしても処理速度が変化するだけで、自動テストで求められている要件には大きく影響しない」
という判断でオフをOKにしてます。