我正在尝试测试加载微调器是否仍在页面上,因此当它消失时,我可以检查其他元素,但是如果使用类似的方法:

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));

10-07 21:52