当前位置: 首页 > 知识库问答 >
问题:

例外:过时元素引用:元素未附加到页面文档

潘翰藻
2023-03-14

我的超文本标记语言-Page包含(除其他内容外)以下内容:

<ol id="links">
<li id="links_1"><a href="http://stackoverflow.com">stackoverflow</a></li>
</ol>

在测试页面的代码中,我将执行以下操作:

el←FindElementById'links_1'
(ACTIONS.MoveToElement el).Build.Perform

这个和

EXCEPTION: stale element reference: element is not attached to the page document
  (Session info: chrome=81.0.4044.129)

然而,这个错误似乎并不合理,因为元素仍然是活动的:

      el.Displayed
1
      el.Text
stackoverflow
      el.Location
{X=56,Y=282}

我如何解决这个问题?

(环境是APL。我在这里省略了一些APL细节,因为我担心它们可能会避免从核心问题上“分散注意力”)

在发帖前的研究过程中,我看到了一个问题:元素未附加到页面文档,但似乎不适用:

  • 如图所示,我正在执行FindElementById,并在找到它后立即访问它。DOM不变,页面是静态的

我也翻看了参考资料,但这种解释无济于事。

此外,没有循环进行,也没有任何东西改变页面。这真的很简单:GoToUrl*Find*MoveToElement。

我删除了chromedriver标签,因为我可以用Firefox和geckodriver重新编程。然而,在geckodriver中,我得到了“异常:以前没有见过的Web元素引用:”当我执行MoveToElement-但我可以执行el。单击,以与Chrome完全相同的方式访问其属性。

更新:一位同事对此进行了更深入的调查(超出了我的舒适区),发现在抛出这个“过时的异常”之前,有一个404异常(我不知道如何正确地表达它,以及它到底发生在哪里)。我只知道404是一个HTTP状态码——这就是它对我的全部意义。但很明显,浏览器没有被要求在任何地方导航,所以我不能与HTTP404有关联。这是否给那些更熟悉WebDriver内部结构的人敲响了警钟?

共有1个答案

黎征
2023-03-14

这是一个复杂的多层问题,但当我最终删除所有层时——它起作用了!导致这个问题的关键因素:

  • 由于我编写测试的方式存在错误,导致它被执行了两次——第二次运行总是暴露了问题。
  • 我在测试框架中实例化了ACTIONS,但没有意识到一个关键特性:它不断构建一系列操作,任何构建。执行...-刚刚添加到其中的步骤。解决方案:为每次运行创建单独的实例(可能,因为它相当轻量级)或调用ACTIONS. Reset(需要WebDriver4)。我从来没有遇到过WD4的问题(尽管它仍然是alpha)-但这给了切换的最终理由!
 类似资料: