我想确保给定元素不在DOM中,或者如果它存在于DOM中,则不再显示。
为此,我将WebDriverWait
配置为忽略NoSuchElementException
并且:
public static void WaitForElementToDisappear(IWebDriver driver)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.IgnoreExceptionTypes(typeof(OpenQA.Selenium.NoSuchElementException));
wait.Until(d => d.FindElement(By.ClassName("ClassName")).Displayed == false);
}
不幸的是,这种兴奋并没有被忽略,一旦抛出,测试就会失败。
如何处理?
编辑:我发现不幸的是,这是期望的等待行为,直到超时都不会引发异常,所以我的方法是绝对错误的。
答案 0 :(得分:1)
为什么不使用现有的ExpectedConditions
?
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.ClassName("ClassName")));
没有一个现有元素被认为是不可见的,您可以在source code中看到它,注意catch (NoSuchElementException)
块中的注释
public static Func<IWebDriver, bool> InvisibilityOfElementLocated(By locator)
{
return (driver) =>
{
try
{
var element = driver.FindElement(locator);
return !element.Displayed;
}
catch (NoSuchElementException)
{
// Returns true because the element is not present in DOM. The
// try block checks if the element is present but is invisible.
return true;
}
catch (StaleElementReferenceException)
{
// Returns true because stale element reference implies that element
// is no longer visible.
return true;
}
};
}
中也提到了
期望检查元素是否不可见 出现在DOM上。