selenium VB.NET Selify WebDriverWait.IgnoreExceptionTypes没有抑制“WebDriverTimeoutException”

bvhaajcl  于 2022-11-10  发布在  .NET
关注(0)|答案(1)|浏览(185)

在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块,但为什么这不能像预期的那样工作?

p4rjhz4m

p4rjhz4m1#

根据下面的代码,存在一些基本问题:

Dim wait As New WebDriverWait(driver, New TimeSpan(0, 0, 10))
wait.IgnoreExceptionTypes(GetType(WebDriverTimeoutException))
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.Id("foo")))

当您在**ExpectedConditions子句设置为InvisibilityOfElementLocated的情况下诱导WebDriverWait时,这实际上意味着元素必须出现在HTML DOM中,并且您希望等待其不可见。如果您查看InvisibilityOfElementLocated**的源代码(我查看了Python),它被定义为:

try:
    return _element_if_visible(_find_element(driver, self.locator), False)
except (NoSuchElementException, StaleElementReferenceException):
    # In the case of NoSuchElement, returns true because the element is
    # not present in DOM. The try block checks if the element is present
    # but is invisible.
    # In the case of StaleElementReference, returns true because stale
    # element reference implies that element is no longer visible.
    return True

这意味着**InvisibilityOfElementLocated内部处理NoSuchElementExceptionStaleElementReferenceException,而不是WebDriverTimeoutExceptions。一旦您在初始化WebDriverWait示例时提到的timespan不复存在,在缺少原本不可见的element的情况下,您会看到WebDriverTimeoutExceptions**
因此,从根本上讲,将**WebDriverTimeoutException添加到IgnoreExceptionTypes而将ExpectedConditions.InvisibilityOfElementLocated()添加到IgnoreExceptionTypes的结果是零**。

相关问题