例外:过时的元素参考:元素未附加到页面文档

时间:2020-05-04 16:29:42

标签: selenium selenium-webdriver selenium-webdriver4

我的HTML页面包含以下内容:

<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细节,因为我担心它们可能会避免从核心问题中“分散注意力”)

发布之前的研究过程中,我看到了问题stale element reference: element is not attached to the page document,但似乎并不适用:

  • 如图所示,我正在执行FindElementById,并在找到它后立即对其进行访问。 DOM不变,页面是静态的。
  • 关于它不再成为DOM一部分的说明不适用:它已找到,并且正如我试图展示的那样,我可以访问诸如DisplayedText之类的属性。

我也经历过reference,但是这种解释没有帮助。

此外,没有循环正在进行,也没有任何改变页面。这真的很简单:GoToUrl *查找* MoveToElement。

我删除了chromedriver-tag,因为我可以使用Firefox和geckodriver对其进行复制。但是,使用geckodriver时,我执行MoveToElement时会得到“例外:以前未见过的Web元素引用:”-但我可以执行el.Click并以与Chrome完全相同的方式访问其属性。

更新:一位同事对其进行了更深入的调查(超出了我的舒适范围),发现在抛出此“陈旧异常”之前,存在(我不确定该如何正确地措辞,确切发生的地方)的404例外。我只知道404是HTTP状态代码-这对我来说就意味着全部。但是很明显,没有要求浏览器在任何地方导航,因此我与HTTP404无关。也许这会和熟悉WebDriver内部的人敲响警钟吗?

1 个答案:

答案 0 :(得分:0)

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

  • 由于我编写测试的方式存在错误,导致该测试执行了两次-而第二次运行始终会暴露该问题。
  • 我已经在测试框架中实例化了1, [Person1, Person2], [A,B], [12,15],却没有意识到一个关键特性:它不断构建一系列动作,只是在其中添加了Build.Perform ..- steps。解决方案:为每次运行创建单独的实例(可能是因为它相当轻巧)或调用ACTIONS(需要WebDriver4)。我从未遇到过WD4的问题(尽管它仍然处于alpha状态)-但这是切换的最终原因!