等待直到不存在,不在Selenium C中工作#

时间:2015-01-26 07:28:09

标签: unit-testing selenium selenium-webdriver webdriver

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

WebDriverWait wait = new WebDriverWait(this.Driver, TimeSpan.FromMinutes(2));
wait.Until(driver => !driver.FindElement(By.CssSelector(css)).Displayed);

抛出NoSuchElementException,当我尝试检查元素是否存在时,我有类似的错误,而不使用!,并且它会在代码的其他部分引发错误。

似乎Until无法正常工作,因为等待2分钟后再抛出异常,元素就在那里。

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上的弹出消息