0

さらに悪いことに、私のテストは Chrome 77 と Chromedriver 77 を使用してパスします (テストはパスし、データは Web ページに読み込まれます)。Chrome 77 ブラウザを手動で起動して、失敗することをテストした場合にのみ発生します。

基本的に私のコードが行っていることは次のとおりです。

// Get the query parameter "operation" from the URL
let match = new RegExp("[?&]operation=([^&]*)").exec(window.location.search);
let param = match && decodeURIComponent(match[1].replace(/\+/g, " "));

// Sanitize the URL from XSS Injection
let param = param ? window.DOMPurify.sanitize(param) : param;

if(param === "View") {
    // Load data from the server
}

問題は、Chrome 77param === "View"が false であることです。しかし、Chrome 77 を単独で使用する場合、それは誤りではありません。

4

1 に答える 1

3

私はそれを考え出した!問題は、Chrome 77 がデフォルトで TrustedTypes API をオンにすることです。しかし、Chrome 77 が Chromedriver を介して起動された場合はオフになります。これはかなり厄介なバグです。

Chrome 77 / Chromedriver 77 が手動でページにアクセスしたときのように失敗するのを修正するには、次の chrome 機能を有効にします。

--enable-blink-features=TrustedDOMTypes

--no-sandboxまたはと同じ場所に配置します--disable-infobars

すごい!これで、テストが失敗するはずです。次に、エラーを修正するには、次の行を変更します。

// Sanitize the URL from XSS Injection
let param = param ? window.DOMPurify.sanitize(param) : param;

代わりにこれに:

// Sanitize the URL from XSS Injection
let param = param ? (window.DOMPurify.sanitize(param) || "").toString() : param;

toString()最も重要な部分です。現在、文字列ではなく TrustedType オブジェクトが返されています。

于 2019-09-11T19:29:01.807 に答える