Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待

news2025/6/23 17:09:45

 

为什么要添加等待

  • 避免页面未渲染完成后操作,导致的报错

经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[text()='个人中心']"}

页面还在加载时,就在进行查收元素,此时元素还没显示加载出来,而报错哈哈

直接等待

  • 缺点:使用比较死板,难以衡量具体等待时间。有的时候也解决不了等待问题,例如网页因某些原因加载过长
  • 解决方案:在报错的元素操作之前添加等待
  • 原理:强制等待,线程休眠一定时间
  • 演练环境:https://vip.ceshiren.com/
  • time.sleep(3)

隐式等待

  • 注意:需要在代码一开始时就配置好;隐式等待只能解决元素查找问题,不可以解决元素交互问题
  • 问题:难以确定元素加载的具体等待时间。
  • 解决方案:针对于寻找元素的这个动作,使用隐式等待添加配置。
  • 演练环境:https://vip.ceshiren.com/
  • 原理:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
#设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
driver.implicitly_wait(3)

隐式等待无法解决的问题

  • 元素可以找到,使用点击等操作,出现报错
  • 原因:
    • 页面元素加载是异步加载过程,通常html会先加载完成,js、css其后
    • 元素存在与否是由HTML决定,元素的交互是由css或者js决定
    • 隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互
  • 解决方案:使用显式等待
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

显式等待基本使用(初级)

  • 示例: WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)
  • 原理:在最长等待时间内,轮询,是否满足结束条件
  • 演练环境: https://vip.ceshiren.com/#/ui_study
  • 注意:在初级时期,先关注使用

总结

类型使用方式原理适用场景
直接等待time.sleep(等待时间))强制线程等待调试代码,临时性添加
隐式等待driver.implicitly_wait(等待时间)在时间范围内,轮询查找元素解决找不到元素问题,无法解决交互问题
显式等待WebDriverWait(driver实例, 最长等待时间, 轮询时间).until(结束条件)设定特定的等待条件,轮询操作解决特定条件下的等待问题,比如点击等交互性行为
def wait_until():
    driver = webdriver.Chrome()
    driver.get("https://vip.ceshiren.com/#/ui_study")
    WebDriverWait(driver, 10).until(
        expected_conditions.element_to_be_clickable(
            (By.CSS_SELECTOR, '#success_btn')))
    driver.find_element(By.CSS_SELECTOR, "#success_btn").click(

今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[LitCTF 2023]导弹迷踪

这道题相较于其他的分数类型的js题有一点不一样,他不是像常规的有用bp多次抓包修改最后得分来获取flag的。 本题将flag藏到了他的前端文件中本身没有任何难度,只是为了记录一种新的做法 按照我们平常做js的思路就是先随便玩一下然后bp抓包看得分或者抓包…

如何提升设备投资回报率:预测性维护在制造业的应用

在当今竞争激烈的制造业市场中,企业需要不断寻求提高生产效率和降低成本的方法。作为重要资产之一,设备投资回报率成为制造企业关注的焦点。然而,许多企业在设备维护和管理方面面临着一些挑战,这可能导致设备投资回报率的下降。为…

【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

目录 前言 八、结构体 8.1 结构体类型 8.2 结构体类型名 8.2.1 typedef关键字 8.2.1 结构体类型别名 8.3 结构体变量 8.3.1 使用结构体类型引用 8.3.2 使用结构体类型定义 8.3.3 使用typedef定义的结构体类型别名 8.4 访问结构体变量 8.4.1 直接成员选择表达式 8.…

如何才能找到合适的法语交传翻译服务呢?

法语交传,无需其他语言介入,直接在口译者与听众之间进行即时翻译,这是一种高级口译服务。法语交传在国际会议、商务谈判、法律诉讼等各种场合中发挥着至关重要的作用。那么,如何才能找到合适的法语交传翻译服务呢?法语…

2023年全球新能源动力电池盒市场发展规模及趋势分析:动力电池盒向底盘一体化方向发展[图]

中国新能源汽车市场维持高速增长的态势,电池盒作为在新能源汽车中用以承载、固定、保护以及集成电池组的机构部件,是构成新能源汽车完整动力系统的关键组成部分。2022年,全球新能源动力电池盒市场规模约430亿元,同比增长65.38%&am…

迅镭激光切割机在钣金加工行业中的应用

钣金是一种针对金属薄板(厚度通常在6mm以下)的归纳冷加工工艺,包括剪切、冲切、切割、复合、弯曲、焊接、铆接、拼接和成型等步骤,其显著特征是所有零件的厚度保持一致。 电器控制箱和机器外壳等通常都是钣金件,钣金加工能力的需求持续攀升&a…

JavaFx学习问题2--音频、视频播放失败情况

文章目录 一、路径注意事项:① 用相对路径的时候别忘了前面的斜杠② uri问题 二、播放不了的问题① 获取的媒体文件路径本身就是不对的② 必须是uri 额外收获: 一、路径注意事项: ① 用相对路径的时候别忘了前面的斜杠 并不是什么大问题,只是…

JavaScript-Vue基础语法-创建-组件-路由

文章目录 1.创建vue项目1.1.自定义创建项目1.2.项目结构解析1.3.主要文件1.4.其它 2.项目运行3.Vue组件概念3.1.组件基础概念3.2.单文件组件三要素3.3.组件注册3.4.组件通信 4.Vue路由概念4.1.简单使用4.2.路由参数4.3.嵌套路由4.4.路由导航4.5.代码导航4.6.路由守卫 5.总结 HT…

【Java 进阶篇】JavaScript `typeof` 操作符详解

JavaScript是一种弱类型语言,这意味着变量的数据类型通常是灵活的。为了更好地理解和操作数据,JavaScript提供了typeof操作符,它可以用来确定一个值的数据类型。在本篇博客中,我们将详细讨论typeof操作符,包括它的用法…

访问网站被拦截提示“该网站可能包含违法或违规内容”访问不了怎么办?设置一下360安全卫士即可解决

本来是一个正常的网站,结果被恶意举报后访问提示 该网站可能包含违法或违规内容 根据相关部门规定或投诉举报,此链接可能存在违反相关法律法规或政策的内容,建议您谨慎访问。 您访问的网址是:https://www.shuzhiqiang.com

Mongodb----部署副本集 实现读写分离

使用软件: xshell7 vmware16 centos8 nosql booster 1 部署副本集 推荐方案: 为了降低资源分配,这里仅使用一台服务器,但是分配3个端口(27017、27018、27019)来分别实现 主节点、副本节点…

echarts双y轴存在负数情况两轴0刻度不对齐问题

例一&#xff1a; <div id"main" style"width: 700px;height:600px;"></div> <script src"https://cdn.bootcss.com/echarts/4.7.0/echarts.min.js"></script> <script>const myChart echarts.init(document.ge…

自定义类型:结构体,枚举,联合 (1)

1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生&#xff1a; struct是结构体关键字&#xff0c;不能省略。 …

MES管理系统如何解决电子企业排产难度大的问题

随着消费者需求的多样化和个性化&#xff0c;电子产品定制化程度越来越高&#xff0c;款式多样且需要小批量生产。这种情况下&#xff0c;企业面临着计划排产难度大、资源协调困难等问题。为了解决这些问题&#xff0c;越来越多的企业开始引入MES管理系统&#xff0c;本文将从M…

NVIDIA偷偷换接口,显卡终于不“烧”了

去年10月 NVIDIA RTX 4090 正式发布&#xff0c;可上市没多久便频频「翻车」。 接口熔化、自燃&#xff0c;有意无意间问题指向了供电能力本应更强的 12VHPWR 新接口。 后续大伙应该还记得&#xff0c;玩家安装不规范导致的咯。 然而后续是&#xff0c;即便确保接口插到底、无…

微信个人号如何实现自动回复客户消息?

企业在进行运营媒体平台与来自各个渠道的用户打交道时&#xff0c;像微博和公众号可以通过设置关注语/自动欢迎语来与用户互动。微信也提供了类似的功能&#xff0c;可以通过微信管理系统的自动回复功能实现。 微信管理系统的自动回复功能分为两种&#xff1a;通过好友自动回复…

UTF-16编码原理讲解

文章目录 一、unicode二、什么是UTF-16三、编码规则一个码元两个码元 四、问题大端序小端序&#xff1f; 参考 一、unicode unicode是一个字符集&#xff0c;也称为unicode编码&#xff0c;为每一个字符分配了一个ID&#xff0c;这个ID称为码点 Unicode的编码空间从U0000到U1…

Win11磁盘分区后在恢复之前分区的方法介绍

电脑磁盘分区对于新购买的电脑来说&#xff0c;是整理电脑第一步要做的事情&#xff0c;大家一般都会根据自己的需要把磁盘划分为C盘、D盘、E盘等等方面文件的管理&#xff0c;今天小编给大家介绍一下Win11操作系统下&#xff0c;如何进行分区&#xff0c;如何恢复之前的分区&a…

容器部署的openstack进入数据库流程、查看install目录流程、容器部署使用virsh命令流程【查看计算节点上的虚拟机信息】

说明 何为容器部署&#xff0c;无需多说吧&#xff1f; 如下 计算节点的容器 进入数据库方法【控制节点】 获取nova密码 首先获取nova数据库的密码 控制节点执行&#xff1a;grep mysql /etc/kolla/nova-api/nova.conf 【目录不是固定的&#xff0c;可以通过find命令查找n…

Apache Ant的安装

介绍 Apache Ant是一个Java库和一个 命令行工具&#xff0c;可以用来构建Java应用。Ant提供了许多内置的任务&#xff08;tasks&#xff09;&#xff0c;可以编译、组装、测试、运行Java应用。Ant也可以构建非Java应用&#xff0c;例如C、C应用。 Ant非常灵活&#xff0c;没有…