selenium时间等待的三种方式

selenium脚本中增加时间等待有助于提高脚本的稳定性、健壮性。selenium为我们提供了三种设置时间等待的方式。

一、强制等待

Thread.sleep():固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用;

sleep()方法以毫秒为单位 ,简单粗暴但不够智能

Thread.sleep(3000);
// 执行到这里时,固定等待三秒之后,再接着执行后面的操作

二、隐式等待

使用 implicitlyWait 方法设定查找页面元素的最大等待时间,调用 findElement 方法时没有立刻找到定位元素,则程序会每间隔一定时间后不断尝试判断页面的DOM中是否出现被查找元素,若超过设定的等待时长依然没有找到,则抛出 NoSuchElementException;

  • 一旦设置,隐式等待会在WebDriver对象实例的整个生命周期生效,无需重复设置. 
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
//针对所有findElement方法,最长等待10s
//第一个参数将接受时间作为整数值,第二个参数将接受时间测量
//包括SECONDS,MINUTES,MILISECOND,MICROSECONDS,NANOSECONDS,DAYS,HOURS等

 

三、显式等待

显示等待更节约脚本的执行时间,效率最高.

显示等待分为两类:

  • 系统提供:ExpectedConditions 类中提供了一些常见的显示等待的方法
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
WebElement element = (new WebDriverWait(driver,5))
                .until(ExpectedConditions.presenceOfElementLocated(By.id("kw")));
		/**
		 * 上面第三条语句表示,在0-5s中去定位id为“kw”的元素,
		 * WebDriverWait默认每500ms就调用一次ExpectedCondition
		 * 直到定位成功或者时间截止,ExpectedCondition的返回值要么
		 * 为true要么为不为空的对象,在规定时间内若没有定位成功元素,
		 * 则until()会抛出org.openqa.selenium.TimeoutException 
		 */

 

  • 自定义:用户自定义的去编写适合自己的显示等待.
Boolean boo = (new WebDriverWait(driver, 5)).until(new ExpectedCondition<Boolean>() {
			@Override
			public Boolean apply(WebDriver arg0) {
				return driver.findElement(By.id("kw")).isDisplayed();
			}
		});
Assert.assertTrue(boo);
		/**
		 * 自定义的显示等待,判断id = kw 的元素在5s是否可见;
		 * 如果可见,则返回true;
		 * 如果5s后仍不可见,则返回false
		 */

 

 

推荐使用显示等待的方式以提高脚本的执行效率.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值