如何等待Selenium Webdriver中的元素不变?

时间:2016-03-15 10:53:21

标签: selenium-webdriver

我已经开始越来越多地使用显式等待来处理页面上的异步事件。例如,我会在点击之前等待一个元素可点击。

然而很多时候我也面临这种情况,当我需要等待一个元素变得稳定,即停止改变,然后才会采取行动。例如,我可以在页面上进行查询,并等待搜索结果(显示在列表或表格中)以停止更改,然后检索结果。

当然,等待会有一段时间。所以简而言之,我想等待一个列表或表,而它的值不会改变,比如5秒。

如何实现这种等待?如果可能,任何人都可以在代码中给出一个简单的例子吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

使用FluentWait将完成这项工作。它对implicitWaitexplicitWait的优势在于它使用轮询和超时频率。例如,轮询频率的超时值为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条件。