簡體   English   中英

Selenium WebDriver 中的“緩存中未找到元素”

[英]“Element not found in the cache” in Selenium WebDriver

有沒有辦法使用 Selenium WebDriver 清除瀏覽器緩存? 如果我可以清除較大測試用例的緩存會有所幫助,有時我會收到以下異常:

“在緩存中未找到元素 - 也許頁面自查找以來已更改”。

我正在使用Java。 任何建議將不勝感激,謝謝!

目前,無法通過 Web 驅動程序 API 清除緩存。 無論如何,如果您每次都可以啟動瀏覽器的新實例,則應在FFChrome 中清除緩存,因為每次啟動時都會創建一個新配置文件。

如果無法創建新的瀏覽器實例,請查看 Selenium 問題跟蹤器中關於問題 #40(清除緩存)的評論,列出了您的問題的兩個潛在解決方案:

1) 從命令行清除 IE 緩存 2) 使用自定義配置文件禁用 FF 緩存

該問題與瀏覽器緩存無關。 這意味着您對瀏覽器 DOM 中的對象有一個過時的引用。 通常可能有以下原因:

  1. 您可以在一頁上找到一個元素。 然后在瀏覽器中導航到另一個頁面。 然后在 Java 代碼中,您嘗試使用第一頁中的元素。 它不再有效,您將收到帶有消息“緩存中未找到元素...”的 StaleElementReferenceException

  2. 您可以在一頁上找到一個元素。 然后使用 JavaScript 修改頁面,您的元素從 DOM 中刪除。 即使創建了具有相同 ID 和樣式的新元素,它也是一個新實例,並且 JavaCode 中的引用已過時。 你需要再次查找這個元素,你會得到正確的引用。

您的問題不在於清除緩存,而很可能在您嘗試與元素交互時,您正在使用的元素已更改。 這有時會發生在動態頁面上,頁面上的元素變化很快,或者您嘗試重新使用該元素。 在使用它之前嘗試獲取元素。

您可以在對該特定元素執行任何操作之前使用顯式等待,

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

IE瀏覽器

每次頁面加載后清除每個元素的緩存 ieCapabilities.setCapability(InternetExplorerDriver.ENABLE_ELEMENT_CACHE_CLEANUP, true);

這將進行會話清理。 ieCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);

以下代碼應該可以工作:

driver.manage().deleteAllCookies();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM