22.Selenium【元素等待】三种元素等待方式

一、前言

我们在定位元素的时候往往会碰到元素加载慢的情况,如果元素没有加载出来而进行点击操作的话,是无法点击的。我们前面一直用time.sleep()方法进行页面等待的,其中这种方法就是元素等待的一种,这节课我们主要讲一下所有元素等待的方式,这也是面试中常问的知识点。

二、学习目标

1.强制等待

2.隐性等待

3.显性等待

三、知识点

地址示例:http://sahitest.com/demo/waitFor.htm

1.【强制等待】

第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),不管是元素加没加载出来,都必须等xx时间。不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

  • 语法:

    time.sleep(3)
    
  • 代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #强制等待3秒
    time.sleep(3)
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    

2.【隐性等待】

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢。

  • 语法:

    driver.implicitly_wait(5)
    
  • 代码示例:

    # 导入webdriver
    import time
    from selenium import webdriver
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #隐式等待
    driver.implicitly_wait(5)
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    

3.【显性等待】

显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。

  • 语法:

    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))
    
  • 代码示例:

    # 导入webdriver
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    #获取驱动路径
    driver_path = './chromedriver.exe'
    #创建一个浏览器对象
    driver = webdriver.Chrome(executable_path=driver_path)
    #设置全屏
    driver.maximize_window()
    #请求
    driver.get('http://sahitest.com/demo/waitFor.htm')
    
    #点击Click me按钮
    driver.find_element("xpath",".//input[@value='Click me']").click()
    #隐式等待
    locator = ("id","id2")
    WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))
    #获取输出文本
    text = driver.find_element("id","id2").text
    print(text)
    
posted @ 2023-01-17 09:59  测开星辰  阅读(206)  评论(0编辑  收藏  举报