【问题标题】:"Element not found in the cache" in Selenium WebDriverSelenium WebDriver 中的“缓存中找不到元素”
【发布时间】:2013-10-11 05:31:37
【问题描述】:

有没有办法使用 Selenium WebDriver 清除浏览器缓存?如果我可以为更大的测试用例清除缓存会有所帮助,有时我会遇到以下异常:

“在缓存中找不到元素 - 页面可能在查找后已更改”。

我正在使用 java。任何建议将不胜感激,谢谢!

【问题讨论】:

  • 关于浏览器缓存的公认答案是错误的,与此问题无关。您接受的答案会误导正在寻找类似问题答案的其他人。问题的真正原因是对元素的过时引用。详情见下文。

标签: java selenium-webdriver browser-cache


【解决方案1】:

问题与浏览器缓存无关。这意味着您对浏览器 DOM 中的对象有一个过时的引用。通常可能有以下原因:

  1. 您在一页上找到一个元素。然后在浏览器中导航到另一个页面。然后在 Java 代码中,您尝试使用第一页中的元素。它不再有效,您将收到 StaleElementReferenceException 消息“缓存中找不到元素...”

  2. 您在一页上找到一个元素。然后使用 JavaScript 修改页面,您的元素从 DOM 中删除。即使创建了具有相同 ID 和样式的新元素,它也是一个新实例,并且您的 JavaCode 中的引用是陈旧的。您需要再次查找此元素,您将获得正确的参考。

【讨论】:

    【解决方案2】:

    目前,无法通过 Web 驱动程序 API 清除缓存。无论如何,如果您每次都可以启动一个新的浏览器实例,则应该清除 FFChrome 中的缓存,因为每次启动时都会创建一个新配置文件。

    如果无法创建新的浏览器实例,请在 Selenium 问题跟踪器列表中检查 issue #40 (Clear cache) 的 cmets 列表两种可能的解决方案:

    1) 从命令行清除 IE 缓存 2) 使用自定义配置文件禁用 FF 缓存

    【讨论】:

      【解决方案3】:

      您的问题与清除缓存无关,而最有可能是当您尝试与元素交互时,您正在使用的元素已更改。这有时会发生在动态页面上,页面上的元素变化很快,或者您可能尝试重新使用该元素。尝试在使用之前获取元素。

      【讨论】:

      • 正确,如果对页面上的元素使用过时的引用,则会出现此问题。
      【解决方案4】:

      您可以在对该特定元素执行任何操作之前使用显式等待,

      new WebDriverWait(driver,10).until(ExpectedConditions.presenceOfAllElements("Your object property"));
      

      【讨论】:

        【解决方案5】:

        IE浏览器

        每次页面加载后清除每个元素的缓存 ieCapabilities.setCapability(InternetExplorerDriver.ENABLE_ELEMENT_CACHE_CLEANUP, true);

        这将进行会话清理。 ieCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);

        【讨论】:

          【解决方案6】:

          以下代码应该可以工作:

          driver.manage().deleteAllCookies();
          

          【讨论】:

          • 这不会删除缓存。只有 cookie。
          • 这甚至不会删除 cookie。仅适用于当前域。
          • 使用最新的 chromedriver 不删除任何内容。 FF - 适用于当前的域 cookie。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-11
          • 2016-04-18
          • 2016-09-07
          • 2017-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多