2016-03-15 61 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的条件。

相关问题