三种等待方式
方式1:
线程等待:Thread.sleep(xxxx)
只要在case中加入sleep就会强制等待设置的时间后才会执行之后的命令,这种等待一般适用于调试脚本的时候。
java代码
//等待3秒 Thread.sleep(3000); //完全退出浏览器 driver.quit();
方式2:
隐试等待:driver.manage().timeouts().implicitlyWait(xx, TimeUnit.SECONDS)
隐式等待,是设置的全局等待(针对的是用findElement查找元素的方法,所有的查找元素操作都会遵循这个超时机制)
设置等待时间,是对页面中的所有元素设置加载时间,如果元素不是马上就能定位成功就会在固定等待时长内不停去搜索元素,在设置时间内发现元素则执行后面操作,如果超出了设置的时间还没发现元素则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
java代码
System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe"); driver=new ChromeDriver(); //隐试等待 10秒 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
方式3:
显示等待: new WebDriverWait(driver, xx).until(ExpectedConditions.presenceOfElementLocated(By))
显示等待是等待指定元素设置的等待时间,在设置时间内,默认每隔0.5s检测一次当前的页面这个元素是否存在,如果在规定的时间内找到了元素则执行相关操作,如果超过设置时间检测不到则抛出异常。默认抛出异常为:NoSuchElementException。做自动化的时候推荐使用显示等待
java代码
driver.get("http://www.baidu.com"); //声明一个Action对象 Actions action=new Actions(driver); //鼠标移动到 更多产品 上 action.moveToElement(driver.findElement(By.xpath("//a[text()='更多产品']"))).perform(); //显示等待时间10s 等 全部产品>> 出现 WebDriverWait w=new WebDriverWait(driver,10); w.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//a[text()='全部产品>>']"))); //等待的元素出现后点击 音乐 WebElement cp=driver.findElement(By.xpath("//a[text()='音乐']")); cp.click(); //断言音乐页面的Title值为 千千音乐-听见世界 Assert.assertEquals("千千音乐-听见世界",driver.getTitle());
WebDriverWait wait = new WebDriverWait(driver,10);//10秒 //判断该元素是否被加载在DOM中,并不代表该元素一定可见。 wait.until(ExpectedConditions.presenceOfElementLocated(By.xxx));