2016-03-15 118 views
0

我已經開始越來越多地使用顯式等待來處理頁面上的異步事件。例如,我將等待一個元素點擊之前點擊。如何等待Selenium Webdriver中的元素沒有改變?

然而,很多時候,我也面臨這種情況,當我需要等待一個元素變得穩定,即停止變化之前,我會採取行動。例如,我可以在頁面上執行查詢,並等待搜索結果(顯示在列表或表中)停止更改,然後檢索結果。

當然,這個等待會有超時時間。所以簡而言之,我想等待列表或表格的值不變,比如5秒。

如何實現這種等待?任何人都可以在代碼中提供一個簡單的例子

謝謝,

+0

考慮到提供的信息量,這很難回答。你怎麼知道元素是「穩定的」?請提供一些示例HTML。在搜索之前,搜索期間(但尚未穩定)和穩定時,頁面看起來像什麼? – JeffC

+0

@JeffC一個例子是:在搜索過程中,搜索結果列表的大小正在變化(增加)。例如,搜索結果列表大小在2秒內未發生變化時搜索結束。 – user1559625

回答

0

使用FluentWait將完成這項工作。它的優勢是implicitWaitexplicitWait是它使用輪詢和超時頻率。例如,對於輪詢頻率,我們有5秒和1秒的超時值。該元素將每1秒檢查一次,直到達到超時值(5秒)。如果超過超時值而沒有任何結果,則會引發異常。

FluentWait在AJAX應用程序以及元素加載時間經常波動的情況下很有用,因爲它在等待元素時忽略了NoSuchElementExceptions等特定類型的例外。

您可以查看示例代碼FluentWaithere

0

我會做這樣的事情。基本上你要計算什麼在改變,例如錶行,列表元素等,等待X秒,再次計數。如果計數沒有改變,你就完成了。如果確實發生了變化,請再等一等。

int count = 0; 
int newCount = 0; 
boolean done = false; 
while (!done) 
{ 
    newCount = driver.findElements(...).size(); 
    if (newCount > count) 
    { 
     count = newCount; 
    } 
    else 
    { 
     // no new results, stop waiting 
     done = true; 
    } 
    Thread.sleep(2000); 
} 

根據您的情況,您可能希望讓你永遠不會超過X分鐘或其他添加一個整體超時。只需將其添加到while的條件。

相關問題