Selenium WebDriver访问子元素

时间:2012-01-12 14:30:01

标签: selenium webdriver selenium-webdriver

我有一个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

2 个答案:

答案 0 :(得分:7)

没有人可以访问该范围,但问题是自StaleReferenceException以来Dom已经发生了变化(参见StaleReferenceException

这可能是因为代码启动时未完全加载页面或执行代码时更改页面。您可以尝试等待元素一段时间或捕获StaleReferenceException并再次尝试查找div和span。

答案 1 :(得分:1)

我的解决方案不是很花哨,但它的工作方式就像瑞士手表(当然我的情况)。所以我的代码在循环中调用父元素,在其中查找不同的子元素。什么都没有改变 - 只是简单的查询和异常开始发生。所以!我在每次搜索父元素之前添加了Thread.Sleep(2000)命令,它解决了问题。不优雅,但每次都用最少的代码进行调试。