强制等待、隐式等待、显示等待

三者的特点

  • 强制等待是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中方式:强制等待、隐式等待、显示等待相关推荐

  1. oracle c op,ORACLE中内部函数SYS_OP_C2C和隐式类型转换

    什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...

  2. (基础)JavaScript类型转换(强制类型转换+隐式类型转换)

    JavaScript  中有五种基本数据类型(其中包括 String.Number.Boolean.Function.Symbol).三种对象类型(其中包括 Object.Date.Array)和两种 ...

  3. jQuery中事件及常用事件总结、jQuery中常见效果、隐式迭代、链式编程、样式操作、动画队列、不同元素绑定同一个事件

    jQuery事件: jQuery中的事件和javascript中的事件基本相似,不同的是jQuery中的事件处理函数写在事件后面的括号中,如: <script>$('input').cli ...

  4. MySQL中varchar类型字段隐式转换造成多删除数据

    例如一个表中字段是varchar类型: desc test; +-------+-------------+------+-----+---------+----------------+ | Fie ...

  5. uni-app隐藏图标隐式唤醒第三方app scheme方式(二 隐式调用)

    1.打包设置 和之前显示调用不同的地方是执行类的intent-filter <intent-filter><action android:name="android.int ...

  6. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

  7. 元素等待的三种方式(隐式等待、显示等待、强制等待)

    目录 隐式等待 显示等待 强制等待 如何选用等待方式 隐式等待 # 隐式等待:设置一个超时时间,在这个时间内,不断的寻找元素,超时找不到就抛出异常 driver.implicitly_wait(10) ...

  8. selenium的三种等待方式(显示等待,隐式等待,强制等待)简单了解与总结

    1.强制等待(无条件等待) 使用方法:time.sleep(delay) delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法 ...

  9. 强制等待、显示等待和隐式等待

    selenium和appium中强制等待.显示等待和隐式等待的区别: 强制等待 time.sleep() 设置固定的线程休眠时间. 显示等待 WebDriverWait() 比如: driver = ...

最新文章

  1. Turing渲染着色器网格技术分析
  2. 转 Intellij中的常用快捷键
  3. 蚂蚁集团万级规模 k8s 集群 etcd 高可用建设之路
  4. 【总结整理】JavaScript的DOM事件学习(慕课网)
  5. python生成yaml_使用python脚本自动生成K8S-YAML
  6. status的状态码
  7. cycleGAN有matlab代码吗,CycleGAN的代码组成
  8. mysql sql优化_Mysql的SQL优化指北
  9. au人声处理_Audacity音频处理
  10. 120个常用货源网站,赶紧收藏!
  11. SQL Server 2005 Service Pack 4 下载地址
  12. IT成长中的龟兔赛跑
  13. kuka机器人RSI说明
  14. mysql中查询没有选修某两门课的_mysql-学生表32题
  15. 8路sdi(DVI)多媒体分布式互动录播主机4K输出
  16. 无线路由器DNS服务器异常,fast无线路由器dns异常的解决方法
  17. API的防篡改和防重放机制
  18. 如何整理碎片化的知识?
  19. 不一样的“中国速度”,数据可视化交通运输大屏,带你见证中国高铁
  20. 每天半小时,一周带你手速大幅提升——几大打字练习网站测评

热门文章

  1. python基本类型介绍
  2. stata F值缺失_一文读懂Stata做格兰杰因果检验命令总结
  3. uni-app用uni.chooseImage API调用相机或从相册中选择图片
  4. Redis Windows版本的安装以及使用(简单版)
  5. php批量替换文件内容,写了个遍历目录、批量替换文件内容的类
  6. 怎样用matlab建立igbt的仿真分析模型,基于MATLAB/Simulink的IGBT导通模型研究
  7. Qt开源库之----Qwt
  8. 在电脑上登陆QQ通讯录
  9. java通讯录课程设计_java课程设计_通讯录_通讯簿.doc
  10. Aspose.Words 通过书签导出数据