webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

selenium WebDriverWait类等待机制的实现 在自动化测试脚本的运行过程中,可以通过设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 一、固定等待(time)   固定待是利用python语言自带的time库中的sleep 阅读详情

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种:

一、强制等待

强制等待是利用python语言自带的time库中的sleep()方法:

from time import sleep
sleep(10)

sleep()顾明思义就是睡觉的意思,就是脚本一旦执行到条语句sleep(10)就睡10s,再执行后面的语句,他是一个强制等待的方式,使得整个脚本暂停。但是这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用,特殊情况下,时间设置最好不超过1秒,一般0.5秒。

二、隐式等待

隐式等待相比强制等待更智能,顾明思义,在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。

driver = webdriver.Chrome()
driver.implicitly_wait(10)

implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常。隐式等待在自动化测试中的运用,看代码:

from selenium import webdriver
import unittest
 
class TestBase(unittest.TestCase):
  def setUp(self):
    self.driver=webdriver.Chrome() #驱动浏览器
    self.driver.implicitly_wait(10) #设置隐式等待
    self.driver.maximize_window() #最大化浏览器
  def test(self): 
    print('这是一个测试用例')
  def tearDown(self):
    self.driver.quit()
if __name__=='__main__':
  unittest.main()

但是隐式等待依然存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步。所以,这里webdriver提供了一种更加智能的等待方式:显示等待

三、显示等待

显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。

#引入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#引入expected_conditions类,并重命名为EC
from selenium.webdriver.support expected_conditions as EC
#引入By类
from selenium.webdriver.common.by import By
# Python小白学习交流群:711312441
#设置等待
wait = WebDriverWait(driver,10,0.5)
wait.until(EC.presence_of_element_located((By.ID,'KW')))

显示等待需要用到两个类:

WebDriverWait和expected_conditions两个类。

1、WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver:浏览器驱动

timeout:最长超时时间,默认以秒为单位

poll_frequency:检测的间隔步长,默认为0.5s

ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

WebDriverWait()中的until()和until_not()方法:

  • until

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

  • until_not

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

2、expected_conditions类

各种类,达到某种条件,返回True和False

常用条件:

条件说明
presence_of_element_located判断某个元素是否被加到了DOM树里,并不代表该元素一定可见
visibility_of_element_located判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0

关于显示等待,也可以自己写条件:

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

显示等待是一种智能程度较高的等待方式,可以有效的增强脚本的健壮性,以下条件适用:

当打开一个新页面,执行第一个元素操作的时候
当某一步操作会引发页面的加载,并且加载的内容包含了下一步需要操作的元素。一句话,就是当某个元素有加载过程的时候,就需要加上显示等待。

C#使用WebDriver模拟浏览器操作WEB页面 WriteLogHelper.WriteLogsAsync($"重启driver:{ex.ToString()}","重启web模拟");有时候需要模拟访问页面触发某个功能,可以使用WebDriver来实现这一功能,驱动打开浏览器,并对页面重定向以及对页面写入脚本等操作。通过 WebDriverWait 可以设定页面满足一定条件后进行页面操作,比如某个元素保护指定值,以及还可以执行脚本。安装Selenium.Chrome,Selenium.Support.UI,Selenium。// 打开目标URL。 阅读详情

相关推荐

selenium - webdriver - Wait()

文章目录 1- 强制等待:sleep() 2- 隐式等待:implicitly_wait() 3- 显示等待:WebDriverWait() (1)与until()或者until_not()方法结合使用 (2)WebDriverWait与expected_conditions结合使用 (3)显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能

xiaopei_zhai的专栏 998

webdriver中的等待——主要讲解WebDriverWait()

文章目录强制等待:sleep()隐式等待:implicitly_wait()显示等待:WebDriverWait()与until()或者until_not()方法结合使用WebDriverWait与expected_conditions结合使用显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间,单位为秒。 由python的...

持之以恒,脚踏实地 13万+

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2409

Web自动化测试:WebDriverWait元素等待和全局设置

由于现在部分web应用加载方式的选择,页面会需要一定时间逐渐加载完毕,也就是说有的页面元素先加载出来,有的元素后加载出来。如果直接定位所查找的元素的话,可能会由于此元素尚未加载完毕找不到元素从而报错,由于网络不稳定这种情况出现的几率会大很多,一般解决方法的话,time.sleep()函数可以避免一些这种状况,但是缺少了灵活性。在selenium中有关于等待的方法可以比较灵活的解决这个问题,这次主要讲解selenium中元素等待WebDriverWait的使用,以及全局的设置。

m0_58026506的博客 4506

PMF5.0计算

EPA PMF5.0 计算步骤

nuistsy的博客 4545

c#笔记之mes上传Http协议版

HTTP(超文本传输协议) 是一种典型的协议。

qq_61441787的博客 347

Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 一、强制等待 time.sleep(5) 强制等待是利用python语言自带的time库中的sleep()方...

专业资深测试者,多年质量管理经验,浪迹网游、金融、房产、招聘及海外行业多年,CDSN百万原创阅读,公众号500+原创文章,提倡测试左移、风险、越权、假设、探索测试,喜欢用抽象思维模式思考和技术探讨,自动化、性能、安全测试实施者,感谢关注! 4932

利用ArcGIS的模型构建器实现批量投影栅格和批量克里金插值

博主要批量投影几百个栅格,但是ArcGIS中的投影栅格的批处理工具需要手动一条条设置参数,还是麻烦,因此学习了使用模型构建器(ModelBuilder)来批量投影栅格,可以导入需投影栅格的文件夹,然后迭代投影,并按栅格原名逐个输出到指定目录。 1.在工具箱里构建模型 在arctool box里右键点击空白处,选择【添加工具箱】,点击ArcGIS默认工作目录的工具箱进行添加,然后Toolbox就会被添加到ArcToolbox页面,右键点击Toolbox,选择“新建”-“模型” 2.编写模型 (1).

qq_36958801的博客 1万+

webdriver 的三种等待方式(强制等待,隐式等待,显示等待)

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行。我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 一、强制等待 强制等待是利用python语言自带的time库中的sleep()方法: from time import sleep sleep(10) sleep()顾明思义就是睡觉的意思,就是脚本一旦执行到这条

m0_66887922的博客 4099

别再手动抓波形了!用Synopsys AXI VIP的Port Monitor自动收集事务数据(附完整连接Scoreboard代码)

当标准Port Monitor无法满足需求时,Synopsys提供的callback机制就像一套精密的手术工具,允许你深入VIP内部进行定制化改造。创建自定义监控点的四步法继承基类// 其他自定义字段...endclass重写目标phase方法// 克隆事务并发送到自定义端口在env中注册callbackcustom_cb);连接自定义端口到分析组件经典应用场景地址phase特定检查数据beat级监控自定义性能统计异常注入检测。

weixin_28716181的博客 397

机器学习(三) ----------线性回归算法(梯度下降+正则化)

线性回归算法在机器学习中具有核心地位,它以其简单性和直观性为基础,为理解数据间的关系提供了基本框架。作为许多复杂算法的基础,线性回归不仅用于预测目标变量,还用于解释自变量对目标的影响。同时,它也是机器学习入门的经典算法,对于推广机器学习知识和技术具有重要意义。

2301_77539454的博客 1869

Appium App UI自动化之webdriver的三种等待方式(强制等待、隐式等待、显示等待)

隐式等待只需要声明一次,一般在打开浏览器后进行声明。是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。但是隐式等待依然存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步。

Venus 的博客 1158

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 483

selenium的三种等待方式(强制等待,隐式等待,显示等待)

selenium的三种等待方式,强制等待,显示等待和隐式等待的详细介绍

m0_57248981的博客 1505

2026年软考高级网络规划设计师第三版备考笔记

删除了所有已退出主流应用、行业淘汰的技术内容,如 HDLC、xDSL、WiMAX、HSRP/GLBP 等,让教材内容更聚焦当下一线网络工程实际场景,剔除无效考点。

鹿鸣天涯 1217

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java+appium三种等待方式

一、隐式等待 ‘’’ driver = new AndroidDriver(remoteUrl, desiredCapabilities); driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); ‘’’ 隐式等待:是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间。这个设置是15秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期 二、显示等待 ‘’’ driver = new And

weixin_43443344的博客 987

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python 爬虫前奏五 webdriver中的等待

在上一章python 爬虫前奏四 Selenium库的使用中简单的提过一句webdriver等待,但是这个是需要详细了解的 1、强制等待sleep import time sleep(2) #等待2秒 由python的time包提供,但是使用缺点很大,因为sleep是整个进程休眠阻塞 2、隐式等待:implicitly_wait() driver.implicitly_wait(10) #隐式等待10秒 由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的

朗朗上口就行啦的博客 657

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

三种等待时间

强制等待是等待固定的时间 from selenium import webdriver from time import sleep d=webdriver.Chrome() sleep(2) d.get(‘https://www.baidu.com’) 显示等待如果该元素不在显式等待时间范围内它将使用由隐式等待定义的时间帧在抛出异常 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait

weixin_52393786的博客 203

webdriver显示等待,隐式等待,强制等待

webdriver显示等待,隐式等待,强制等待 class Testclick(): def setup(self): self.driver=webdriver.Chrome() self.driver.maximize_window() #隐式等待10秒 self.driver.implicitly_wait('10') def teardown(self): self.driver.quit() d

weixin_46583017的博客 202

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。缺点:不智能,使用太多的sleep会影响脚本运行速度。 隐式等待:implicitly_wait() driver.implicitly_wait(10) #隐式等待10秒 由webdriver提供的方法,一旦设...

shifengboy的博客 350

Python爬虫之设置selenium webdriver等待

Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难。 如果因为在加载某个元素时延迟而造成ElementNotVisibleException(不可见元素异常)的情况出现,那么就会降低自动化脚本的稳定性,设置元素等待可改善这种问题造成的...

weixin_33918357的博客 641

强制等待 ,driver / 隐式 / 显示等待

强制等待 time.sleep() ,(不建议) 隐式等待 设置一个时间,轮循查找(默认0.5秒) self.driver.implicitly.wait() 全局范围 显示等待 程序每隔一段时间(默认0.5秒)进行条件判断,如果条件成立,执行下一步,否则继续等待,直到超过设置的最长时间 WebDriverWait配合until(),until_not() until()函数传一个方法,如果方法返回结果为true,则执行下一步,为false,则继续等待 可结合expected_conditions使用

CSR-kkk 的博客 614
上一篇: Python中threading模块 lock、Rlock的使用
下一篇: Python实现自定义请求头消息headers
Python热爱者
博客等级 码龄7年 3056粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值