之前学习显示等待的时候觉得这两个方法很像,以为只是传入值的区别而已,今天用到后才领会真正的区别,特此记录一下。
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
WebDriverWait wait = new WebDriverWait(driver,10);
wait.ignoring(NoSuchElementException.class).until(ExpectedConditions.invisibilityOf(driver.findElement(By.id("notFound"))));
}
根据报错信息可以看到 invisibilityOf 是不会忽略 NoSuchElementException 的
然后我们换成 invisibilityOfElementLocated
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
WebDriverWait wait = new WebDriverWait(driver,10);
System.out.println(new Date());
wait.ignoring(NoSuchElementException.class).until(ExpectedConditions.invisibilityOfElementLocated(By.id("notFound")));
可以看到是忽略了 NoSuchElementException
所以得到简单的结论就是:
invisibilityOf 由于传的是 WebElement 需要先定位到元素,所以 ignoring 不会捕获异常
invisibilityOfElementLocated 会捕获 NoSuchElement 异常,然后瞄了眼源码发现
所以即使我们这样写也能处理掉异常
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("notFound")));
但是为什么没有报超时的错呢?下班了回去再瞅瞅