webdriver中的等待

本文介绍了Python编程中如何使用sleep()实现强制等待,implicitly_wait()进行隐式等待以及WebDriverWait()的显示等待技巧。对比了它们的优缺点,帮助理解在网页自动化测试和脚本编写中的实际应用。
摘要由CSDN通过智能技术生成

一、强制等待:sleep()

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

from time import sleep
sleep(10)

sleep()就是睡觉的意思,就是脚本一旦执行到该条语句就睡10s,再执行后面的语句。它是一个强制等待的方式,使得整个脚本暂停。

缺点:不智能,使用太多的sleep会影响脚本运行速度。

二、隐式等待:implicitly_wait()

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

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

implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),10秒超时,如果10秒内加载完成,就自动执行下一条语句;否则就超时抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出现时,它还是会继续等待,直到整个页面加载完成(浏览器tab页上的小圈圈不再转),才会执行下一条语句。某些情况下会影响脚本执行速度。

三、显示等待:WebDriverWait()

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

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

需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块

  • driver:浏览器驱动

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

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

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

与until()或者until_not()方法结合使用:

  • until()

WebDriverWait(driver, 10).until(method, message="")

method:在等待时间内,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False。

message:如果超时,抛出TimeoutException,将message传入异常

  • until_not()

与until相反,until是当某元素出现或什么条件成立则继续执行

until_not则是当某元素消失或什么条件不成立则继续执行,参数相同

与expected_conditions结合使用

expected_conditions类提供的预期条件判断方法

方法说明
title_is判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
title_contains判断当前页面的title是否包含预期字符串,返回布尔值
presence_of_element_located判断某个元素是否被加到了dom树里,并不代表该元素一定可见
visibility_of_element_located哦按段元素是否可见(可见代表元素非隐藏,并且元素宽和高不等于0)
visibility_of同上一方法,只是上一方法参数为locator,这个方法参数时定位后的元素
presence_of_all_elements_located判断是否至少1个元素存在于dom树中。举例:如果页面上有n个元素的calss都是'wp',那么只要有1个元素存在,这个方法就返回True
text_to_be_present_in_element判断某个元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value判断某个元素中的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it判断该frame是否可以Switch进去,如果可以的话,返回True并且switch进去,否则返回False
invisibility_of_element_located判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable判断某个元素中是否可见并且可点击
staleness_of等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_to_be_selected判断某个元素是否被选中了,一般用在下拉列表中
element_selection_state_to_be判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
alert_is_present判断页面上是否存在alert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值