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的执行效率,这时候就需要用显式等待
强制等待: 一般不推荐,前两种基本能解决绝大部分问题,如果某个控件没有任何特征,只能强制等待,这种情况比较少
appnium显式等待机制的更多相关文章
- Selenium+Java(六)Selenium 强制等待、显式等待、隐实等待
前言 在实际测试过程中,由于网速或性能方面的原因,打开相应的网页后或在网页上做了相应的操作,网页上的元素可能不会马上加载出来,这个时候需要在定位元素前等待一下,等元素加载出来后再进行定位,根据实际使用 ...
- 【java+selenium3】隐式等待+显式等待 (七)
一.隐式等待 -- implicitlyWait 调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit); / ...
- 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待
一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...
- selenium测试(Java)-- 显式等待(九)
转自:https://www.cnblogs.com/moonpool/p/5668571.html 显式等待可以使用selenium预置的判断方法,也可以使用自定义的方法. package com. ...
- 【亲测显式等待】Selenium:元素等待的4种方法
Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...
- selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)
隐式等待是等页面加载,不是等元素!!! 1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码.显式等待是等元素加载!!! 2.隐式等待,相当于设置全局的等待,在定位 ...
- [Selenium]显式等待 Explicit wait & 隐式等待 Implicit wait
显式等待 Explicit wait 显示等待 , 就是明确的要等到某个元素出现或者某个元素满足某种条件,每隔一段时间检查一次,等不到,就一直等,如果在规定的时间内还没有找到,就跳出来检查间隔的时间和 ...
- 显式等待-----Selenium快速入门(十)
上一篇说了元素定位过程中的隐式等待,今天我们来探讨一下显示等待.显式等待,其实就是在使用WebDriverWait这个对象,进行等待.显式等待对比隐式等待,多了一些人性化的设置,可以说是更细化的隐式等 ...
- selenium自动化之显式等待和EC(expected_conditions)模块
很多人都有这种经历,selenium脚本当前运行没问题,过了一段时间再运行就报错了,然后过几天又好了.其中的原因估计60%的人都知道,是因为元素加载这块有问题.通常的解决方案就是加上sleep或者隐式 ...
随机推荐
- 自学linux——15.云主机的购买流程及域名的购买备案解析
项目上线流程 一.服务器选配购买 项目上线的服务器必须是外网服务器 1.服务器购买情况 真实服务器(成本过高,购买内部自用) 云服务器(上线首选):阿里云,腾讯云,华为云 2.购买阿里云服务器:htt ...
- CentOS 8.0 安装docker 报错:Problem: package docker-ce-3:19.03.4-3.el7.x86_64 requires containerd.io >= 1
1.错误内容 package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of th ...
- 为数不多的人知道的 Kotlin 技巧及解析
文章中没有奇淫技巧,都是一些在实际开发中常用,但很容易被我们忽略的一些常见问题,源于平时的总结,这篇文章主要对这些常见问题进行分析. 这篇文章主要分析一些常见问题的解决方案,如果使用不当会对 性能 和 ...
- 做了两年多的安卓,突然想转Java后端,感觉Android职业前景不太好,转还是不转?
近几年相信很多Android开发者都有过这种想法,最终还是有些Android 开发选择了转行,但是还有些开发者选择了坚持. 因为现在Android开发确实竞争很大,很多公司抛出几个岗位,每天能收到成百 ...
- 阿里面试官:Android中binder机制的实现原理及过程?
Binder 是 Android 系统中非常重要的组成部分.Android 系统中的许多功能建立在 Binder 机制之上.在这篇文章中,我们会对 Android 中的 Binder 在系统架构中的作 ...
- 树莓派应用Docker
本期通过在树莓派上配置 Docker,来介绍 Docker 应用,欢迎来到"万物皆可 Docker"的时代! 什么是 Docker ? Docker 最初是 dotCloud 公司 ...
- SpringCloud升级之路2020.0.x版-11.Log4j2 监控相关
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Log4j2 异步 ...
- GitHub创建图床
GitHub 写第一篇文章时发现从typora粘贴过来的文章会出现下面的情况 经常在Windows用typora的小伙一定遇到过一个问题:不管是用截图工具截图后直接粘贴,还是通过选择文件夹选择图片的方 ...
- NodeJS 中的事件循环,读了这篇就全懂了
事件循环是 NodeJS 处理非阻塞 I/O 操作的和核心机制.NodeJS 的事件循环脱胎于 libuv 的事件循环,因此,要搞清楚 NodeJS 的事件循环,还需要先了解 libuv 的事件循环是 ...
- Docker部署ELK之部署elasticsearch7.6.0(1)
1. 拉取elasticsearch7.6.0镜像: sudo docker pull elasticsearch:7.6.0 2. 输入命令,构建容器: sudo docker run --name ...