📜  你如何处理 selenium 中的异常 (1)

📅  最后修改于: 2023-12-03 15:22:07.280000             🧑  作者: Mango

你如何处理 Selenium 中的异常?

在使用 Selenium 进行自动测试时,经常会遇到各种异常情况。如果不及时处理这些异常,会导致测试失败或者测试结果不可靠。本文将介绍如何处理 Selenium 中常见的异常,以确保测试的正确性和可靠性。

1. NoSuchElementException

NoSuchElementException 异常是 Selenium 中最常见的异常之一。它表示在页面中找不到指定的元素。通常情况下,这是因为元素还没有加载出来或者元素的定位方式不正确。要解决这个异常,可以使用 WebDriverWait 类等待元素加载完成或者调整定位方式。

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

# 等待元素加载完成
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'my_element'))
)

# 调整定位方式
element = driver.find_element_by_xpath('//span[@class="my_class"]')
2. StaleElementReferenceException

StaleElementReferenceException 异常表示要访问的元素已经不再存在了,通常是因为在访问元素之前已经进行了页面的刷新或者异步加载。要解决这个异常,可以重新定位元素或者使用 WebDriverWait 类等待元素重新加载。

# 重新定位元素
element = driver.find_element_by_id('my_element')

# 等待元素重新加载
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'my_element'))
)
3. TimeoutException

TimeoutException 异常表示等待某个条件超时了,通常是因为定位元素或者等待页面加载花费的时间太长。要解决这个异常,可以增加等待的时间或者调整定位元素的方式。

# 增加等待时间
element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, 'my_element'))
)

# 调整定位元素的方式
element = driver.find_element_by_xpath('//div[@class="my_class"]')
4. ElementNotInteractableException

ElementNotInteractableException 异常表示要操作的元素无法交互,通常是因为元素处于不可见或者被覆盖的状态。要解决这个异常,可以使用 WebDriverWait 类等待元素可见或者调整元素的位置。

# 等待元素可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, 'my_element'))
)

# 调整元素位置
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
结论

在使用 Selenium 进行自动测试时,合理处理异常是非常重要的。通过使用 WebDriverWait 类等待元素加载完成或者调整定位方式,可以有效地避免 NoSuchElementExceptionStaleElementReferenceExceptionTimeoutException 这些常见异常。在遇到 ElementNotInteractableException 异常时,可以使用 WebDriverWait 类等待元素可见或者调整元素的位置,以确保元素可以交互。