在Selify中使用EXPLICTWAIT时,我正在尝试忽略WebDriverTimeoutException,如下所示。
Dim wait As New WebDriverWait(driver, New TimeSpan(0, 0, 10))
wait.IgnoreExceptionTypes(GetType(WebDriverTimeoutException))
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.Id("foo")))
这可以很好地处理其他Selify异常,比如NoSuchElementException。但在WebDriverTimeoutExceptions中,它并没有被忽视。
我知道我可以只使用一个Try-Catch块,但为什么这不能像预期的那样工作?
1条答案
按热度按时间p4rjhz4m1#
根据下面的代码,存在一些基本问题:
当您在**
ExpectedConditions
子句设置为InvisibilityOfElementLocated
的情况下诱导WebDriverWait
时,这实际上意味着元素必须出现在HTML DOM
中,并且您希望等待其不可见。如果您查看InvisibilityOfElementLocated
**的源代码(我查看了Python),它被定义为:这意味着**
InvisibilityOfElementLocated
内部处理NoSuchElementException
和StaleElementReferenceException
,而不是WebDriverTimeoutExceptions
。一旦您在初始化WebDriverWait
示例时提到的timespan
不复存在,在缺少原本不可见的element
的情况下,您会看到WebDriverTimeoutExceptions
**因此,从根本上讲,将**
WebDriverTimeoutException
添加到IgnoreExceptionTypes
而将ExpectedConditions.InvisibilityOfElementLocated()
添加到IgnoreExceptionTypes
的结果是零**。