Selenium自动化教程03:延时等待的3种方式

news2025/1/12 8:51:00

我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作。否则页面上的元素不存在,会抛出异常。或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作。在进行UI自动化测试时,需要等元素加载完成,才能对元素进行操作,不然找不到元素会报错。延时等待的三种方式:强制等待、隐式等待和显式等待。

1.强制等待:在执行get方法之后执行,强制等待是通过time.sleep()方法实现的一种延时等待,它会暂停程序的执行指定的时间。大家应该都不会陌生,sleep就是强制等待。硬性等待也称为强制等待、线程休眠。强制等待,顾名思义就是强迫你等待呗,你等也得等不等也得等,没有商量。不管页面是否加载完,强制指定等待时间后继续执行。由于此方法较为死板,不够灵活,会导致脚本运行时间变长,故建议尽量少用。

import time  
time.sleep(5)  # 暂停程序执行5秒

2.隐式等待:隐式等待是一种全局等待,它会为页面上的所有元素设置一个最大等待时间。如果在指定的时间内页面元素加载完成,则执行后续操作;如果超过时间限制,则抛出超时异常。可以通过webdriver.implicitly_wait()方法设置隐式等待时间。

from selenium import webdriver      #导包
driver = webdriver.Chrome()         #获取浏览器驱动对象
driver.implicitly_wait(20)          #隐示等待,传入等待时间

3.显式等待:显式等待是一种更灵活的等待方式,它允许你指定一个条件,当该条件满足时才执行后续操作。可以通过WebDriverWait类和expected_conditions模块来设置显式等待。

# @Author : 小红牛
# 微信公众号:WdPython
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 设置等待时间10s
wait = WebDriverWait(driver, 10)
# 设置判断条件:等待id='kw'的元素加载完成
input_element = wait.until(EC.presence_of_element_located((By.ID, 'kw')))

input_element.send_keys('李白')
time.sleep(2)
driver.quit()

3.1.WebDriverWait参数的使用说明:

1.WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

2.until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常

3.until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,
until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

3.2.expected_conditions有哪些条件?

1.判断标题是否和预期的一致

title_is

2.判断标题中是否包含预期的字符串

title_contains

3.判断指定元素是否加载出来

presence_of_element_located

4.判断所有元素是否加载完成

presence_of_all_elements_located

5.判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator

visibility_of_element_located

6.判断元素是否可见,传入参数是定位后的元素WebElement

visibility_of

7.判断某个元素是否不可见,或是否不存在于DOM树

invisibility_of_element_located

8.判断元素的 text 是否包含预期字符串

text_to_be_present_in_element

9.判断元素的 value 是否包含预期字符串

text_to_be_present_in_element_value

10.判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement

frame_to_be_available_and_switch_to_it

11.判断是否有alert出现

alert_is_present

12.判断元素是否可点击

element_to_be_clickable

13.判断元素是否被选中,一般用在下拉列表,传入WebElement对象

element_to_be_selected

14.判断元素是否被选中

element_located_to_be_selected

15.判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False

element_selection_state_to_be

16.判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False

element_located_selection_state_to_be

17.判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了

staleness_of

完毕!!感谢您的收看

----------★★历史博文集合★★----------
我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具
在这里插入图片描述

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

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

相关文章

骑砍MOD天芒传奇-任务列表

一.真假仁宗 进入场景后找到假的仁宗并击杀,只能问一个问题.但你不知道他是否是说真话的那个人! dlga_rz_question_list:question1|那 个 是 仁 宗 ? dlga_rz_question_list:question2|你 是 个 说 真 话 的 人 吗 ? dlga_rz_question_lis…

【Linux】虚拟内存

文章目录 一、 介绍二、虚拟内存改配置多大?三、配置步骤 一、 介绍 虚拟内存(也称为交换空间),是一种计算机操作系统的内存管理技术,它通过将部分存储器空间用作硬盘上的临时扩展,使得程序能够使用比实际…

.NetCore NPOI 读取excel内容及单元格内图片

由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息,于是编写相关测试代码,读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本,此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容&#xf…

基于Spring Cloud + Spring Boot的企业电子招标采购系统源码

随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本&#…

SSM驾校预约管理系统----计算机毕业设计

项目介绍 本项目分为管理员、教练、学员三种角色, 管理员角色包含以下功能: 学员管理、教练管理、车辆管理、关系管理、车辆维修管理、个人中心等功能。 教练角色包含以下功能: 我的课程、我的学员、车辆中心、个人中心等功能。 学员角色包…

软件测试/测试开发丨Python、pycharm 安装与环境配置

Python 安装与环境配置 1. Python 安装 版本推荐 3.10.0下载地址:www.python.org/downloads/w… 若需要安装旧版本,在页面下方选择对应版本即可,MacOS选择对应系统即可 图示下载windows 3.11.4版本 安装Python 执行安装程序,安…

FreeRTOS学习--53讲 任务通知

任务通知定义 a.任务通知像个用于通知的任务,由一个32位无符号整数和8位的通知状态组成,通过任务通知函数改写其他任务的32位无符号整数数据。 b.改写方式如下(1.可以让这个整数加1: 模拟信号量 2. 设置该整数的指定的某些位:模拟事件组 3.直…

C++ 类和对象 (上)

类的引入: 由于C语言是面向过程的编程语言,我们在完成一件事的时候通常习惯将一件事拆分成一个一个小过程来实现,而到了C就习惯将一件事分成不同的模块,交给不同的对象来处理,每一个对象中承载着数据类型和函数。 &am…

网格布局(大练习)

最近对网格布局研究了一下,写了一个简单的demo。可以参考参考~ 网格基础布局:github地址 挤占网格布局:github地址 基础网站格局:github地址 复杂网站格局(方式一):github地址 复杂网站格局&am…

MySQL的高级SQL语句

目录 1.mysql高阶查询 select:显示表格中一个或数个字段的所有数据记录 distinct:不显示重复的数据记录 where:有条件查询 AND OR :且 或 in:显示已知值的数据记录 between:显示两个值范围内的数据记…

深入ArkUI:深入实战组件text和text input

文章目录 Text组件介绍Text组件的属性方法Text:文本显示组件4.3TextInput组件实战案例:图片宽度控制页面本文总结要点回顾在今天的课程中,我们将深入学习ArkUI提供的基础组件,着重探讨text和text input两个组件。 Text组件介绍 Text组件是一个用于显示文本的组件,其主要作…

SoniTranslate

示例效果 官方在线运行地址:https://huggingface.co/spaces/r3gm/SoniTranslate_translate_audio_of_a_video_content 环境配置 git clone --recurse-submodules https://github.com/R3gm/SoniTranslate.gitconda create -n soni python3.8conda activate sonipip…

解决Github无法上传>100M文件——只需两行代码

文章目录 合作推广,分享一个人工智能学习网站。计划系统性学习的同学可以了解下,点击助力博主脱贫( •̀ ω •́ )✧ 废话不多说,如果在githubpush文件太大时,会报错:this exceeds GitHub’s file size limit of 100.…

MySQL8.0聚合函数+over()函数

1、数据表内容为: CREATE TABLE chapter11 (shopname VARCHAR(255) NULL,sales VARCHAR(255) NULL,sale_date VARCHAR(255) NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;INSERT INTO chapter11 (shopname, sales, sale_date) VALUES(A…

基于YOLOv8的遥感SAR舰船小目标识别

💡💡💡本文摘要:基于YOLOv8的遥感SAR舰船小目标,阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的…

1.2.0 IGP高级特性之FRR

理论部分参考文档:Segment Routing TI-LFA FRR保护技术 - 华为 一、快速重路由技术 FRR(Fast Reroute)快速重路由 实现备份链路的快速切换,也可以与BFD联动实现对故障的快速感知。 随着网络的不断发展,VoIP和在线视频等业务对实时性的要求越…

堪比Postman!这款IDEA插件真好用!

Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…

Arduino驱动VL6180X光学测距传感器(OLED显示)

Arduino驱动VL6180X光学测距传感器(OLED显示) 简介原理模块参数接线图代码结果 简介 VL6108X三合一光电模块,芯片内集成了IR VSEL(vertical-cavity surface-emitting laser)红外垂直腔面发射激光器光源、接近传感器、环境光传感器&#xff0…

《网络是怎样连接的》1.2、1.3、1.4节图表(自用)

图2.1:浏览器调用socket库中的解析器,向DNS服务器询问域名的ip地址 (图中的gethostbyname是解析器的名称;协议栈是操作系统的网络控制软件,也称协议驱动、TCP/IP驱动) 图2.2 DNS服务器根据客户端查询信息查…

解析Web自动化测试工具能做什么?

随着互联网的蓬勃发展,Web应用程序在我们生活和工作中扮演着愈发重要的角色。为确保这些Web应用程序的质量、稳定性和安全性,Web自动化测试工具应运而生。本文将介绍Web自动化测试工具的多重功能,以及它们如何在软件开发生命周期中发挥关键作…