WEB自动化(JAVA版)——三大等待

硬性等待

  • 线程休眠,强制等待
  • 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();
	}
}
发布了73 篇原创文章 · 获赞 2 · 访问量 3154

猜你喜欢

转载自blog.csdn.net/anniewhite/article/details/105341027