我正在尝试测试加载微调器是否仍在页面上,因此当它消失时我可以检查其他元素,但如果我使用类似的东西:
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));
关于unit-testing - Wait Until 不存在,不适用于 Selenium C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146125/