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

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 包后就可以使用。 缺点:不智能 阅读详情

在自动化测试脚本的运行过程中,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

#设置等待
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'))

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

  • 当打开一个新页面,执行第一个元素操作的时候
  • 当某一步操作会引发页面的加载,并且加载的内容包含了下一步需要操作的元素。一句话,就是当某个元素有加载过程的时候,就需要加上显示等待。
webdriver显式等待的具体用法 显式等待(Explicit Wait)是一种强力的等待方式,它允许程序在继续执行之前等待特定条件满足,例如等待某个元素变得可见、可点击或存在于 DOM 中。显式等待能使测试更加灵活,适应动态加载的页面元素。在 Selenium 中,显式等待通常通过类结合模块来实现。显式等待是 Web 自动化中非常强大的工具,它能够使得 WebDriver 在处理动态网页时更加灵活和稳定。通过结合和模块,您可以精确地控制等待条件,确保在页面加载完成或元素满足条件之前不会继续执行。 阅读详情

相关推荐

Web自动化测试如何设置等待时间?(干货!)

time.sleep(3)固定等待3秒 driver.implicitly_wait(10)隐性的等待,对应全局 WebDriverWait( driver, timeout).until(‘有返回值的__call__()方法或函数’)显性的等待,对应到元素 一、time.sleep(seconds) 固定等待 import timetime.sleep(3) #等待3秒 time.sl...

TestingGDR的博客 2360

python三种等待方式_Python selenium 三种等待方式详解

本文摘自:http://blog.youkuaiyun.com/huilan_same/article/details/52544521发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性。很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的...

weixin_39839162的博客 250

【pprof】简要学习教程

基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/google/pprof 分析工具 go tool pprof 是命令行指令,用于分析 Profiling 数据,源数据可以是 http 地址,也可以是已经 dump 下当 profile 文件;查看模式可以命令行交互模式,也可以是浏览器模式(-http 参数)。 两种应用 服务型应用 _ "net/http/pprof" 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API .

码农印象 885

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

设置等待#使用匿名函数行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

YLF123456789000的博客 1512

Super4PCS文章阅读笔记

Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法...

Vodake的博客 4540

从光猫到机顶盒:H10G-13融合网关双系统网络配置全解析(含超密获取技巧)

本文详细解析了中国移动H10G-13融合网关的双系统网络配置,涵盖光猫路由与安卓电视盒子的协同工作。通过晶晨S905L3芯片的优化,设备实现高效网络接入与安卓9.0系统的定制化应用,特别适合酒店和民宿行业的智能化改造。文章还提供了超密获取技巧和线刷固件包的实用指南。

weixin_42525264的博客 951

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

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

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

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3392

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

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

m0_66887922的博客 4099

PLSQL Developer新手必看:如何避免安装过程中的常见坑

本文为PL/SQL Developer新手提供了详尽的安装与配置避坑指南。从版本选择、注册码使用、汉化包安装到Oracle客户端连接配置,逐一解析常见问题并提供解决方案,帮助开发者快速搭建稳定的PL/SQL开发环境,顺利开启Oracle数据库编程工作。

g9h0i1的博客 654

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 328

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

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

Venus 的博客 1158

Python爬虫实战:爬取国家企业信用信息公示系统(最新反反爬技术解析)

在当今大数据时代,企业信用数据对于市场分析、风险评估和商业决策具有重要价值。国家企业信用信息公示系统作为官方权威的企业信息平台,包含了全国各类企业的注册信息、行政处罚、经营异常等关键数据。复杂的反爬机制(动态Token、验证码、请求频率限制)数据渲染方式多样(部分内容由JavaScript动态加载)法律与合规风险(需遵守《网络安全法》和网站Robots协议)本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的企业信用信息爬虫,并重点解析应对各种反爬策略的解决方案。

2201_76125261的博客 2698

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

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

m0_57248981的博客 1505

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.3 从零移植 busybox,基于RISC-V

上一章节我们已经成功启动了`Ubuntu`,但是由于`Ubuntu`占用系统空间过大,所以我转向占用较小的`busybox`,预计就占用`30M`左右。开始移植busybox,基于riscv64

DSMGUOGUO的博客 857

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java+appium三种等待方式

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

weixin_43443344的博客 987

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

三种等待时间

强制等待是等待固定的时间 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

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
上一篇: webdriver、appium的工作原理
下一篇: 浅谈Linux、CentOs、unbuntu的关系
ST_君华
博客等级 码龄9年 89粉丝 22原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值