0

更糟糕的是,我的测试通过了使用 Chrome 77 和 Chromedriver 77(测试通过,数据加载到网页等)。只有当我手动启动 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"中是假的!但单独使用 Chrome 77 时,这并不是错误的。

4

1 回答 1

3

我想到了!问题是 Chrome 77 默认开启 TrustedTypes API。但是如果通过 Chromedriver 启动 Chrome 77,它就会关闭,这是一个非常讨厌的错误

让 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 对象,而不是 String。

于 2019-09-11T19:29:01.807 回答