硬性等待
线程休眠,强制等待:Thread.sleep(long millis);
隐式等待
在设置的超时时间范围内不断查找元素,知道找到元素或者超时
设置方式:driver.manage.timeouts().implicitlyWait(long time,TimeUnit unit);
优点:相对灵活
缺点:设置是针对全局的,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待。
显示等待
用来等待某个条件发生后再继续执行后续代码(如找到元素、元素可点击、元素已显示等)
设置方式:
WebDriverWait wait = new WebDriverWait();
WebElement element = wait.until(expectCondition);
方法 | 等待条件 |
visibilityOfElementLocated(By locator) | 页面元素在页面存在并且可见 |
elementToBeClickable(By locator) | 页面元素是否在页面上可用和可被单击 |
elementToBeSelected(WebElement element) | 页面元素处于被选中状态 |
textToBePresentlnElement(By locator) | 在页面元素中是否包含特定的文本 |
presenceOfElementLocated(By locator) | 页面元素在页面上中存在 |
//在driver实例化完成之后设置隐式等待,设置超时的时间为5s
//chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
chromeDriver.findElement(By.id("su")).click();
//代码执行速度太快,UI元素没有立马显示处理,造成两者不同步,从而元素找不到
//Thread.sleep(3000);
//显示等待
WebDriverWait webDriverWait = new WebDriverWait(chromeDriver,5);
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='_职业培训、考试提升在线教育平台']")));
chromeDriver.findElement(By.xpath("//a[text()='_职业培训、考试提升在线教育平台']")).click();