selenium - 陈旧的网页元素
问题描述
当似乎不应该提出一个过时元素异常时,有什么建议可以解决?使用中的许多 javascript 库中的任何一个都足够公平,任何更新都可能会删除相应的 DOM 节点,然后从断开的节点中删除 FindElement,您可以获得过时的元素。
问题似乎是,我正在测试的有问题的测试我知道一旦显示内容是静态的。同样的代码在 Firefox 上也可以 100% 运行,但是 Chrome 和 Edge 的 WebDrivers(如果不是很接近?)都给出了意想不到的“过时元素异常”。
我的代码获取一个节点,该节点是给定子树的父节点,其中包含所需的信息。对于父节点,使用“Driver.FindElement()”,但随后的 XPath 查询是相对于“父”节点的。
例如给定这个 DOM 树:
<node id='Closest node By ID'>
<span>
<div>text i want</div>
<div>ignore this</div>
<div>text to get</div>
</span>
<span>
<!-- same pattern ... -->
</span>
</node>
var parentNode = WebDriver.FindElement(ByID("ID"));
var txt1 = parentNode.FindElement(By.XPath("./span/div[1]");
var txt2 = parentNode.FindElement(By.XPath("./span/div[3]");
问题是在某些时候执行 XPath 查询会导致“陈旧元素异常”。
我有工作复制我很乐意分享如果有人可以帮助调查这个问题,进入 WebDriver 本身可能超出我的范围...... Ping 我很乐意提供 C# 详细信息的完整复制以及可能需要的任何其他内容。
啊,对于生命体征:Chrome && WebDriver 都匹配。
谷歌浏览器是最新的,实际上检查是 92,更新到 93 重新运行和相同的行为。版本 93.0.4577.63(官方版本)(64 位)
C# .Net 框架 4.8 Win 10“版本 21H1(OS 构建 19043.1202)”
提前致谢。
解决方案
推荐阅读
- javascript - Gherkin 多步骤定义匹配
- hyperlink - 如何显示包含超链接的 Draft.js 数据?
- linux - 如何在每个月的第一个星期四安排 cron
- python - Pytoch,在 macOS Catalina 问题上导入 TorchVision
- flutter - How to implement Wear OS notifications using flutter?
- go - 如何避免共享包的依赖循环?
- c++ - thread failed to dedact callback function
- html - Close modal button doesn't work in bootstrap
- testing - 使用夹具下载 XML
- javascript - 如何正确清理 js 代码中使用的输入值?