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

        在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")
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值