我发现在C#中是使用WebDriverWait类还是DefaultWait类,在任何一种情况下,IgnoreExceptionTypes方法似乎都不起作用.
即在任何一种情况下,当对我的页面运行时,抛出StaleElementReferenceException,尽管我指示代码忽略这些异常.
WebDriverWait示例:
public void WaitElementToBeClickable(IWebElement element) { var wait = new WebDriverWait(Driver,TimeSpan.FromSeconds(60)); wait.IgnoreExceptionTypes(typeof(NoSuchElementException),typeof(StaleElementReferenceException)); wait.Until(ExpectedConditions.ElementToBeClickable(element)); }
DefaultWait示例:
public IWebElement SafeWaitForDisplayed(IWebElement webElement) { var w = new DefaultWait<IWebElement>(webElement); w.Timeout = TimeSpan.FromSeconds(30); w.IgnoreExceptionTypes(typeof(NoSuchElementException),typeof(StaleElementReferenceException)); return w.Until(ctx => { var elem = webElement; if (elem.Displayed) return elem; else return null; }); }
解决方法
IgnoreExceptionTypes将仅在整个等待期间持续,直到超时.我正在使用DefaultWait,就像你期望它返回null一样.它不是.达到超时后,它将抛出异常.因此,我将它包含在try catch中,以便在超时时适当地处理异常.