selenium 隐式等待和显示等待
隐式等待
# 隐式等待,对所有元素生效
driver.implicitly_wait(10)
作用:WebDriver 会在指定的时间内持续检测和搜索DOM,以便找到那些不是立即加载成功的元素。这对解决由于
网络延迟或利用ajax动态加载元素所导致的元素偶尔找不到的问题非常有效
缺点:
-
隐式等待会减缓测试速度
比如测试删除页面某个元素的场景,要判断元素是否删除,需要等待10s后,然后才通报无法找到该元素,检查
某些元素不存在的次数越多,测试速度就越慢 -
隐式等待需要等待整个页面加载完成
程序会一直等待整个页面加载完成才会执行下一步,无形中增加了测试执行的时长 -
隐式等待会干扰显式等待
隐式等待是作用于整个实例化WebDriver的生命周期的,这意味着即便后续创建了显式等待,可能也达不到预期的效果
显示等待
def a():
pass
element = WebDriverWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=(ElementNotVisibleException)).until(
method=a, message='没有')
element1 = WebDriverWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=(ElementNotVisibleException)).until_not(
method=a, message='没有')
参数详解:
class WebDriverWait(object):
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
- timeout:决定最多轮询多少秒
- poll_frequency: 决定轮询的频率
- ignored_exceptions: 如果until()/until_not() 抛出这个元组中的异常,则不中断代码,而是继续等待;如果抛出的是这个元组外异常,则中断代码并抛出异常
until():
- method:在WebDriverWait()类规定的时间内(第二个参数)内,每隔一定的时间(第三个参数),调用一下method,直到其返回值不为Flase为止
until_not():
- method:在WebDriverWait()类规定的时间内(第二个参数)内,每隔一定的时间(第三个参数),调用一下method,直到其返回值为Flase为止
一般会结合lambda使用:
element = WebDriverWait(driver, timeout=10, poll_frequency=1,).until(lambda x: x.find_element_by_id('kw'))
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/15947996.html