一、强制等待: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 |