web ui自动化之三种等待(固定、隐式、显式)

本文介绍了Selenium自动化测试中处理网页异步加载的三种等待方式:固定等待、隐式等待和显示等待。固定等待是预设时间的强制等待,可能导致效率低下;隐式等待是对整个webdriver实例设置全局等待,适用于整个脚本,但可能延长测试时间;显示等待更灵活,可根据条件等待,提高效率。选择合适的等待策略对于优化测试效率至关重要。
摘要由CSDN通过智能技术生成


前言

现在的网页,基本都是使用ajax异步的加载各种资源的,所以可能我们需要定位的元素不会第一时间就加载出来,这时候是无法定位的,也就会抛出异常。而解决这个问题的方法,就是等待。
下面将介绍在selenium自动化中的三种等待时间


一、固定等待

需要自己估算网页加载的时间,硬性的等待,无论网页加载快慢,都会强制等待这么多时间。

该方式的缺点:由于web加载的速度取决于测试的硬件、网速、服务器的响应时间等因素。如果时间设置太长,容易造成时间浪费,如果设置太短又可能会造成在web还没有加载完所需要定位的element,而出现报错。由于等待时间无法确定,使用太多的sleep会影响运行速度,大大地降低效率。

代码如下(示例):

# 需要现导入Python内置的time模块 
import time 
# 调用sleep()方法,指定等待2s后继续
time.sleep(2)

二、隐式等待

它是一个全局的设置,也就是在一个脚本中只需要使用一次,作用范围是针对整个webdriver对象实例,为其设置一个最大时长(单位秒),如果定位的元素没有出现就会循环的查询直到超时或者元素出现,相比于硬性等待,这个更加弹性,元素出现了就不会等待了。

该方式的缺点:一旦设置了隐式等待,它将会存在整个 WebDriver 对象实例的声明周期中,隐式等待会让一个正常响应的应用的测试变慢,它将会在寻找每个element的时候都进行等待,这样会增加整个测试执行的时间。

代码如下(示例):

from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10) # 设置全局等待10s
driver.get('https://www.baidu.com/')

driver.find_element(By.ID,'kw') # 查找baidu首页中的kw元素,查找到了则继续下一步
# driver.find_element(By.ID,'kw2') # 将kw换成不存在的元素,如kw2,可以发现将会等待10s后报错

三、显示等待

显式等待能自定义等待条件,在这个时间范围内,只要满足等待条件即可执行下一步代码操作,一般需要配合该类的until()和until_not()方法一起用。如果网页出现符合的条件,就不等待继续执行,如果没有则循环直到超时报错。

代码如下(示例):

# 前置条件
from selenium import webdriver  # selenium驱动
from selenium.webdriver.common.by import By  # 元素定位
from selenium.webdriver.support.ui import WebDriverWait # 显示等待
from selenium.webdriver.support import expected_conditions as EC # 为显示等待提供等待条件,后面单开一个文章介绍,这里不做赘述

# 显示等待语法
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw'))) # 默认是以每500ms轮询一次until中的条件,传入的超时时间是10s
WebDriverWait(driver,10,1).until(EC.presence_of_element_located((By.ID,'kw'))) # 设置每1s轮询一次until中的条件,传入的超时时间是10s

总结

三种等待时间各有优劣,根据自己实际情况选择使用,或配合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值