显式等待、隐式等待、强制等待

        在Selenium中,等待机制是确保页面元素加载完成后在进行操作的关键。分别有三种等待机制:显式等待(Explicit Wait)、隐式等待(Implicit Wait)、强制等待(Force Wait)。

显式等待

        显式等待(Explicit Wait)是Selenium提供的一种等待机制,用于在执行操作之前等待特定条件发生。显式等待可以提高测试的稳定性和可靠性。因为它可以确保元素加载完成或满足特定条件后再进行操作。在Web自动化测试中,页面加载时间和元素渲染时间可能会有所不同。如果在元素尚未加载完成时尝试进行操作,可能导致测试失败。

优点:

  • 灵活性高,可以等待特定条件(如元素可点击、文本出现等)
  • 提高测试稳定性,只在需要等待时等待,避免不必要的等待时间

缺点:

  • 代码复杂度增加,需要在每次等待时显式设置等待条件

用法

显式等待通过WebDriver类和expected_conditions模块实现。

# 导入必要模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 创建WebDriver对象
wait = WebDriver(driver, 10)    # 最多等10秒

# 使用expected_conditions等待特定条件完成
element = wait.until(EC.visibility_of_element_located((By.ID, "element_id")))

常见的expected_conditions

  • element_to_be_clickable:等待元素可点击
  • presence_of_element_located:等待元素出现在DOM中
  • visibility_of_element_located:等待元素可见
  • text_to_be_present_in_element:等待元素中的文本出现
  • title_contains:等待页面标题包含特定文件
  • alert_is_present:等待警告窗出现 

等待元素可点击

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "element_id"))
)

等待元素出现在DOM中

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "element_id"))
)

等待元素可见

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)

等待元素中的文本出现

element = WebDriverWait(driver, 10).until(
    EC.text_to_be_present_in_element((By.ID, "element_id"), "expected_text")
)

等待页面标题包含特定文本

WebDriverWait(driver, 10).until(
    EC.title_contains("expected_title")
)

隐式等待 

        隐式等待(Implicit Wait)是设置一个全局的等待时间,在查找元素时,如果元素暂时不可用,WebDriver将等待一段时间再查找元素。隐式等待的时间是全局的,一旦设置,它将在整个WebDriver实例的生命周期内生效。

优点:

  • 简单易用,只需要设置一次,适用于整个WebDriver实例
  • 减少代码重复,不需要在每次查找元素时都设置等待时间

缺点:

  • 不适用于特定条件,只能等待元素出现,无法等待特定条件(如元素点击、文本出现等)
  • 可能导致不必要的等待,如果页面加载速度较快,隐式等待可能会导致不必要的等待时间

用法

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)    # 设置隐式等待时间为10秒
driver.get("https://www.example.com")

# 查找元素,如果元素不可用,WebDriver最多等待10秒
element = driver.find_element(By.ID, "element_id")

 强制等待

        强制等待(Force Wait)是使用time.sleep方法让程序暂停执行一段时间。强制等待是最简单但也最不推荐的等待方式,因为它会无条件地等待指定的时间,可能会导致测试变慢或不稳定。

优点:

  • 简单直接,直接暂停执行,适用于调试和临时解决问题

缺点: 

  • 效率低,无条件等待,可能导致测试变慢
  • 不稳定,页面加载时间不确定,强制等待可能导致测试失败或不稳定

用法

import time
from selenium import webdirver

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 强制等待5秒
time.sleep(5)

# 查找元素
element = driver.find_element(By.ID, "element_id")

相关推荐

  1. 等待等待强制等待

    2024-07-14 11:04:02       25 阅读
  2. 详解Selenium 强制等待等待等待

    2024-07-14 11:04:02       25 阅读
  3. Selenium WebDriver使用EC来定义等待的条件

    2024-07-14 11:04:02       40 阅读
  4. Selenium 等待

    2024-07-14 11:04:02       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 11:04:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 11:04:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 11:04:02       57 阅读
  4. Python语言-面向对象

    2024-07-14 11:04:02       68 阅读

热门阅读

  1. HttpUtil工具

    2024-07-14 11:04:02       24 阅读
  2. 中文科技核心论文

    2024-07-14 11:04:02       22 阅读
  3. 解决npm install 安装报错记录贴

    2024-07-14 11:04:02       27 阅读
  4. 山洪灾害研究

    2024-07-14 11:04:02       25 阅读
  5. 小白C语言基础详解:函数

    2024-07-14 11:04:02       23 阅读
  6. 【2024最新】C++扫描线算法介绍+实战例题

    2024-07-14 11:04:02       23 阅读
  7. 基于MacOS系统Sonoma 14.5的SSH服务禁止密码登录

    2024-07-14 11:04:02       23 阅读
  8. 【Druid 未授权访问漏洞】解决办法

    2024-07-14 11:04:02       23 阅读
  9. 电子版pdf格式标书怎么加盖公章?

    2024-07-14 11:04:02       28 阅读