Selenium 遇到 'stale element reference' 异常怎么办?

在使用 Selenium 进行网页自动化测试时,你可能会遇到 selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document (Session info: chrome=109.0.5414.120) 这样的报错信息。

这是什么意思?

这个异常意味着你试图操作一个已经过时的元素。当页面发生变化,比如页面刷新、AJAX 加载或者跳转到新页面,之前获取的元素引用就可能失效,不再附加在当前页面文档中。

如何解决?

以下是一些解决 'stale element reference' 异常的常见方法:

  1. 重新查找元素: 在每次操作元素之前,重新获取该元素的引用。
  2. 使用 WebDriverWait: 使用 WebDriverWait 配合 expected_conditions 等待元素出现并可操作。
  3. 捕获异常并重试: 使用 try-except 块捕获 StaleElementReferenceException 异常,并在异常发生时重试操作。

示例代码 (Python):

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

# ... 初始化 WebDriver ...

try:
    # 尝试点击元素
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'my-element'))
    )
    element.click()
except StaleElementReferenceException:
    # 如果出现异常,重新查找元素
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'my-element'))
    )
    element.click()

通过以上方法,你可以有效地处理 Selenium 中的 'stale element reference' 异常,提高测试脚本的稳定性。

Selenium StaleElementReferenceException: 元素过时的解决方法

原文地址: https://www.cveoy.top/t/topic/fJi1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录