首页 > 其他分享 >17.显式等待高级使用

17.显式等待高级使用

时间:2023-12-20 15:57:58浏览次数:29  
标签:17 元素 高级 element 显式 等待 until WebDriverWait

目录

  • Wait 等待
  • 显式等待
  • WebDriverWait 用法
  • expected_conditions 类
  • 使用 lambda 表达式
  • 显式等待案例
  • 总结三种等待方式

Wait 等待

  • 强制等待:sleep 不推荐
  • 全局隐式等待
    • 在服务端等待
    • driver.implicitly_wait(TIMEOUT)
  • 显式等待
    • 在客户端等待
    • WebDriverWait(self.driver,10).until(expected_conditions.visibility_of_element_located(LOCATOR))

显式等待

  • 显式等待
    • 显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。
    • 是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,
    • 如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,
    • 如果超过设置时间检测不到则抛出异常。默认检测频率为 0.5s,默认抛出异常为:NoSuchElementException
  • 显示等待用到的两个类:
    • WebDriverWait 和 expected_conditions 两个类

显式等待

  • 显式等待可以等待动态加载的 ajax 元素,显式等待需要使 ExpectedCondtions 来检查条件
  • 一般页面上元素的呈现
    • title 出现 首先出现 title
    • dom 树出现 presence ,还不完整
    • css 出现 (可见 visibility)
    • js 出现,js 特效执行 ( 可点击 clickable)
  • html 文档是自上而下加载的,
  • js 文件加载会阻塞 Html 内容的加载,有些 JS 异步加载的方式来完成 js 的加载
  • 样式表下载完成之后会跟之前的样式表一起进行解析,会对之前的元素重新渲染

WebDriverWait 用法

  • WebDriverWait 用法
    • WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
    • driver:浏览器驱动
    • timeout:最长超时时间,默认以秒为单位
    • poll_frequency:检测的间隔步长,默认为 0.5s
    • ignored_exceptions:超时后的抛出的异常信息,默认抛出 NoSuchElementExeception 异常。
  • WebDriverWait 的 until()和 until_not()方法:
    • method: 在等待期间,每隔一段时间(init中的 poll_frequency)调用这个传入的方法,直到返回值不是 False , message: 如果超时,抛出 TimeoutException,将 message 传入异常
    • until_not: 与 until 相反,until 是当某元素出现或什么条件成立则继续执行,until_not 是当某元素消失或什么条件不成立则继续执行,参数也相同。

expected_conditions 类

  • presence_of_element_located 判断元素是否被加到了 DOM 树里,并不代表该元素一定可见
    • 用法:WebDriverWait().until(expected_conditions.presence_of_element_located(元素对象))
  • visibility_of_element_located 判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于 0
    • 用法:
    • WebDriverWait().until(expected_conditions.visibility_of_element_located(元素定位符))

使用 lambda 表达式

  • WebDriverWait(driver,time).until(lambda x:x.find_element_by_id("someId")
  • 返回一个元素

显式等待案例

总结三种等待方式

  • 隐式等待,尽量默认都加上,时间限定在 3-6s,不要太长, 为了所有的 find_element 方法都有一个很好的缓冲
  • 显式等待,用来处理隐式等待无法解决的一些问题,比如:文件上传(可以设置长一点),文件上传需要设置 20s 以上, 但是如果设置隐式等待, 它会在每个 find 方法都等这么长时间 , 一旦发现没有找到元素, 就会等 20s 以后才抛出异常, 影响 case 的执行效率,这时候就需要用显式等待,显式等待可以设置的长一点
  • 强制等待:一般不推荐,前两种基本能解决绝大部分问题,如果某个控件没有任何特征,只能强制等待,这种情况比较少

标签:17,元素,高级,element,显式,等待,until,WebDriverWait
From: https://www.cnblogs.com/csfsz/p/17916659.html

相关文章

  • 利用Python进行数据分析_Pandas_Numpy高级应用
    Numpy高级应用1.ndarray对象内部机理importpandasaspdimportnumpyasnpfrompandasimportSeries,DataFrameimportwarningswarnings.filterwarnings("ignore")略2.高级数组操作arr=np.arange(8)arrarray([0,1,2,3,4,5,6,7])arr_new=arr.reshape......
  • 世微 AP5219 平均电流型LED 降压恒流驱动器 兼容LN2516/LN2517
    产品描述AP5219是一款PWM工作模式,内置功率管,适用于5V~100V输入的高精度降压LED恒流驱动芯片。输出功率可达25W,电流2.5A。AP5219可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮模式。AP5219工作频率固定在130KHZ,同时内置抖频电路,可以降低对其他设备的EMI干扰。另......
  • 2023最新高级难度Spring Web Flow面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自[面试宝典-高级难度SpringWebFlow面试题合集](https://offer.houxu6.top/tag/SpringWebFlow)问:请您详细解释在SpringWebFlow中如何实现复杂业务流程的嵌套和组合?在SpringWebFlow中,实现复杂业务流程的嵌套和组合可以通过以下步骤来完成:......
  • CF1703E-Mirror-Grid-题解
    title:CF1703EMirrorGrid题解date:2022-07-1511:54:20categories:-题解题目大意给出一个由\(0,1\)组成的矩阵,求最少改变矩阵中的多少个数,使得矩阵旋转\(0^\circ,90^\circ,180^\circ,270^\circ\)后相同。思路在一个\(n\timesn\)的矩阵中,对于任意一......
  • cpp环境搭建 - vs2017编译CMakeLists项目(Box2dLite)
    box2dlite地址:GitHub-erincatto/box2d-lite:Asmall2Dphysicsengine vs2017不支持utf-8withoutbom问题box2dlite的源码文件是utf-8withoutbom的,如果在里面写了中文注释,就会出现编译错误解决办法:将文件编码改成utf-8带bom的(这边没有在附加选项加/utf-8貌似也没问题......
  • [Codeforces] CF1795C Tea Tasting
    CF1795CTeaTasting题意有\(n\)个人和\(n\)杯茶,第\(i\)个人每次会喝\(b_i\)毫升的茶。第\(i\)杯茶有\(a_i\)毫升。总共会喝\(n\)轮茶,第\(j\)轮第\(i\)个人会尝试喝第\(i+1-j\)杯茶。喝的量为\(\min(a_{i+1-j},b_i)\)毫升,并且使\(a_{i+1-j}\)减少\(\mi......
  • day17 基于Prometheus的HPA自动伸缩 -Prometheus黑盒监控-自定义资源接入监控系统 (7.
    一、基于Prometheus的HPA自动伸缩1、背景Kubernetes集群规模大、动态变化快,而且容器化应用部署和服务治理机制的普及,传统的基础设施监控方式已经无法满足Kubernetes集群的监控需求。需要使用专门针对Kubernetes集群设计的监控工具来监控集群的状态和服务质量。Prometheus则......
  • day17(匿名函数)
    day171.函数式介绍相比面向过程编程,函数式更加注重的是执行结果而非执行过程。代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter。2.匿名函数lambda#1.def用于定义有名函数#func=函数内存地......
  • (原)NCP170AMX280TBG 150mA(LDO)稳压器,TPS25942ARVCR功能丰富的电源管理器件
    1、NCP170AMX280TBGLDO稳压器,150mA,超低IqNCP170系列CMOS低漏稳压器特别适用于需要超低静止电流的便携式电池供电应用。典型值为500nA的超低耗量确保了较长的电池寿命和动态瞬变升压功能,改善了无线通信应用的器件瞬变反应。该器件采用小型1×1mmxDFN4、TSOP5和SOT-......
  • IDE之VS:Visual Studio的简介(包括 VS2013、VS2015、VS2017、VS2019、VS2022)、安装、
    原文链接:https://blog.csdn.net/qq_41185868/article/details/81052119最近开始使用vs2019,应该是最新的版本。之前都是vs2015,感觉19更智能,兼容性更好,速度也更快。详细了解下这几个版本。1、简介:MicrosoftVisualStudio(简称VS)是美国微软公司的开发工具包系列产品,功能完备的I......