我正在尝试测试加载微调器是否仍在页面上,因此当它消失时,我可以检查其他元素,但是如果使用类似的方法:
WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromMinutes(2));
wait.Until(driver => !driver.FindElement(By.CssSelector(css)).Displayed);
它抛出
NoSuchElementException
,当我尝试检查元素是否存在而没有使用!
时,我遇到了类似的错误,并且还会在代码的其他部分抛出错误。Until
似乎无法正常工作,因为它等待2分钟后才引发异常,并且元素就在那。 最佳答案
问题在于,当找不到元素时,FindElement
将引发异常,这与找到但未显示的元素不同。WebDriverWait
将允许您指定可以忽略的异常。所以:
WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromMinutes(2));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
另一个选择是在代码中更具防御性。元素具有多个状态,因此像try / catch这样的东西会起作用。
最后一个选择是使用
ExpectedConditions
(一组供您使用的“基本”条件):wait.Until(driver => ExpectedConditions.ElementIsVisible(css));