我发现无论是使用C#
还是WebDriverWait class
在DefaultWait class
中,无论哪种情况,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中以在超时时适当地处理异常。