硬性等待
- 线程休眠,强制等待
- 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) | 页面元素处于被选中状态 |
textToBePresentInElement(By locator) | 在页面元素中是否包含特定的文本 |
presenceOfElementLocated(By locator) | 页面元素在页面中存在 |
代码示例
硬性等待代码示例
package com.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementWait {
private static ChromeDriver chromeDriver;
public static void main(String[] args) throws InterruptedException {
openChrome();
chromeDriver.get("http://www.baidu.com");
chromeDriver.findElement(By.id("kw")).sendKeys("自动化测试");
chromeDriver.findElement(By.id("su")).click();
//代码执行速度太快UI元素没有立马显示出来,造成两者不同步,从而元素找不到
Thread.sleep(3000);
chromeDriver.findElement(By.xpath("//a[text()='资讯']")).click();
}
public static void openChrome() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
//1.打开Chrome浏览器
chromeDriver = new ChromeDriver();
}
}
隐式等待代码示例
package com.test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ElementWait {
private static ChromeDriver chromeDriver;
public static void main(String[] args) throws InterruptedException {
//隐式等待
openChrome();
//在driver实例化完成之后设置隐式等待,设置超时的时间为5S
chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
chromeDriver.get("http://www.baidu.com");
chromeDriver.findElement(By.id("kw")).sendKeys("自动化测试");
chromeDriver.findElement(By.id("su")).click();
//代码执行速度太快UI元素没有立马显示出来,造成两者不同步,从而元素找不到
//Thread.sleep(3000);
chromeDriver.findElement(By.xpath("//a[text()='--NI自动化测试方案']")).click();
}
public static void openChrome() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
//1.打开Chrome浏览器
chromeDriver = new ChromeDriver();
}
}
显示等待代码示例
package com.test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ElementWait {
private static ChromeDriver chromeDriver;
public static void main(String[] args) throws InterruptedException {
//显式等待
openChrome();
chromeDriver.get("http://www.baidu.com");
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()='--NI自动化测试方案']")));
chromeDriver.findElement(By.xpath("//a[text()='--NI自动化测试方案']")).click();
}
public static void openChrome() {
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
//1.打开Chrome浏览器
chromeDriver = new ChromeDriver();
}
}