硒铬驱动程序显式等待不工作

本文关键字:等待 工作 驱动程序 | 更新日期: 2023-09-27 18:09:53

我正在使用selenium 2和chrome驱动程序,无论我做什么,似乎都无法获得显式等待工作。我试图点击一个元素,通过ajax动态生成一些数据(没有重新加载),然后搜索一个元素,当它出现在页面上。

这是我的代码

        leagueNameItem.Click();
        IList<IWebElement> outerTables_forEachLeague = new List<IWebElement>();
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        outerTables_forEachLeague = wait.Until<IList<IWebElement>>((d) =>
        {
            return d.FindElements(By.ClassName("boxVerde"));
        });

找不到元素(它肯定在页面上)。wait函数实际上并不像指定的那样"等待"10秒,而是什么也不返回。有什么想法吗?

硒铬驱动程序显式等待不工作

问题是FindElements立即返回,如果没有找到元素,则返回一个有效的空列表对象。你有两个选择。您可以在等待中使用单个FindElement,如果该元素不存在,则会抛出异常。WebDriverWait对象将捕获该异常并重试,直到可以找到该元素。

然而,由于您希望从等待中返回一个列表,因此您需要更聪明一点,这将导致第二个选项。将您的等待更改为如下所示:

leagueNameItem.Click();
IList<IWebElement> outerTables_forEachLeague = new List<IWebElement>();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
outerTables_forEachLeague = wait.Until<IList<IWebElement>>((d) =>
{
    var elements = d.FindElements(By.ClassName("boxVerde"));
    if (elements.Count == 0)
    {
        return null;
    }
    return elements;
});