• Python的web自动化学习(三)Selenium的显性、隐形等待


    引言:

    WebDriver的显性等待和隐形等待是用于在测试过程中等待元素加载或操作完成的两种等待方式。了解此两种方式是为后面自动化找到适合的方法去运用

    显性等待(Explicit Wait)

    显性等待是通过使用WebDriverWait类和ExpectedConditions类来实现的。它可以在测试中指定一个最长等待时间,并且在等待时间内不断轮询页面元素的状态,直到满足指定的条件。当条件满足或超过最长等待时间时,等待将结束,然后继续执行后续的测试步骤。

    显性等待的使用步骤如下:

    创建一个WebDriverWait对象,指定最长等待时间和轮询间隔时间。
    使用ExpectedConditions类的方法来指定等待的条件,例如元素可见、元素存在、元素可点击等。
    调用WebDriverWait对象的until()方法,传入指定的条件。
    示例代码

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 创建WebDriverWait对象,设置最长等待时间为60秒
    wait = WebDriverWait(driver, 60)
    
    # 等待元素可见
    element = wait.until(EC.visibility_of_element_located((By.ID, 'element_id')))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    隐形等待(Implicit Wait)

    隐形等待是在创建WebDriver对象时设置的一个全局等待时间。它会在执行每个WebDriver操作时自动等待一段时间,如果元素在等待时间内找到,则立即执行操作,否则抛出NoSuchElementException异常。

    隐形等待的使用方式如下:

    driver.implicitly_wait(10)  # 设置全局等待时间为10秒
    
    • 1

    显性等待和隐形等待都是用于等待元素加载或操作完成的等待方式,它们各自有以下优点:

    显性等待的优点:
    1. 灵活性高:显性等待可以根据具体的等待条件来等待元素加载或操作完成,可以根据需要指定等待的条件,例如元素可见、元素存在、元素可点击等。
    2. 等待时间可控:显性等待可以设置一个最长等待时间,可以确保在等待时间内完成等待,避免无限等待的情况发生。
    3. 更精确的等待:显性等待可以根据需要等待特定的元素或条件,可以更精确地等待目标元素的加载或操作完成。
    
    隐形等待的优点:
    1. 简单易用:隐形等待只需要在创建WebDriver对象时设置一个全局等待时间,无需额外的代码和操作,非常简单易用。
    2. 全局适用:隐形等待适用于整个测试过程中的普遍等待,可以自动应用于所有的WebDriver操作,减少了重复的等待代码。
    3. 提高测试效率:隐形等待可以在等待时间内自动等待元素加载或操作完成,减少了手动等待的时间,提高了测试的效率。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    总结:
    显性等待和隐形等待都有各自的优点,显性等待更加灵活,可以根据具体需求指定等待条件和等待时间,适用于特定的等待场景;而隐形等待简单易用,可以全局适用于整个测试过程,提高了测试效率。根据具体的测试需求和场景,可以选择适合的等待方式来实现等待功能。

    需要注意的是,显性等待和隐形等待可以同时使用,但是它们的等待时间不会叠加,而是取较大的那个等待时间。

    总结:

    显性等待是通过设置最长等待时间和指定条件来等待元素的加载或操作完成,更加灵活,适用于特定的等待场景;而隐形等待是在全局范围内设置一个等待时间,适用于整个测试过程中的普遍等待。根据具体的测试需求,可以选择使用显性等待、隐形等待或二者结合来实现等待功能。

  • 相关阅读:
    29.CF1149C [Tree Generator™](httpswww.luogu.com.cnproblemCF1149C) 区间合并线段树
    打包压缩工具 BoxedApp Packer[Not SDK]
    一个合约能存储多少数据?
    c++day2---9.7
    Keil MDK的sct分散加载文件详解
    微信小程序请求request封装
    将 Llama2 中文模型接入 FastGPT,再将 FastGPT 接入任意 GPT 套壳应用,真刺激!
    大型医院HIS系统源码 优质源码 医院管理系统源码
    【SIFT】超详详详解 - 实现细节记录
    【无标题】
  • 原文地址:https://blog.csdn.net/weixin_49097920/article/details/134069002