回答我自己的问题,以防其他人遇到这个问题或者我忘记了我做了什么。
在对 CMS 生成的捐赠表单进行自定义运行 Selenium 测试时,我遇到了无法解释的错误。我需要从我的页面获取表单的配置选项。所以我这样做了:
const foo = await driver.executeScript('return Bar.options');
这给了我这些:
首先解决循环对象问题,我记得页面配置对象包含 jQuery 对象。无论如何,我不能(不想)在我的 Selenium 东西中使用它,所以我这样做了:
const foo = JSON.parse(await driver.executeScript(`return JSON.stringify(Bar.options.theOneIWant, function (key, value) {
if (value?.jquery)
return {
id: value.attr('id'),
value: value.val()
};
else
return value;
});`));
瞧瞧!我有一组自定义选项,它绕过 jQuery 的东西,同时保留一些值,以防万一我以后需要它们。此外,StaleElementReferenceError 神奇地消失了。我希望这是一个 许多嵌套的 jQuery 对象指向我需要操作的 DOM 的各个位。当 CMS 重写 DOM 时,这些项目会重新生成,因此我不关心测试该特定错误。
更短的答案和更多的工作只是从我的自定义代码中消除 jQuery。管它呢,这让我的生活更轻松。
正文中自我回答的问题。但是 TLDR:
const foo = JSON.parse(await driver.executeScript(`return JSON.stringify(Bar.options.theOneIWant, function (key, value) {
if (value?.jquery)
return {
id: value.attr('id'),
value: value.val()
};
else
return value;
});`));