软件测试/测试开发丨App自动化测试——显示等待高级使用

news/2025/2/21 4:53:31/

点此获取更多相关资料

本文为霍格沃兹测试开发学社学员学习笔记分享
原文链接:https://ceshiren.com/t/topic/27686

一、Wait 等待

  • 强制等待:sleep 不推荐(调试时使用)

  • 全局隐式等待

    • 在服务端等待
    • driver.implicitly_wait(TIMEOUT)
  • 显式等待

    • 在客户端等待

    WebDriverWait(self.driver,10).until(expected_conditions.visibility_of_element_located(LOCATOR))

二、显式等待

  • 显式等待

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

    • WebDriverWaitexpected_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 的执行效率,这时候就需要用显式等待,显式等待可以设置的长一点
  • 强制等待:一般不推荐,前两种基本能解决绝大部分问题,如果某个控件没有任何特征,只能强制等待,这种情况比较少

http://www.ppmy.cn/news/1148507.html

相关文章

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

目录 API 1.0 StringBuilder 类概念 1.1StringBuilder 类中构造器 1.2 StringBuilder 类中 append()方法 1.3 StringBuilder 类中 reverse() 方法 1.4 StringBuilder 类中 length() 方法 1.5 StringBuilder 类中 toString() 方法 1.6 为什么操作字符串…

3.3 数据定义

思维导图: 前言: **核心概念**: - 关系数据库支持**三级模式结构**:模式、外模式、内模式。 - 这些模式中包括了如:模式、表、视图和索引等基本对象。 - SQL的数据定义功能主要包括了模式定义、表定义、视图和索引的定…

COCO格式json切分为labelme可识别json

coco数据格式相关内容参考之前博客 切分的关键在于将coco_json中的annotation信息转化为labelme中shape的坐标信息 labelme中shape需要的是多边形的点坐标,存储格式为[[x1,y1], [x2,y2]......] import os import json import pycocotools.mask as mask_utils fr…

【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet

一、说明 在这篇文章中,我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计,并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述: 理论…

【使用vbs脚本来监控windows服务器上的应用程序】

使用vbs脚本来监控windows服务器上的应用程序(不存在就启动) 文章目录 使用vbs脚本来监控windows服务器上的应用程序(不存在就启动)前言核心代码VBS写个小脚本 实时监测指定程序是否运行 对运行的软件进行操作 最后关闭运行软件批处理检测进程是否存在;这个我用来检…

大模型/LLM的涌现能力

新浪张俊林–中国人工智能学会演讲 文章目录 什么是大模型的涌现能力LLM表现的涌现能力1. In Context Learning -- 情景学习2. CoT3. 其他涌现能力 LLM模型规模和涌现能力的关系模型训练中的顿悟现象:GrokkingLLM涌现能力的可能原因 什么是大模型的涌现能力 涌现&a…

WaitGroup原理分析

背景 在实际业务开发中,我们会遇到以下场景:请求数据库,批量获取1000条数据记录后,处理数据 为了减少因一次批量获取的数据太多,导致的数据库延时增加,我们可以把一次请求拆分成多次请求,并发去…

elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现…