2012-01-12 135 views
5

我有一个div具有唯一的ID。在那div是一堆span元素有className=foo。有几个span元素与className=foo,但它们是唯一的每个div(如果这是明确的)。所以,我的硒代码首先获取独特div作为网络元素,然后尝试采取元素,并得到由类名span像这样Selenium WebDriver访问子元素

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 

我误解如何从独特的div下取得span

回答

7

都能跟得上you'right访问的跨度,但问题是,由于StaleReferenceException的大教堂已经改变有关(见StaleReferenceException

这可能会导致由于页面未完全加载的代码开始或变更时代码执行时。您可以尝试为元素等待一段时间,或者捕获StaleReferenceException并再次尝试查找div和跨度。

+0

您还可以在此查看[可能的解决方案](http://stackoverflow.com/a/7474518/1077279)。 – shamp00 2012-01-12 15:06:12

+0

这似乎是如果我在睡觉,并等待几秒钟,它工作正常。如果没有好的方法来判断页面是否已经完全加载,我想不幸的是我只需要使用睡眠 – ducati1212 2012-01-12 16:01:45

+0

,您可以同时结合睡眠和捕捉异常。尝试访问这两个元素首先没有睡眠,当它失败时使用睡眠,然后再试一次 – chaosr 2012-01-12 19:55:18

1

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

相关问题