Wait Until 不存在,不适用于 Selenium C#

Wait Until is not present, not working in Selenium C#

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

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(一组 'basic' 条件手工制作供您使用):

wait.Until(driver => ExpectedConditions.ElementIsVisible(css));

如果您需要等到元素从 DOM 中完全消失。您可以使用:

wait.Until(ExpectedConditions.ElementExists(By.XPath("your Xpath here"))); 

Element Exists 非常适合检查 UI

上是否存在弹出消息