2015-10-20 67 views
-1

我不明白的概念:,我需要添加「wait.ignoring」到「ExpectedConditions.visibilityOfElementLocated」

wait.ignoring(StaleElementReferenceException.class).until 
(ExpectedConditions.visibilityOfElementLocated(By.xpath("bla bla"))); 

我換句話說,爲什麼我需要有這樣一部分:

ignoring(StaleElementReferenceException.class) 

ExpectedConditions.visibilityOfElementLocated 

等待,直到元素可見,所以它不是過時。

+0

如果您查看文檔,您最近可能會問很多問題。請谷歌您的問題,並花一些時間閱讀之前提出這樣的基本問題。 – JeffC

回答

1

講的FluentWait一個實例(這是什麼WebDriverWait是基於)忽略異常的總的印象是,如果這種異常情況發生時,民意調查的DOM,它會繼續投票,而不是讓異常涓流。

ExpectedConditions.visibilityOfElementLocated具體情況並無裨益明確忽略StaleElementReferenceException因爲ExpectedConditions.visibilityOfElementLocated已經忽略它。其中有一個explicit try... catch... block,如果元素陳舊,它將返回null。我不知道舊版本的Selenium是否沒有這個try... catch...塊。也許對於一些早期版本的Selenium,有必要明確告訴FluentWait忽略此異常。

等待,直到元素可見,以便它不是陳舊的。

ExpectedConditions.visibilityOfElementLocated可能需要處理陳舊的元素。它執行它的測試分爲兩步:

  1. 得到一個WebElement對應於用戶通過定位。

  2. 請致電.isDisplayed()關於這個元素。

這兩個步驟之間,有可能要改變的DOM,使得在所述第一步驟中獲取的元素是已過時(==沒有在文檔更長)通過時的第二步驟運行。這是一個非常小的風險窗口,但它存在,因此必須予以處理。

2

簡而言之,您可以像這樣理解上述代碼。

ignoring(StaleElementReferenceException.class) 

上面的忽略用於忽略等待執行時可能發生的特定異常。例如,如果在發生StaleElementReferenceException時等待元素,它將忽略該異常並且不會將異常拋出到外部。

甲陳舊元件參考拋出異常在兩種情況之一中,第一比第二比較常見的:

  1. 的元件已被完全刪除。
  2. 該元素不再附加到DOM。

Stale Element Reference Exception Documentation