🩺

E2Eテスト実行を検知するTips

2022/09/12に公開

先日、とあるABテストを実施したところE2Eテスト上でABテストに当選すると、テストが落ちるという問題に直面した際に教えてもらったテクニック。

ブラウザが自動操作されているかどうかは、 windows.navigator.webdriver というプロパティに格納されているそう。

https://developer.mozilla.org/ja/docs/Web/API/Navigator/webdriver

MDNによればexperimentalな機能であるようだが、主要なブラウザでは対応済みのためあまり気にせずに使うことができそうです。

if (!window.navigator.webdriver) {
    // テスト環境上では動かしたくない処理
}

上記のような形で実装することで、自動操作されているブラウザでは実行しない処理を書くことができます。

筆者の勤め先ではmablというE2EテストのSaaSが導入されていますが、この環境では上記の処理によって問題を回避することができました。

試していないので、推測にはなりますが他のサービスやOSSも基本的に同様の仕組みを利用してテストを実現していると考えられるので、この方法で回避できると思います。

Puppeteerを使ったスクレイピングなどに対する簡易的な防御にもなるかもしれないですね。(プロパティを上書きしてしまえばいいだけなので簡易的な抑止効果しかなさそうだけど)

Discussion