1.为什么要设置元素等待?
- 由于网络速度原因
- 电脑配置原因
- 服务器处理请求原因
2.元素等待的类型
- 强制等待
- 显示等待
- 隐式等待
3.强制等待
无论浏览器是否加载完成都要强制等待指定的时长,到达指定时长后才可以执行下一步的操作!
// 强制等待2秒钟
Thread.sleep(2000);
4.显示等待
WebDriver等待指定元素,条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)!
在WebDriver中把显式等待的相关方法封装在WebDriverWait类中!
// 每隔一段时间看一下是否找到指定元素,如果找到了指定元素,则执行下一步操作;
// 否则继续等待,直到超过设置的最长时间10秒钟,然后抛出TimeoutException。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("test")));
5.隐式等待
如果定位某一元素定位失败,那么就会触发隐式等待有效时长,如果在指定时长内加载完毕,则继续执行,否则
抛出NoSuchElementException异常,如果元素在第一次就定位到,则不会触发隐式等待时长;在实际工作中,一般都使用隐式等待;
// 隐式等待
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
6.显示等待与隐式等待的区别
- 作用域:显式等待对单个元素有效,隐式等待为全局等待
- 方法:显式等待方法封装在WebDriverWait类中,而隐式等待则直接通过浏览器实例化对象调用