📌  相关文章
📜  显式等待后出现什么样的异常 (1)

📅  最后修改于: 2023-12-03 14:55:11.627000             🧑  作者: Mango

显式等待后出现什么样的异常

在执行自动化测试脚本时, 经常需要等待某些操作完毕后再进行下一步操作, 这时就需要使用等待操作来确保页面元素已经加载完毕, 或者某些异步操作已经完成. Selenium中提供了两种等待方式:

  • 隐式等待: 执行每个命令默认等待一段时间, 或者直到元素加载完成
  • 显式等待: 在特定条件下等待一段时间, 或者直到某个特定元素加载完成

显式等待在Selenium中通过 Expected Condition 实现. 在使用显式等待时, 会指定一些条件(如元素是否可见、是否可单击、是否包含特定文本等), 直到满足这些条件或超时后才会继续执行下一步操作.

如果在等待时间内条件未满足, 就会抛出 TimeoutException 异常.

以下是一个示例代码, 使用显式等待查找一个id为element的元素, 如果元素在10秒内未出现或未可点击, 就会抛出TimeoutException异常:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver.get("http://www.example.com")

# 等待元素出现和可点击
element_present = EC.element_to_be_clickable((By.ID, 'element'))
WebDriverWait(driver, 10).until(element_present)

以上代码中, 通过 WebDriverWait 指定等待时间, 并指定等待条件为元素是否可点击, 如果在10秒内元素未可点击, 就会抛出 TimeoutException 异常.

需要注意的是, 在使用显式等待时, 必须导入 WebDriverWaitexpected_conditions 模块. 并且, 在使用等待条件时, 需要从 expected_conditions 模块中导入已有的条件, 或自定义新的条件.

总之, 显式等待可以有效避免页面加载较慢或异步操作未完成导致的异常. 但也需要根据实际情况和需求合理使用.