appnium显式等待机制

强制等待: sleep不推荐全局隐式等待

全局隐式等待:

在服务端等待
 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

显式等待
在客户端等待
new WebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(").action;

◆显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明

◆是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔段时 间检测一次当前页面某个元素是否存在,

◆如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作

◆如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为: NoSuchElementException

◆显示等待用到的两个类:

◆WebDriverWait和ExpectedConditions两个类

 

◆显式等待可以等待动态加载的ajax元素,显式等待需要使ExpectedCondtions来检查条件

一般验证页面上元素的呈现

 ◆title出现首先出现title
 ◆dom树出现presence ,还不完整
 ◆Css出现 (可见visibility)
 ◆js出现,js特效执行( 可点击clickable)


◆html文档是自上而下加载的,

◆js文件加载会阻塞Html内容的加载,有些JS异步加载的方式来完成js的加载

◆样式表下载完成之后会跟之前的样式表一 起进行解析,会对之前的元素重新渲染

 

webDriverWait的用法

wait= new WebDriverWait(driver,10 ,1000);

 

 

 timeOutInSeconds:最长超时时间,默认以秒为单位

 sleepInMills :检测的间隔步长,默认0.5S

    WebDriverWait(driver,120) .until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@text='通讯录']")));

ExpectedConditions类:

presenceOfElementLocated判断元素是否被加到了DOM里,并不代表该元素一定可见

用法:
waituntil(ExpectedConditions.presenceOfElementLocated(By.id("home_ search));
visibilityOfElementLocated判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽
和高都不等于0
用法
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("home_ search"));

 

@Test
@DisplayName("测试名称:隐式等待")
public void waityinshi() throws InterruptedException {
wait=new WebDriverWait(driver,10,1000);
//隐式等待 点击搜索后等待10s
driver.findElement(By.id("com.xueqiu.amdroid:id/home_search")).click();
driver.findElement(By.id("com.xueqiu.android:id/search_input_text")).sendKeys("阿里巴巴");
WebElement element= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@text=BABA]")));
System.out.println(element.getAttribute("enable"));
element.click();

总结三种等待方式:


隐式等待,尽量默认都加上,时间限定在3-6s,不要太长,为了所有的find_ element方 法都有一一个很好的缓冲


显式等待,用来处理隐式等待无法解决的一些问题,比如:文件上传(可以设置长一点),文件上传需要设置20s以上,但是如果设置隐式等待,它会在每个find方文件上传需要设置20s以上,
但是如果设置隐式等待,它会在每个find方法都等这么长时间,一旦发现没有找到元素,就会等20s以后才抛出异常,影响case的执行效率,这时候就需要用显式等待

强制等待: 一般不推荐,前两种基本能解决绝大部分问题,如果某个控件没有任何特征,只能强制等待,这种情况比较少

 

 

 

 

  

posted @ 2020-11-30 22:42  成子吃橙子  阅读(220)  评论(0编辑  收藏  举报