gpt4 book ai didi

c# - Selenium Chrome 驱动程序显式等待不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:12 24 4
gpt4 key购买 nike

我正在使用 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;
});

关于c# - Selenium Chrome 驱动程序显式等待不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16097918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com