首页 > 解决方案 > 陈旧的网页元素

问题描述

当似乎不应该提出一个过时元素异常时,有什么建议可以解决?使用中的许多 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)”

提前致谢。

标签: seleniumxpathstaleelementreferenceexception

解决方案


推荐阅读