Selenium WebDriver中的“缓存中找不到元素”

时间:2013-10-11 05:31:37

标签: java selenium-webdriver browser-cache

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

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

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

6 个答案:

答案 0 :(得分:4)

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

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

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

禁用FF缓存

答案 1 :(得分:3)

该问题与浏览器缓存无关。这意味着您对Browser DOM中的对象有陈旧的引用。通常可以有以下原因:

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

IE浏览器

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

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

答案 5 :(得分:-3)

以下代码应该有效:

driver.manage().deleteAllCookies();