WebDriverWait在对象初始化时指定的时间跨度之前抛出异常

时间:2014-01-08 19:10:22

标签: c# selenium xpath automation selenium-webdriver

我正在使用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](功能条件)

1 个答案:

答案 0 :(得分:0)

WebDriverWait仅处理某些类型的异常。您需要使用FluentWait.ignoring功能自己处理其他类型(WebDriverWait是FluentWait的扩展)。如果查看源代码,WebDriverWait似乎只忽略NotFoundException.class。要忽略other exceptions,您需要添加一个catch类(或一个通用的catch子句)。注意:在TimeoutException的情况下...不要在ignoring子句中使用它,而是将WebDriverWait包装在try-catch中,并在等待之外捕获TimeoutException。