使用JavaScript在Selenium中获取jQuery对象时遇异常求助
问题解决:Selenium获取表单配置时的两个错误
1. StaleElementReferenceError:元素已脱离DOM
你没直接引用DOM元素却触发这个错误,核心原因是Bar.options内部包含了DOM元素的引用。Selenium在把脚本执行结果序列化返回给客户端时,会自动处理这些DOM元素引用,一旦这些元素被页面重新渲染或移除,就会抛出这个错误。
解决办法:不要直接返回Bar.options,而是提取你需要的纯数据字段,避开DOM元素引用。示例:
const foo = await driver.executeScript(` const options = Bar.options; // 只提取非DOM相关的配置字段 return { donationAmount: options.donationAmount, currencyType: options.currencyType, paymentMethods: options.paymentMethods }; `);
2. JavascriptError:循环对象值
这个错误是因为Bar.options内部存在循环引用的对象结构(比如对象A的属性指向对象B,对象B又反向指向对象A)。Selenium无法序列化这种循环结构的对象,因此抛出该错误。
解决办法:在页面端将对象转为JSON字符串(同时处理循环引用),再在客户端解析。示例:
const fooStr = await driver.executeScript(` return JSON.stringify(Bar.options, (key, value) => { // 遇到循环引用的属性时,只保留标识性字段(比如ID)而非整个对象 if (typeof value === "object" && value !== null && key === "parentElement") { return value.id; } return value; }); `); const foo = JSON.parse(fooStr);
也可以直接在脚本里手动剥离循环引用部分,只返回无循环的纯数据结构。
内容的提问来源于stack exchange,提问作者Paul Joiner
相关产品推荐
相关产品推荐

