我正在尝试测试加载微调器是否仍然在页面上,所以当它消失时我可以检查其他元素,但是如果我使用类似的东西:
WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromMinutes(2));
wait.Until(driver => !driver.FindElement(By.CssSelector(css)).Displayed);
抛出NoSuchElementException
,当我尝试检查元素是否存在时,我有类似的错误,而不使用!
,并且它会在代码的其他部分引发错误。
似乎Until
无法正常工作,因为等待2分钟后再抛出异常,元素就在那里。
答案 0 :(得分:7)
问题是FindElement
会在找不到某个元素时抛出异常,该元素与不同 但未显示。
WebDriverWait
将允许您指定可忽略的异常。所以:
WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromMinutes(2));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
另一种选择是在你的代码中更具防御性。元素有多个状态,因此像try / catch这样的东西可以工作。
最后一个选项是使用ExpectedConditions
(手工制作的一套“基本”条件):
wait.Until(driver => ExpectedConditions.ElementIsVisible(css));
答案 1 :(得分:0)
如果你需要等到元素完全从DOM中消失。您可以使用:
wait.Until(ExpectedConditions.ElementExists(By.XPath("your Xpath here")));
Element Exists
非常适合检查UI上的弹出消息