赞
踩
selenium脚本中增加时间等待有助于提高脚本的稳定性、健壮性。selenium为我们提供了三种设置时间等待的方式。
Thread.sleep():固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用;
sleep()方法以毫秒为单位 ,简单粗暴但不够智能
- Thread.sleep(3000);
- // 执行到这里时,固定等待三秒之后,再接着执行后面的操作
二、隐式等待
使用 implicitlyWait 方法设定查找页面元素的最大等待时间,调用 findElement 方法时没有立刻找到定位元素,则程序会每间隔一定时间后不断尝试判断页面的DOM中是否出现被查找元素,若超过设定的等待时长依然没有找到,则抛出 NoSuchElementException;
- driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
- //针对所有findElement方法,最长等待10s
- //第一个参数将接受时间作为整数值,第二个参数将接受时间测量
- //包括SECONDS,MINUTES,MILISECOND,MICROSECONDS,NANOSECONDS,DAYS,HOURS等
显示等待更节约脚本的执行时间,效率最高.
显示等待分为两类:
- 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
- */
推荐使用显示等待的方式以提高脚本的执行效率.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。