我的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不变,页面是静态的。Displayed
或Text
之类的属性。我也经历过reference,但是这种解释没有帮助。
此外,没有循环正在进行,也没有任何改变页面。这真的很简单:GoToUrl *查找* MoveToElement。
我删除了chromedriver-tag,因为我可以使用Firefox和geckodriver对其进行复制。但是,使用geckodriver时,我执行MoveToElement
时会得到“例外:以前未见过的Web元素引用:”-但我可以执行el.Click
并以与Chrome完全相同的方式访问其属性。
更新:一位同事对其进行了更深入的调查(超出了我的舒适范围),发现在抛出此“陈旧异常”之前,存在(我不确定该如何正确地措辞,确切发生的地方)的404例外。我只知道404是HTTP状态代码-这对我来说就意味着全部。但是很明显,没有要求浏览器在任何地方导航,因此我与HTTP404无关。也许这会和熟悉WebDriver内部的人敲响警钟吗?
答案 0 :(得分:0)
这是一个复杂且多层的问题,但是当我最终删除所有层时,它起作用了! 导致此问题的关键因素:
1, [Person1, Person2], [A,B], [12,15]
,却没有意识到一个关键特性:它不断构建一系列动作,只是在其中添加了Build.Perform ..- steps。解决方案:为每次运行创建单独的实例(可能是因为它相当轻巧)或调用ACTIONS
(需要WebDriver4)。我从未遇到过WD4的问题(尽管它仍然处于alpha状态)-但这是切换的最终原因!