Selenium c#:等到元素存在而不等待给定的时间,否则超时

时间:2017-05-18 04:18:22

标签: c# selenium selenium-webdriver element wait

为了进一步解释,我目前正在使用selenium和c#。我的问题是,我的工具运行速度非常快,无需等待元素准备就绪。

例如,

Thread.Sleep()是不可取的。

给定的等待时间是2秒。元素将以1秒或更多秒存在。在Thread.Sleep()之后所以代码行不可靠。

或者该元素存在但仍在等待完成Thread.Sleep()因此非常耗时。

我想要的是,如果找到该元素,则无需在给定时间内等待,如果在给定时间未找到,则超时。

1 个答案:

答案 0 :(得分:3)

这正是explicit waitexpected conditions的用途。

使用示例

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By locator));

这将等待向上到5秒,以使元素可见。如果成功,将返回该元素,否则它将抛出TimeoutException

<强>更新

ExpectedConditions已移动,现在位于SeleniumExtras.WaitHelpers

  

&#39; ExpectedConditions&#39;已过时:&#39; The ExpectedConditions   不推荐使用.NET绑定中的实现,并将其删除   在将来的版本中。这部分代码已迁移到   GitHub上的DotNetSeleniumExtras存储库   (https://github.com/DotNetSeleniumTools/DotNetSeleniumExtras)&#39;

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

using ExpectedConditions = SeleniumExtras.WaitHelpers.ExpectedConditions;