UI自动化常见的等待方式,这3种是重中之重

UI自动化常见的等待方式

UI自动化中常常会出现脚本不稳定的情况,元素有时候能够定位,有时候却定位不到的情况。以上的情况就可以通过等待的方式去解决,下面我们就来介绍下常见的等待方式。

1.强制等待:(sleep)

强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。代码如下:

from selenium import webdriver      # 导入selenium中的webdriver
from time import sleep         # 导入time模块中的sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")     # 打开百度首页网站
sleep(2)       # 等待两秒
driver.find_element_by_id("kw").send_keys("它石软件测试")     # 在百度首页输入框中输入它石软件测试
driver.find_element_by_id("su").click()     # 点击百度一下按钮
sleep(2)
driver.quit()   # 关闭浏览器

2.隐式等待:(implicitly_wait)

implicitly_wait(x):设置等待时间为x秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。代码如下:

from selenium import webdriver      # 导入selenium中的webdriver
from time import sleep         # 导入time模块中的sleep

driver = webdriver.Chrome()
driver.implicitly_wait(30)  # 隐性等待,最长等30秒
driver.get("https://www.baidu.com")     # 打开百度首页网站
driver.find_element_by_id("kw").send_keys("它石软件测试")     # 在百度首页输入框中输入它石软件测试
driver.find_element_by_id("su").click()     # 点击百度一下按钮
driver.quit()   # 关闭浏览器

注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

3.显示等待:(WebDriverWait)

显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段固定时间查看下条件是否成立,如果成立那么程序就继续执行,否则就提示一个超时异常。

通常情况下WebDriverWait类会结合ExpectedCondition类一起使用。代码如下:

WebDriverWait的具体参数和方法:

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

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

ExpectedCondition中常用的判断条件有以下几种:

# 判断指定元素是否加载出来
presence_of_element_located
# 判断某个元素是否可见
visibility_of_element_located
#判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
# 判断元素是否被选中
element_located_to_be_selected
# 判断元素是否可点击
element_to_be_clickable:

实际代码如下:

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 # 引入By定位方式

driver = webdriver.Chrome()
driver.get('https://www.baidu.com') # 打开百度首页
# 设置判断条件:等待id='kw'的元素加载完成,设置浏览器:driver,等待时间:20s,每隔0.5秒去检查一次元素是否加载完成
input_element = WebDriverWait(driver, timeout=20,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
input_element.send_keys('输入的数据')   # 在输入框输入需要输入的数据
driver.quit()

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值