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'))
posted @ 2022-02-28 22:34  chuangzhou  阅读(146)  评论(0编辑  收藏  举报