五.Python+Selenium自动化测试系列:Selenium三种等待方法

本文介绍了Selenium三种不同的等待方式:强制等待(time.sleep())、显示等待(WebDriverWait)和隐式等待(implicitly_wait())。强制等待通过设置固定时间间隔让程序暂停;显示等待更智能,它会在设定时间内持续检查某个条件是否满足;隐式等待则对整个浏览器会话设置一个全局等待时间。示例代码分别展示了这三种等待的用法,帮助理解它们在网页自动化测试中的应用。
摘要由CSDN通过智能技术生成

1、强制等待:sleep()

引入time.sleep(second),强制等待,单位秒

from time import sleep
from selenium import webdriver
from driverPath import driver_dir

# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path) 
driver.get('https://www.baidu.com') 
# 强制等待3秒 
sleep(3) 
driver.quit() 

2、显示等待:WebDriverWait()

        显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就提示一个超时异常(TimeoutException)。 通常情况下WebDriverWait类会结合expected_condition类一起使用

expected_condition类:

# 判断标题是否和预期的一致
title_is
# 判断标题中是否包含预期的字符串
title_contains

# 判断指定元素是否加载出来
presence_of_element_located
# 判断所有元素是否加载完成
presence_of_all_elements_located

# 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
visibility_of_element_located
# 判断元素是否可见,传入参数是定位后的元素WebElement
visibility_of
# 判断某个元素是否不可见,或是否不存在于DOM树
invisibility_of_element_located

# 判断元素的 text 是否包含预期字符串
text_to_be_present_in_element
# 判断元素的 value 是否包含预期字符串
text_to_be_present_in_element_value

#判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it

#判断是否有alert出现
alert_is_present

#判断元素是否可点击
element_to_be_clickable

# 判断元素是否被选中,一般用在下拉列表,传入WebElement对象
element_to_be_selected
# 判断元素是否被选中
element_located_to_be_selected
# 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False
element_selection_state_to_be
# 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False
element_located_selection_state_to_be

#判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
staleness_of

        WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息) WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

        driver: 浏览器驱动

        timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

        poll_frequency: 每次检测的间隔时间,默认是0.5秒

        ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

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
from driverPath import driver_dir

# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
driver.get('https://www.baidu.com')
# 设置浏览器:driver 等待时间:20s , 判断条件:等待id='kw'的元素加载完成
wait = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))

input_box = driver.find_element(By.ID, 'kw')
# 在关键词输入:关键词
input_box.send_keys('关键词')
driver.quit()

3、隐式等待:implicitly_wait(second)

        implicitly_wait(xx):设置等待时间为xx秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。
注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

from selenium import webdriver
from driverPath import driver_dir

# driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
driver.implicitly_wait(30) 
# 隐性等待,最长等30秒 
driver.get('https://www.baidu.com') 
print(driver.current_url) 
print(driver.title) 
driver.quit() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liang_cr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值