【转】-【Python】- 【selenium】 -selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())

article/2025/9/6 2:14:26

—— 学习Python自动化测试的菜鸡,现在是selenium库webdriver的学习时间

【问题】

在获取页面元素的文本的时候,总是获取不到,或者显示为空;

【分析】

页面加载不完全;

【解决措施】

等待页面加载完成;

【参看资料】

https://www.cnblogs.com/VseYoung/p/selenium_wait_3_python.html

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()隐式等待implicitly_wait()强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别

在前面的博文中简单介绍了《强制等待和隐士等待的区别和理解》,本文再详细的结合案例进行理解。

 

  • sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
  • implicitly_wait():隐石等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
  • WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

下面通过一个实例来加深理解:

#coding=utf-8
from selenium import webdriver
#导入 WebDriverWait 包
from selenium.webdriver.support.ui import WebDriverWait
#导入 time 包
from sleep import  sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#WebDriverWait()方法使用
element=WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id("kw"))        #
element.send_keys("selenium")
#添加智能等待
driver.implicitly_wait(30)               #implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待
driver.find_element_by_id("su").click()
#添加固定休眠时间
sleep(5)                     #sleep()方法以秒为单位,假如休眠时间小时 1 秒,可以用小数表示。
driver.quit()

关于强制等待和隐式等待在上面注释中已做了说明

下面主要介绍一下WebDriverWait() 显示等待,语法格式如下:

 

WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until(self,method,message=)
或者
WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until_not(self,method,message=)
self, 函数本身,在实际使用的时候不需要输入
driver, webdriver的驱动程序,如(IE、FireFox、chrome、safari等)
timeout,超时时间,默认以秒为单位
poll_frequency,休眠时间(步长)的间隔,默认为0.5秒,即检测元素是否存在的频率
ignored_exceptions, 超时后的异常信息,默认情况下抛 “NoSuchElementException",大家可以定义忽略的异常信息
WebDriverWait一般由until或until_not配合使用
until(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值不为False
until_not(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值为False实例:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoAlertPresentException,TimeoutException,NoSuchElementException
driver=webdriver.Firefox()
driver.get("http:www.baidu.com")
WebDriverWait(driver,10,1,NoSuchElementException).until(lambda driver:driver.find_element_by_name("d_status"))
 

 知识扩展:(截取出处为:http://blog.csdn.net/imzoer/article/details/8667176)

lambda只是一个表达式,函数体比def简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

如下例子:

定义了一个lambda表达式,求三个数的和。

再看一个例子:

用lambda表达式求n的阶乘。

------------------------------

lambda表达式也可以用在def函数中。

看例子:

这里定义了一个action函数,返回了一个lambda表达式。其中lambda表达式获取到了上层def作用域的变量名x的值。

a是action函数的返回值,a(22),即是调用了action返回的lambda表达式。

这里也可以把def直接写成lambda形式。如下


http://chatgpt.dhexx.cn/article/XpFM6hf0.shtml

相关文章

ajax之文件上传

表单上传文件 传统的文件上传是通过form表单,俗话说不关注实际问题的解决方法都是假把式,那么我就模拟一个用户注册的功能。 观察如下代码: [HttpPost] public ActionResult Upload(string username, string password, string realName, st…

SpringMVC Ajax上传文件实例

做了一个文件上传模块,因为传统的form提交会有页面刷新,不符合我的使用要求,所以我采用Ajax提交方式,这里说明下,我的应用程序前端为Ajax提交,后端SpringMVC接收处理。 传统form提交文件方式: …

使用ajax上传文件

需求 页面上需要异步上传文件 ajax简单介绍 常用的有.get()&#xff0c; .post()&#xff0c; .load()等等&#xff0c;其中.ajax()是通用方法&#xff0c;前者均可以通过此方法实现。具体可查看https://www.runoob.com/jquery/jquery-ref-ajax.html 上传前端代码 <!DO…

文件上传ajax

因为文章内容和文章标题&#xff0c;文章图片不方便在同一个form中&#xff0c;所以这里通过ajax传输数据 文件上传 html&#xff0c;这里使用的bootstrap <div class"modal fade" id"myModal" tabindex"-1" role"dialog" aria-la…

ajax以及文件上传的几种方式

AJAX准备知识&#xff1a;JSON 什么是 JSON &#xff1f; JSON 指的是 JavaScript 对象表示法&#xff08;JavaScript Object Notation&#xff09;JSON 是轻量级的文本数据交换格式JSON 独立于语言 *JSON 具有自我描述性&#xff0c;更易理解 * JSON 使用 JavaScript 语法来描…

ajax怎么上传文件?注意事项

ajax&#xff0c;即异步处理&#xff0c;相信程序员朋友们都会感觉到亲切吧&#xff0c;因为ajax在软件开发过程中实在是太常用了&#xff0c;还是有不少刚刚入门想学习软件开发的朋友可能不是很熟悉如何使用ajax&#xff0c;今天就一起来看看吧&#xff0c;怎样使用ajax上传文…

上传文件—ajax

目录 一、上传图片文件 1.写基本html 完成页面主框架 2.script部分 2-0 主框架 上传文件按钮被点击触发事件 2-1验证使得否选择文件 2-2 介绍 FormData 2-3 监听onreadystatechange事件 小结 二、实现上传文件进度条 1. 在bootstrap找进度条组件 2.script 完成进度条算法…

使用AJAX实现上传文件

前端代码 <form id"uploadForm" method"post" enctype"multipart/form-data"><label >上传电子书</label><input type"file" name"file" ><button id"upload" type"butto…

计算多边形面积

对于规则多边形&#xff0c;矩形、梯形、平行四边形、三角形&#xff08;根据三边长度&#xff0c;利用公式计算&#xff09;&#xff0c;可以通过公式计算其面积&#xff0c;而对于一般意义的多边形&#xff08;单一多边形、不包含“洞”&#xff09;&#xff0c;怎么计算面积…

C# 多边形面积计算公式

最近在做地图相关面积计算显示工作&#xff0c;百度了很多关于多边形面积计算方面公式和代码&#xff0c;只能说贼费劲&#xff0c;最终完成了把结果展示下 原理&#xff1a;鞋带公式 定义&#xff1a;所述鞋带式或鞋带算法&#xff08;也称为高斯的面积公式和测量员的式&#…

【计算多边形面积】

题目 Input 输入数据包含多个测试实例&#xff0c;每个测试实例占一行&#xff0c;每行的开始是一个整数n(3<n<100)&#xff0c;它表示多边形的边数&#xff08;当然也是顶点数&#xff09;&#xff0c;然后是按照逆时针顺序给出的n个顶点的坐标&#xff08;x1, y1, x2,…

hdu 2036(多边形面积公式)

改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 33251 Accepted Submission(s): 17118 Problem Descripti 话说部分学生心态极好&#xff0c;每天就知道游戏&#xff0c;这次考试如此简单的题目…

鞋带公式——多边形面积求和

个人博客&#xff1a;The Blog Of WaiterXiaoYY 欢迎来互相交流学习。 啥是鞋带公式&#xff08;shoelace&#xff09; Shoelace公式&#xff0c;也叫高斯面积公式&#xff0c;是一种数学算法&#xff0c;可求确定区域的一个简单多边形的面积。 该多边形是由它们顶点描述笛卡…

皮克定理和任意多边形的面积公式

1. 叉乘&#xff1a; 若 &#xff1a; &#xff0c;&#xff0c;则&#xff1a; 而&#xff1a; 则&#xff1a; 为三角形面积&#xff0c;建议百度叉乘的几何意义 2. 皮克公式&#xff1a; 即&#xff1a;多边形面积 S 多边形内整数点的个数 n 多边形边上整数点的个数…

计算任意多边形的面积(已知各顶点的坐标)

https://blog.csdn.net/Adusts/article/details/80546770 如何计算一个多边形的面积&#xff0c;首先想到的是划分成多个小的三角形&#xff0c;因为三角形我们比较熟悉&#xff0c;而且三角形计算面积的方法也很多 三角形: 1. 半周长 P(abc)/2 2. 面积 SaHa/2absin(C)/2sqrt(…

python中的scapy模块

文章目录 模块简介基本用法Scapy的基本操作Scapy模块中的函数Scapy模块的常用简单实例编写端口扫描器 模块简介 Scapy是一个由Python编写的强大工具&#xff0c;目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、…

Scapy使用文档中文版

0x00 前言 scapy是一个强大的交互式(interactive)的包操作程序&#xff0c;用python写的&#xff0c;有一个python的命令行解释器界面&#xff0c;可直接运行&#xff0c;当然也可以作为第三库&#xff0c;导入到我们的python程序中去使用它的类和方法。 关于scapy作者的一个简…

“人生苦短,我用Python“——Socket、Nmap、Scapy

渗透测试模块 Socket实例化Socket类Socket常用的函数服务端函数客户端函数服务端和客户端均可使用的函数使用Socket编写一个简单的服务端和客户端 Nmappython-nmap模块类的实例化python-namp模块中的函数PortScanner类PortScannerAsync类使用python-nmap模块来编写一个扫描器 S…

【Python】scapy模块学习笔记

文章目录 0x00 scapy安装以及环境配置0x01 实验10x02 实验20x03 实验30x04 实验40x04 实验50x06 python代码实现端口扫描 0x00 scapy安装以及环境配置 学习自知乎大佬 ——弈心——网络工程师的Python之路—Scapy基础篇 复现了一波 scapy安装: pip install scapy导入scapy方…