我有一个div
,其中包含唯一ID。在div
下,有span
个元素className=foo
。有几个span
个元素className=foo
,但它们对于每个div
都是唯一的(如果清楚的话)。所以我的Selenium代码首先得到唯一的div
作为一个web元素,然后尝试获取该元素并按类名获取span
,如此
element = sDriver.findElement(By.id("c_"+cID));
String sTest = element.findElement(By.className("actions")).getText();
在第二行,它每次都抛出一个异常
org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Command duration or timeout: 22 milliseconds
我是否误解了如何从唯一的span
下获取div
?
答案 0 :(得分:7)
没有人可以访问该范围,但问题是自StaleReferenceException以来Dom已经发生了变化(参见StaleReferenceException )
这可能是因为代码启动时未完全加载页面或执行代码时更改页面。您可以尝试等待元素一段时间或捕获StaleReferenceException并再次尝试查找div和span。
答案 1 :(得分:1)
我的解决方案不是很花哨,但它的工作方式就像瑞士手表(当然我的情况)。所以我的代码在循环中调用父元素,在其中查找不同的子元素。什么都没有改变 - 只是简单的查询和异常开始发生。所以!我在每次搜索父元素之前添加了Thread.Sleep(2000)命令,它解决了问题。不优雅,但每次都用最少的代码进行调试。