【发布时间】:2013-11-15 20:24:09
【问题描述】:
我有一个显式等待元素存在的方法。在我将驱动程序升级到 2.37 之前它工作正常。问题是即使我在我的方法中传递了超时参数,它似乎并没有等待那么长时间,而是抛出了“elementNotFound”异常。我相信它仍在使用默认 webdriver 的超时。下面是我在我的方法中使用的代码(这不是我的原始代码,我是从 stackoverflow 中获取的)。我什至尝试过 TimeSpanFromMINutes ,它似乎并没有等那么久。 2.37 出了什么问题?
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}`
【问题讨论】:
-
你应该调试它。在
if中放置一个断点并确保它击中它。您也不应该忽略任何异常类型,它已经为您完成了。另外,驱动程序是否设置了任何隐式等待? -
我进行了调试,是的,它到达了 if 语句内部,但它没有等待足够长的时间,如超时参数中定义的那样。它看起来像一个错误,因为直到(ExpectedConditions) 完美运行。它是相同的代码,运行了至少 3-4 个月,突然升级到 2.37 打破了它。
-
该代码在 v2.37 中没有改变:selenium.googlecode.com/git/dotnet/CHANGELOG ....您使用的预期条件与您的初始代码完全相同:@ 987654322@ ....
-
嗨@Arran你能解释一下隐式等待如何影响显式等待吗?谢谢