我正在使用selenium WebDriverWait对象来动态控制代码中对象检测的超时。但是,此对象在WebDriverWait对象中指定的时间跨度消失之前超时。对于前者我的对象初始化为10秒超时时间跨度,但对象在大约2秒内超时。
这是我的代码
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
try
{
wait.Until(drv => (drv.FindElement(By.XPath(".//*[@class='TopTitle']")))); //drv.FindElement(By.XPath(".//*[@class='TopTitle']")) throws exception
}
catch
{
//exception handlers
}
我在调试模式下运行它,我可以在2-3秒内清楚地看到drv.FindElement(By.XPath(".//*[@class='TopTitle']"))
异常和堆栈跟踪:
无法找到元素:{“method”:“xpath”,“selector”:“.//* [@ class ='TopTitle']”}
在OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary parameters)
在OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism,String value)
在OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByXPath(String xpath)
在OpenQA.Selenium.By。<> c_ DisplayClasse.b _c(ISearchContext context)
在OpenQA.Selenium.By.FindElement(ISearchContext context)
在OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
at VS_UnitTest.Navigation。<> c_ DisplayClass2.b _0(IWebDriver drv)位于c:\ Git \ WebadminTests \ WebAdminTests \ Navigation.cs:第511行 在OpenQA.Selenium.Support.UI.DefaultWait.Until [TResult](功能条件)
答案 0 :(得分:0)
WebDriverWait仅处理某些类型的异常。您需要使用FluentWait.ignoring功能自己处理其他类型(WebDriverWait是FluentWait的扩展)。如果查看源代码,WebDriverWait似乎只忽略NotFoundException.class。要忽略other exceptions,您需要添加一个catch类(或一个通用的catch子句)。注意:在TimeoutException的情况下...不要在ignoring子句中使用它,而是将WebDriverWait包装在try-catch中,并在等待之外捕获TimeoutException。