在Selenium WebDriver中 "缓存中找不到元素"

问题描述 投票:2回答:6

有什么方法可以用Selenium WebDriver清除浏览器缓存?如果我可以清除较大的测试用例的缓存,那将会很有帮助,有时我会得到以下异常。

"Element not found in the cache - perhaps the page has changed since it was looked up".

我使用的是java。任何建议都将被感激,谢谢!

java selenium-webdriver browser-cache
6个回答
3
投票

这个问题与浏览器缓存无关。这意味着你在浏览器DOM中有一个过时的对象引用。通常情况下,有以下原因。

  1. 你在一个页面上找到一个元素。然后在浏览器中导航到另一个页面。然后在Java代码中,你试图使用第一页的元素。它不再有效,你会得到一个StaleElementReferenceException,信息是 "Element not found in the cache ..." 。

  2. 你在一个页面上找到了一个元素。然后页面被JavaScript修改,你的元素从DOM中被删除。即使创建了一个具有相同ID和样式的新元素,它也是一个新的实例,在你的JavaCode中的引用是陈旧的。你需要重新查找这个元素,你会得到正确的引用。


4
投票

目前,没有办法通过web驱动API来清除缓存。无论如何,如果你每次都能启动一个新的浏览器实例,那么缓存应该会被清除。FF浏览器 因为每次启动时都会创建一个新的配置文件。

请查看评论以了解 问题#40 (清除缓存) 在Selenium问题跟踪器中,如果创建一个新的浏览器实例是不可能的,那么列出了两个潜在的解决方案。

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


2
投票

你的问题不在于清除缓存,而很有可能是当你试图与元素进行交互时,你正在使用的元素已经发生了变化,这有时会发生在动态页面上,页面上的元素变化很快,或者你试图重新使用元素。这种情况有时会发生在动态页面上,页面上的元素变化很快,或者你试图重新使用该元素。在使用元素之前,请尝试获取该元素。


0
投票

你可以在对该元素进行任何操作之前使用显式等待。

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

-1
投票

IE浏览器

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

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


-3
投票

下面的代码应该可以工作。

driver.manage().deleteAllCookies();
© www.soinside.com 2019 - 2024. All rights reserved.