一篇文章教你快速弄懂 web自动化测试中的三种等待方式

前言

现在的网页很多都是动态加载的,如果页面的内容发生了改变,就需要时间来渲染。在咱们做web自动化测试的时候,由于代码是自动执行的,代码在执行的时候,有可能上一步操作而加载的元素还没加载出来,就会报错NoSuchElementException,如果报这个错误,很有可能定位表达式不对,或者是页面元素还没有加载出来。要解决这个问题 我们可以通过设置一些等待机制来提升脚本的稳定性。做web自动化会用到以下三种等待方式,

  • 1,强制等待:time.sleep()

  • 2,隐式等待: driver.implicitly_wait(10)

  • 3,显式等待:(等待元素处于某种状态列入: 存在、可见、可点击等等)

 

WebDriverWait(driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, '//input[@id="u"]'))
)

接下来我们就来详细介绍一下三种等待方式的使用。

1、强制等待

强制等待,也就是python中的

time.sleep(),当程序执行到time.sleep()程序会进入休眠状态(也就是我们所说的等待),当休眠时间过了之后再继续执行。

使用强制等待的缺点,程序在执行的过程中,不管要操作的元素是否出现,只要执行到

 

time.sleep就会等待,从一定程度上增加了程序的执行时间。

案例:

import time
from selenium import webdriver
driver = webdriver.Chrome()
# 设置隐式等待最大时间为10秒
driver.implicitly_wait(10)driver.get("http://www.baidu.com")

2、隐式等待

隐式等待:给driver对象设置一个全局的等待时间,在driver对象的整个生命周期中都有效。不管是通过driver查找元素,还是对元素进行一些其他的操作, 如果元素不存在,隐式等待会让driver等待一定的时间后再才是查找某元素。每隔一段时间就去看一下,有没有出现,没有就继续等,元素出现了就结束等待,继续往下执行。如果等待时间超过了设置的最大时间,那么就会抛出等待超时的错误!

案例

import time
from selenium import webdriver
driver = webdriver.Chrome()
# 设置隐式等待最大时间为10秒
driver.implicitly_wait(10)driver.get("http://www.baidu.com")

 

3、显式等待

显式等待:通常用于等待元素处于某个特定的状态。在很多时候,隐式等待无法满足我们的需求,比如,页面元素已存在,但是处于不可见状态,这个时候无法对元素进行相关的操作,这个时候我们就需要通过显式等待去等待元素处于可见状态了。

(一)、显式等待的基本使用

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# =============步骤拆解================
# 第一步:创建一个等待对象
wait = WebDriverWait(driver, 30, 0.2)
# 第二步:定义元素查找对象
# located = ("定位方式",'定位表达式')
# 比如通过xpath
located = (By.XPATH, '//input[@id="u"]')
# 第三步: 定位的等待条件
conditions = EC.visibility_of_element_located(located)
# 第四步:通过等待计时器对象去找
wait.until(conditions)# ============一行代码==================
WebDriverWait(driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, '//input[@id="u"]'))
)

(二),显示等待常用的条件

总结:

  • 强制等待:傻瓜式等待方式,不智能
  • 隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间),不足之处只能用来查找元素,等待元素是否能找到。
  • 显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间)
  • 问题:工作中什么时候用隐式等待,什么时候用显式等待?
  • 隐式是通用的,创建好driver之后就就设置好,如果隐式等待代码出错了,根据错误的条件,加上对应的显式等待。
  • 问题:为什么要加等待?
  • 提高程序的稳定性(不会因为网络等原因,页面加载元素慢,找不到元素,代码执行报错)

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

配置本地端口镜像示例(1:1)

本地端口镜像简介 本地端口镜像是指观察端口与监控设备直接相连,观察端口直接将镜像端口复制来的报文转发到与其相连的监控设备进行故障定位和业务监测。 配置注意事项 观察端口专门用于镜像报文的转发,因此不要在上面配置其他业务,防止镜像…

建筑学VR虚拟仿真情景实训教学

首先,建筑学VR虚拟仿真情景实训教学为建筑学专业的学生提供了一个身临其境的学习环境。通过使用VR仿真技术,学生可以在虚拟环境中观察和理解建筑结构、材料、设计以及施工等方面的知识。这种教学方法不仅能帮助学生更直观地理解复杂的建筑理论&#xff0…

记录 | ubuntu源码编译安装/更新boost版本

一、卸载当前的版本 1、查看当前安装的boost版本 dpkg -S /usr/include/boost/version.hpp通过上面的命令,你就可以发现boost的版本了,查看结果可能如下: libboost1.54-dev: /usr/include/boost/version.hpp 2、删除当前安装的boost sudo …

记录 | 使用samba将ubuntu文件夹映射到windows实现共享文件夹

一、ubuntu配置 1. 安装 samba samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议。 sudo apt-…

Excel COUNT类函数使用

目录 一. COUNT二. COUNTA三. COUNTBLANK四. COUNTIF五. COUNTIFS 一. COUNT ⏹用于计算指定范围内包含数字的单元格数量。 基本语法 COUNT(value1, [value2], ...)✅统计A2到A7所有数字单元格的数量 ✅统计A2到A7,B2到B7的所有数字单元格的数量 二. COUNTA ⏹计…

大数据分析与应用实验任务十一

大数据分析与应用实验任务十一 实验目的 通过实验掌握spark Streaming相关对象的创建方法; 熟悉spark Streaming对文件流、套接字流和RDD队列流的数据接收处理方法; 熟悉spark Streaming的转换操作,包括无状态和有状态转换。 熟悉spark S…

Linux 驱动开发需要掌握哪些编程语言和技术?

Linux 驱动开发需要掌握哪些编程语言和技术? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「Linux从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&#xf…

1. mycat入门

1、mycat介绍 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存 储引擎,所以并不是完全意义的分布式数据库系统。MyCat是目前最流行的基于Java语言编写的数据库中间件,也可以理解为是数据…

鸿蒙HarmonyOS4.0 入门与实战

一、开发准备: 熟悉鸿蒙官网安装DevEco Studio熟悉鸿蒙官网 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 应用设计相关资源: 开发相关资源: 例如开发工具 DevEco Studio 的下载 应用发布: 开发文档:

3易懂AI深度学习算法:长短期记忆网络(Long Short-Term Memory, LSTM)生成对抗网络 优化算法进化算法

继续写:https://blog.csdn.net/chenhao0568/article/details/134920391?spm1001.2014.3001.5502 1.https://blog.csdn.net/chenhao0568/article/details/134931993?spm1001.2014.3001.5502 2.https://blog.csdn.net/chenhao0568/article/details/134932800?spm10…

LeetCode 1631. 最小体力消耗路径:广度优先搜索BFS

【LetMeFly】1631.最小体力消耗路径:广度优先搜索BFS 力扣题目链接:https://leetcode.cn/problems/path-with-minimum-effort/ 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (ro…

视频如何提取文字?这四个方法一键提取视频文案

视频如何提取文字?你用过哪些视频提取工具?视频转文字工具,又称为语音识别软件,是一款能够将视频中的语音或对话转化为文字的实用工具。它运用了尖端的声音识别和语言理解技术,能精准地捕捉视频中的音频,并…

弧形导轨的工作原理

弧形导轨是一种能够将物体沿着弧形轨道运动的装置,它由个弧形轨道和沿着轨道运动的物体组成,弧形导轨的工作原理是利用轨道的形状和物体的运动方式来实现运动,当物体处于轨道上时,它会受到轨道的引导,从而沿着轨道的弧…

Nginx正则表达式

目录 1.nginx常用的正则表达式 2.location location 大致可以分为三类 location 常用的匹配规则 location 优先级 location 示例说明 优先级总结 3.rewrite rewrite功能 rewrite跳转实现 rewrite执行顺序 语法格式 rewrite示例 实例1: 实例2&#xf…

生活小记录

上个月项目总算上线了,节奏也慢慢调整正常。发现自己好久没有记录生活点滴了,正好写写。其实,最近这段日子发生的事情还是挺多的。 流感 媳妇11.24得流感,这件事情特别好笑,大晚上她和我妹妹想喝酒试试,结…

【Python必做100题】之第六题(求圆的周长)

圆的周长公式:C 2 * pi * r 代码如下: pi 3.14 r float(input("请输入圆的半径:")) c 2 * pi *r print(f"圆的周长为{c}") 运行截图: 总结 1、圆周长的公式:C 2 * pi * r 2、输出结果注意…

webrtc 工具类

直接上代码;webrtc 工具类 package com.example.mqttdome;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionMa…

API低代码开发平台的实际应用及好处

API低代码开发平台是一种快速开发工具,可以帮助企业快速构建和部署应用程序,并提供易于使用的API集成。 实际应用 API低代码开发平台的应用范围非常广泛,包括但不限于以下几个方面: 企业级应用程序开发:API低代码开发…

TypeScript中的类型缩小、类型谓词

一. 概览 TypeScript中的类型缩小的方式有typeof、in等方式进行类型缩小。 二. 类型缩小 typeof function test(a: string| number | string []) {if(a) {if(typeof a string) {} else if(typeof a number) {}} }in关键字 nterface ISideBar {hide: () >void }interf…

mybatis-plus查询的字段和mysql关键字重名

先看一下这个 TableField("show") 这个注解表示当前属性对应在数据库的字段为show,但是show在mysql中为关键字,直接查询会导致语法错误 正确写法应该是 但写sql由和mybatis-plus理念相违背, 并且无法轻松创建对应方法&#xff0…