在做Appium自动化测试时会遇到页面元素加载问题,因为在查找页面元素时,如果遇到页面元素还没有加载出来,就会抛出查找不到元素的异常,这样极大影响我们的测试进度。在面对这种情况下需要找到解决的方法,使页面加载完成查找到我们需要的元素。这里就要介绍下Appium的三种等待机制,用于解决页面元素加载问题。
Appium三种等待方式分别是:强制等待,显式等待,隐式等待
sleep()强制性等待
使用方式 Thread.sleep(10);
学习过线程知识都知道,使用Thread.sleep(10);表示休眠指定时间,这段时间内什么都不做,就是纯粹等待
不推荐使用此方式,浪费时间,如果每个请求都要等待,那么运行一个测试用例需要的时间无疑是太过漫长
implicitlyWait隐式等待
使用方式 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置,超出设定时间后会抛出异常
一旦设置里隐式等待,则它将存在整个WebDriver对象实例声明周期内,在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部断的刷新页面去寻找我们需要的元素
当脚本执行到某个元素定位是,如果元素可以定位,则继续执行,如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到
WebDriverWait显式等待
使用方式 (new WebDriverWait(driver,6))
.until(ExpectedConditions.presenceOfElementLocated( By by)).click();
显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception
使用ExpectedConditions.presenceOfElementLocated查找需要的元素,使用显示等待不需要页面全部加载出来,只要期待的元素加载出来即可
public void Sleep(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void WaitElement(WebDriver driver,String xpath) {
WebDriverWait webDriverWait =new WebDriverWait(driver, 10);
webDriverWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath)));
}
public void WaitElement(WebDriver driver,By by) {
WebDriverWait webDriverWait =new WebDriverWait(driver, 10);
webDriverWait.until(ExpectedConditions.presenceOfElementLocated(by));
}