为了进一步解释,我目前正在使用selenium和c#。我的问题是,我的工具运行速度非常快,无需等待元素准备就绪。
例如, Thread.Sleep()
是不可取的。
给定的等待时间是2秒。元素将以1秒或更多秒存在。在Thread.Sleep()
之后所以代码行不可靠。
或者该元素存在但仍在等待完成Thread.Sleep()
因此非常耗时。
我想要的是,如果找到该元素,则无需在给定时间内等待,如果在给定时间未找到,则超时。
答案 0 :(得分:3)
这正是explicit wait和expected 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;