我已经开始越来越多地使用显式等待来处理页面上的异步事件。例如,我会在点击之前等待一个元素可点击。
然而很多时候我也面临这种情况,当我需要等待一个元素变得稳定,即停止改变,然后才会采取行动。例如,我可以在页面上进行查询,并等待搜索结果(显示在列表或表格中)以停止更改,然后检索结果。
当然,等待会有一段时间。所以简而言之,我想等待一个列表或表,而它的值不会改变,比如5秒。
如何实现这种等待?如果可能,任何人都可以在代码中给出一个简单的例子吗?
谢谢,
答案 0 :(得分:0)
使用FluentWait
将完成这项工作。它对implicitWait
和explicitWait
的优势在于它使用轮询和超时频率。例如,轮询频率的超时值为5秒和1秒。将每1秒检查一次该元素,直到达到超时值(5秒)。如果超出超时值而没有任何结果,则抛出异常。
FluentWait
在AJAX应用程序以及元素加载时间经常波动的情况下很有用,因为它在等待元素时忽略了NoSuchElementExceptions
等特定类型的异常。
您可以查看FluentWait
here
答案 1 :(得分: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
条件。