• selenium--等待的三种方式


    前戏

    在我们做UI自动化的时候,最不稳定的就是页面了,由于各种原因页面的元素没有加载出来,比如网速慢,服务器响应慢等等,这时候如果我们去操作页面的元素,selenium会给我们抛出一个NoSuchElementException的异常。我们可以等待页面页面加载出来或者一段时间再去操作,这样的话大大降低了这种错误的出现。

    我们可以用python内置的sleep来强制等待,或者用selenium提供的显示等待或者隐式等待的方法


    相关模块:
    WebDriverWait 显示等待针对元素必用
    expected_conditions 预期条件类(用于显示等待)
    NoSuchElementException 用于隐式等待抛出异常

    sleep

    sleep强制等待,不管元素有没有加载出来,都必须等到时间才会往下去执行

    from selenium import webdriver
    
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    sleep(2)
    driver.find_element_by_css_selector('#kw').send_keys('python')
    sleep(2)
    driver.quit()

    隐式等待

    隐式等待不针对某一个元素进行等待,全局元素等待,隐式等待会等待整个页面加载完成,也就是说浏览器窗口标签栏中不在出现转动的小圆圈,才会执行下一步

    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import sleep, ctime
    
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    sleep(2)
    # 设置隐式等待,最多等待 5s,如果五秒内什么时候加载完就什么时候进行操作
    driver.implicitly_wait(5)
    try:
        print(ctime())
        driver.find_element_by_css_selector('#kw').send_keys('python')
        driver.find_element_by_css_selector('#su').click()
    except NoSuchElementException  as msg:
        print(msg)
    finally:
        print(ctime())
    sleep(2)
    driver.quit()

    显示等待

    显示等待是针对某一个元素进行相关等待判定

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    sleep(2)
    driver.find_element_by_css_selector('#kw').send_keys('python')
    
    # 一共等待 5 秒钟,每 0.5s 找一次,直到通过 ID 找到
    element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))
    
    element.click()
    sleep(2)
    driver.quit()

    不是总结的总结

    学了等待的三种方法,我最常用的还是显示等待,写一个公共的方法,把通过什么定位和定位元素抽离出来,什么时候用,传这两个参数就可以了

  • 相关阅读:
    OD 实验(十六)
    OD 实验(十五)
    OD 实验(十四)
    建立和安装requirements.txt依赖
    不吟诗的会计不是好程序员
    python并发编程--进程&线程--其他模块-从菜鸟到老鸟(三)
    python并发编程--协程---从菜鸟到老鸟(四)
    如何加速pandas的DataFrame
    python web
    mysql 数据类型隐式转化
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11135579.html
Copyright © 2020-2023  润新知