web自动化之三大等待

前景:

做web自动化跑脚本时,常常会因为元素未加载出来而使脚本报错。脚本本身没有错误,只是因为元素未加载出来而无法定位到,这不是我们想看到的,因此我们需要在脚本的动作中加入等待时间

分类:

1.线程等待 sleep

俗称傻等, 会强制等待设置的时间后才会执行之后的命令 (不建议使用)

使用方法:
//默认单位毫秒  3000 = 3s
Thread.sleep(3000)
2.隐式等待

特别注意:隐式是设置的全局等待,设置了等待时间,对页面中所有的元素均有效果

因此,如果元素不是马上就能定位成功就会在固定等待时长内不停去搜索元素,在设置时间内发现元素则执行后面操作,如果超出了设置的时间还没发现元素则抛出异常。

所以,隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

这样做的弊端就是会降低测试性能(因为需要不停的去寻找,直至找到为止),并且如果设置时间是5s,在第6s找到了元素,也会报错,因为隐式等待的最大时间是设置的时间。 不推荐使用

使用方法:
//设置driver路径
System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
driver=new ChromeDriver();
//隐试等待 10秒  全局生效  针对页面中的所有元素
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
3.显式等待

针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。(针对元素,不影响性能,推荐使用)

使用方法:
//显示等待  webDriver 传入参数   driver-驱动 和timeout 最长等待时间 默认为s
// 实例化webdriverWait对象
WebDriverWait webDriverWait = new WebDriverWait(BrowserUtils.driver,6);
//调用until  意思为 直到xxxx 传入一个布尔值
// webDriverWait.until(isTrue);
//eg: 直到元素能够被点击
webDriverWait.until(ExpectedConditions.elementToBeClickable(by));
进阶:

封装两个通用的方法, 分别功能为

1.直到元素可以被点击

	 /**
	 * 等待元素可以被点击
	 * @param by  元素定位表达式 
	 * */
	public WebElement waitElementClickable(By by) {
		//显示等待  webDriver 传入参数   driver-驱动 和timeout 最长等待时间 默认为s
		WebDriverWait webDriverWait = new WebDriverWait(BrowserUtils.driver,6);
        //elementToBeClickable 元素可以被点击
		WebElement webElement = 	          
            webDriverWait.until(ExpectedConditions.elementToBeClickable(by));
		//元素可以被点击,返回这个元素, 进行点击操作
        return webElement;
	}

2.直到元素可见

	public WebElement waitElementVisible(By by) {
		//显示等待  webDriver 传入参数   driver-驱动 和timeout 最长等待时间 默认为s
		WebDriverWait webDriverWait = new WebDriverWait(BrowserUtils.driver,6);
        //visibilityOfElementLocated 元素可见
		WebElement webElement = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(by));
		return webElement;
	}
总结

综上,在web自动化中更建议使用显示等待,其具有更强的灵活性,方便自由封装配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值