📅  最后修改于: 2023-12-03 15:06:43.782000             🧑  作者: Mango
在使用 Selenium 进行自动化测试时,可能会遇到各种异常。这些异常可能是由于网络延迟、元素不存在、元素不可见等原因引起的。在编写自动化测试脚本时,我们需要了解这些异常,以便能够正确地处理它们。
当我们尝试找到一个不存在的元素时,就会引发 NoSuchElementException
异常。例如,在下面的代码中,我们尝试按名称查找一个没有的元素:
element = driver.find_element_by_name("不存在的元素")
如果找不到该元素,就会引发 NoSuchElementException
异常。为了避免这种情况,我们应该先检查元素是否存在。
当我们的脚本在等待某个元素的出现或消失时,如果超时,就会引发 TimeoutException
异常。例如,在下面的代码中,我们等待一个元素在 10 秒内消失:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
wait.until_not(EC.presence_of_element_located(("id", "元素的 id")))
如果该元素在 10 秒内没有消失,就会引发 TimeoutException
异常。为了避免这种情况,我们可以增加等待时间,或者检查元素是否已经消失。
当我们尝试与一个不可交互的元素交互时,就会引发 ElementNotInteractableException
异常。例如,在下面的代码中,我们尝试在一个不可编辑的文本框中输入文本:
element = driver.find_element_by_id("不可编辑的文本框的 id")
element.send_keys("文本")
如果该元素不可编辑,就会引发 ElementNotInteractableException
异常。为了避免这种情况,我们应该先检查元素是否可编辑。
当我们尝试使用一个已经过期的元素时,就会引发 StaleElementReferenceException
异常。例如,在下面的代码中,我们在一个已经刷新的页面上尝试重新使用之前的元素:
element = driver.find_element_by_id("元素的 id")
driver.refresh()
element.click()
如果该元素已经过期,就会引发 StaleElementReferenceException
异常。为了避免这种情况,我们应该先检查元素是否还存在。
以上是常见的 Selenium 异常,当然还有其他异常,如 ElementClickInterceptedException
、UnexpectedAlertPresentException
等。在编写自动化测试脚本时,我们应该根据需要处理这些异常。