Selenium c#wait.till(expectedconditions)..函数无法在屏幕上找到对象/元素

本文关键字:屏幕 对象 元素 till c#wait expectedconditions 函数 Selenium | 更新日期: 2023-09-27 18:01:04

我是使用硒Webdriver和编写c#的新手。我在脚本中使用了大量thread.sleep()命令,以确保Selenium不会尝试点击太快。经过大量研究,我发现这是不受欢迎的,而且有"更好"的方法可以做到这一点,所以我开始使用:-

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));

等待在另一个类中定义为:-

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));

我只能在运行脚本的2/10次中使用它,而不会得到:

没有这样的元素异常:找不到元素。。。。。。

我有很多关于这个问题的例子,现在我已经停止使用thread.sleep了。经过大量的研究,我总是发现这是一种建议的方法,但似乎完全不可靠。我错过什么了吗?元素总是在2秒后出现,而错误发生在10秒之前。我读过至少10篇听起来相似的其他帖子,但没有一篇有解决方案。。。除了Thread.Sleep(5000)

Selenium c#wait.till(expectedconditions)..函数无法在屏幕上找到对象/元素

创建后,尝试将NoSuchElementException类型添加到服务生的IgnoreExceptionTypes中。

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));

一般来说,如果服务员在您指示的超时到期之前返回,那是因为发生了当前未被忽略的异常。

WebDriverWait类派生自DefaultWait类。这两个你都可以在github上查看,我发现这对理解如何使用它非常有帮助。