Selenium c#: 在不等待给定时间的情况下等待元素出现,否则超时

3
进一步解释一下,我目前正在使用selenium和c#。我的问题是,我的工具在元素未准备好时运行速度非常快。
例如,不建议使用Thread.Sleep()
给定的等待时间为2秒。元素将在1秒或更长时间内出现。因此,该代码行不可靠。
或者元素已经出现,但仍在等待完成Thread.Sleep(),这会耗费时间。
我的要求是,如果找到元素,则无需等待所指定的时间,如果在所指定的时间内找不到,则超时。
1个回答

6
这正是使用 显式等待预期条件 的情况。
使用示例:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By locator));

这将等待最多5秒钟,直到元素可见。如果成功,将返回该元素;如果失败,将抛出TimeoutException异常。

更新

ExpectedConditions已经移动到SeleniumExtras.WaitHelpers

'ExpectedConditions'已过时:'.NET绑定中的ExpectedConditions实现已弃用,并将在未来的版本中删除。此代码部分已迁移到GitHub上的DotNetSeleniumExtras存储库(https://github.com/DotNetSeleniumTools/DotNetSeleniumExtras)'

为避免现有代码中的许多更改,请将ExpectedConditions导入一个名为ExpectedConditions的变量中。其余代码保持不变。

using ExpectedConditions = SeleniumExtras.WaitHelpers.ExpectedConditions;

1
ExpectedConditions 已经被弃用了。你有任何替代方案吗? - SarangK
它可以在多步表单上工作吗?我认为等待时间是从页面加载开始的,但直到我们到达最后一步,时间可能已经过去了。对吗? - Dohab
@Dohab 等待开始和结束于 wait.Until 行。 - Guy
我不明白。是从最后一个元素操作开始(点击下一步),还是从页面加载开始? - Dohab
哦,我明白了,这取决于条件。 - Dohab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接