appium 等待的3中方式:强制等待、隐式等待、显示等待
强制等待、隐式等待、显示等待
三者的特点
- 强制等待是sleep,强烈不推荐,设定的时间太固定,如果是模拟器等待3秒,真机可能只需要等待2秒
- driver.implicitly.wat(timeout),贯穿全部元素的等待,只需要设定一次即可,通常是在创建driver的时候后的代码运行,是dom建立之后的等待
- 显示等待是在客户端的等待:引用连个包和一个例子
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions
- WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))
显示等待的简介
- 显示等待与隐式等待相对,显示等待必须在每一个需要等待的元素前面进行声明
- 是针对某个特定的元素设置等待时间,在设置时间内,默认美格一段时间检测一次当前某个元素是否存在
- 如果在规定的时间内找到元素,则直接执行,即找到元素就执行相关操作
- 如果超过设置时间检测不到就抛出异常,默认检测频率为0.5s,默认抛出的异常时NoSuchElementException
- 用到的两个常用类
- WebDriverWait
- expected_condition
为什么要用显示等待,为什么隐式等待无法替代显示等待
- 显示等待可以等待动态加载的ajax元素,需要配合expected_condition来检查条件
- 一般页面上元素的呈现顺序是
- 首先出现title
- 然后是dom树的出现,presence还不完整,dom树出现就是隐式等待了,但此时的元素可能还没有是可点击的状态,所以只用隐式等待,使用click方法,肯定会报错的
- css出现:可见visbility
- js的出现,js特效执行:可点击clickable
- html文档是自上而下加载的
- js文件加载会阻塞html内容的加载,有些js异步加载的方式来完成js的加载
- 样式表下载完成之后跟之前的样式表一起进行解析,会对之前那的与元素重新渲染
- presence-visibility-clickabe,元素出现-可见-可点击,是元素的三个性质,当DOM树出现时,定位元素可能已经显示出来了,但是可见和可点击的属性可能还没加载出来,这时候元素的一些方法是不可用的,比如element.click(),要等到js渲染出来以后,元素的click属性才可以用
- 对应element.is_displayed()
- 对应element.is_selected()
- 对应element.is_enabled()
js的同步加载和异步加载
- 同步加载:同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。
-异步加载:异步加载又叫非阻塞,浏览器在下载执行 js 同时,还会继续进行后续页面的处理。
WebDriverWait用法
- WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
- driver:浏览器驱动
- timeout:超时时间,单位秒
- poll_frequency:检查的间隔步长,默认是0.5s
- ignored_exceptions:超时最后的抛出的异常,默认是NoSuchElementException
- 通常我们只会用到driver和timeout
- WebDriverWait().unti(self, method, message=’’) or until_not()的方法:
- method:在等待期间,每个一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False
- message:如果超时,抛出TimeoutException,将message传入异常
- until not是当某个元素小时或什么条件则继续执行,参数也相同
expected_conditions类
- appium直接帮我们封装好了类,只需要传参数即可,比如我们使用的是click(),只需要判断这个元素是否可点击属性才继续点击
- 用法:expected_conditions.element_to_be_clickable(locator),其中locator就是:(By.ID, “com.xueqiu.android:id/tv_search”)
- 常用的几个如下:
- expected_conditions.element_to_be_clickable:元素是否可点击
- expected_conditions.presence_of_element_located:元素是否被加到dom树里面
- expected_conditions.visibility_of_element_located:元素是否可见
lambda获取元素
#可以获取到元素
element = WebDriverWait(self.driver, 10).until(lambda x: x.find_element(By.XPATH,'//*[@text="我的"]'))
#这里找到元素后,不用等待,实测证明过了
element.click()
appium 等待的3中方式:强制等待、隐式等待、显示等待相关推荐
- oracle c op,ORACLE中内部函数SYS_OP_C2C和隐式类型转换
什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...
- (基础)JavaScript类型转换(强制类型转换+隐式类型转换)
JavaScript 中有五种基本数据类型(其中包括 String.Number.Boolean.Function.Symbol).三种对象类型(其中包括 Object.Date.Array)和两种 ...
- jQuery中事件及常用事件总结、jQuery中常见效果、隐式迭代、链式编程、样式操作、动画队列、不同元素绑定同一个事件
jQuery事件: jQuery中的事件和javascript中的事件基本相似,不同的是jQuery中的事件处理函数写在事件后面的括号中,如: <script>$('input').cli ...
- MySQL中varchar类型字段隐式转换造成多删除数据
例如一个表中字段是varchar类型: desc test; +-------+-------------+------+-----+---------+----------------+ | Fie ...
- uni-app隐藏图标隐式唤醒第三方app scheme方式(二 隐式调用)
1.打包设置 和之前显示调用不同的地方是执行类的intent-filter <intent-filter><action android:name="android.int ...
- Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)
在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...
- 元素等待的三种方式(隐式等待、显示等待、强制等待)
目录 隐式等待 显示等待 强制等待 如何选用等待方式 隐式等待 # 隐式等待:设置一个超时时间,在这个时间内,不断的寻找元素,超时找不到就抛出异常 driver.implicitly_wait(10) ...
- selenium的三种等待方式(显示等待,隐式等待,强制等待)简单了解与总结
1.强制等待(无条件等待) 使用方法:time.sleep(delay) delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法 ...
- 强制等待、显示等待和隐式等待
selenium和appium中强制等待.显示等待和隐式等待的区别: 强制等待 time.sleep() 设置固定的线程休眠时间. 显示等待 WebDriverWait() 比如: driver = ...
最新文章
- Turing渲染着色器网格技术分析
- 转 Intellij中的常用快捷键
- 蚂蚁集团万级规模 k8s 集群 etcd 高可用建设之路
- 【总结整理】JavaScript的DOM事件学习(慕课网)
- python生成yaml_使用python脚本自动生成K8S-YAML
- status的状态码
- cycleGAN有matlab代码吗,CycleGAN的代码组成
- mysql sql优化_Mysql的SQL优化指北
- au人声处理_Audacity音频处理
- 120个常用货源网站,赶紧收藏!
- SQL Server 2005 Service Pack 4 下载地址
- IT成长中的龟兔赛跑
- kuka机器人RSI说明
- mysql中查询没有选修某两门课的_mysql-学生表32题
- 8路sdi(DVI)多媒体分布式互动录播主机4K输出
- 无线路由器DNS服务器异常,fast无线路由器dns异常的解决方法
- API的防篡改和防重放机制
- 如何整理碎片化的知识?
- 不一样的“中国速度”,数据可视化交通运输大屏,带你见证中国高铁
- 每天半小时,一周带你手速大幅提升——几大打字练习网站测评
热门文章
- python基本类型介绍
- stata F值缺失_一文读懂Stata做格兰杰因果检验命令总结
- uni-app用uni.chooseImage API调用相机或从相册中选择图片
- Redis Windows版本的安装以及使用(简单版)
- php批量替换文件内容,写了个遍历目录、批量替换文件内容的类
- 怎样用matlab建立igbt的仿真分析模型,基于MATLAB/Simulink的IGBT导通模型研究
- Qt开源库之----Qwt
- 在电脑上登陆QQ通讯录
- java通讯录课程设计_java课程设计_通讯录_通讯簿.doc
- Aspose.Words 通过书签导出数据