硒铬驱动程序显式等待不工作
本文关键字:等待 工作 驱动程序 | 更新日期: 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;
});