【问题标题】:Selenium WebDriver access a sub elementSelenium WebDriver 访问子元素
【发布时间】:2012-02-08 20:07:19
【问题描述】:

我有一个带有唯一 ID 的 div。在div 之下是一堆span 元素,它们具有className=fooclassName=foo 有几个 span 元素,但它们对于每个 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

我是否误解了如何从唯一的 div 下获取 span

【问题讨论】:

    标签: selenium webdriver selenium-webdriver


    【解决方案1】:

    不,你访问跨度是正确的,但问题是 Dom 已经改变,因为 StaleReferenceException 是关于(见StaleReferenceException

    这可能是因为代码启动时页面未完全加载或代码执行时页面发生变化。您可以尝试为该元素等待更长时间,或者捕获 StaleReferenceException 并再次尝试查找 div 和 span。

    【讨论】:

    • 你也可以在这里查看a possible solution
    • 如果我进入睡眠状态并等待几秒钟,它似乎可以正常工作。没有很好的方法来判断页面是否已完全加载,我想不幸的是我只需要使用睡眠
    • 您可以将睡眠和捕获异常结合起来。首先尝试在不使用睡眠的情况下访问这两个元素,当失败时使用睡眠,然后再试一次
    • 可以很好地捕获异常。我有一个 getText() 和一个 click()。尽管可以进一步单击,但它会在 getText() 处引发异常。我发现了异常,因为我的代码没有任何问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 2021-07-04
      • 2021-03-02
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多