2016-06-28 109 views
0

有人能解釋一下這個「fluentwait」的工作原理和結構嗎?Selenium中的fluentwait Java

Wait<WebDriver> wait = new FluentWait<>(driver) 
.withTimeout(60, TimeUnit.SECONDS) 
.pollingEvery(5, TimeUnit.SECONDS) 
.ignoring(NoSuchElementException.class); 

wait.until(new com.google.common.base.Function<WebDriver, Boolean>() { 
@Override 
public Boolean apply(WebDriver driver) { 
    return null; 
} 
}); 
+0

[有沒有需要在webdriver腳本之間添加等待](http://stackoverflow.com/questions/37939413/is-there-a-need-to-add-waits-in -The-of-the-the-script-in-webdriver) – vv88

回答

1

FluentWait實例限定的最大時間量等待狀態。代碼中的以下語句定義了等待時間。

.withTimeout(60, SECONDS) 

還有頻率與檢查條件。下面定義的頻率

.pollingEvery(5, TimeUnit.SECONDS) 

此外,爲忽略特定類型的異常在等待,如NoSuchElementExceptions在頁面上的元素進行搜索時,用戶可配置的等待。以下是忽略「NoSuchElementExceptions」

.ignoring(NoSuchElementException.class); 

當使用FluentWait:當您嘗試測試每x秒後可能會出現的一個元素的存在/分鐘

+0

我對這個完全陌生.... .TimeTime,.pollingEvery,.ignoring是java命令? ....你能解釋一個實際的場景嗎?....用代碼.... –

+0

他們是在** org.openqa.selenium.support.ui.WebDriverWait **中定義的java方法。我們使用FluentWait,其中元素有時在1秒內加載,在30秒內有時加載,所以我們在**。withTimeout(30,TimeUnit)中給出總時間。秒)**驅動程序應等待元件加載的次數,在這種情況下爲30秒。 **。pollingEvery(5,TimeUnit.SECONDS)**用於查找每5秒加載一次的元素。因此,如果元素被加載,讓我們說在7秒,所以你不必等待所有的30秒來操作元素。 –

1

要什麼明白的是在很多細節

http://toolsqa.com/selenium-webdriver/advance-webdriver-waits/

這裏解釋

http://toolsqa.com/selenium-webdriver/wait-commands/

更多的解釋:

com.google.common.base.Function是一個通用的接口。你必須學會​​Java泛型瞭解什麼通用接口/類是從here

從你的代碼,當我們說com.google.common.base.Function這意味着這個功能的實現將接受的webdriver作爲輸入參數,返回一個布爾值。

WebDriverWait.Until方法將繼續一直調用您的Function.apply方法,直到您應用方法返回true。一旦它返回true WebDriverWait會認爲你的等待結束邏輯已經成功,它將在最後等待。

目前你的等待功能沒有做任何事情,它只是等待超時發生。這必須在最後拋出TimeOutException。

什麼等待你必須寫的邏輯應寫在.apply方法中。一旦條件得到滿足或不滿足,對於布爾或非空值和空值爲參考類型返回true或false。

+0

這是我使用它作爲參考的鏈接....他們沒有解釋那麼多的代碼 –

+0

我認爲你沒有正確看待第一個鏈接。這是最詳盡的解釋之一。你能更明確地知道你無法理解的內容嗎? – virusrocks

+0

wait.until(新com.google.common.base.Function (){ @覆蓋 公共布爾申請(webdriver的驅動程序){ 返回NULL;} 請解釋一下這部分 –