Python Selenium异常处理:捕获NoSuchElementException与ElementNotVisibleException实战

Cora
Cora
发布时间:2026-10-13| 5人浏览过
原创

本文详解Python Selenium自动化测试中的异常处理机制。通过try...except...raise结构捕获NoSuchElementException和ElementNotVisibleException,并结合save_screenshot或get_screenshot_as_file方法保存当前浏览器窗口截图,辅助定位Bug。文章提供完整代码示例,解析常见Selenium异常类型及处理策略。

在自动化测试执行期间,错误和异常的发生是不可避免的。例如,若测试脚本未能定位到页面对应元素,系统会立即抛出NoSuchElementException异常。面对此类情况,无需惊慌,这通常意味着测试脚本逻辑或测试环境配置存在偏差。关键在于如何妥善处理这些异常。由于问题往往局限于局部,为确保测试脚本能够继续执行后续步骤,我们可以采用try...except...raise语句来捕获并处理异常。在捕获异常后,打印出具体的异常原因有助于深入分析问题的根源。

下文将通过具体示例展示处理流程:当异常被抛出时,将错误信息打印至控制台,同时截取当前浏览器窗口画面,作为后续排查Bug的依据,以便开发人员更准确地定位问题。相关实现代码如下:

import unittest
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException  #导入NoSuchElementException
class ExceptionTest(unittest.TestCase):
  def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.get("https://www.baidu.com")
  def test_exception(self):
    driver = self.driver
    try:
      search_text = driver.find_element_by_id("ss")
      self.assertEqual('百度一下', search_text.get_attribute("value"))
    except NoSuchElementException:
      file_name = "no_such_element.png"
      #driver.save_screenshot(file_name)
      driver.get_screenshot_as_file(file_name) 
      raise  #抛出异常,注释后则不抛出异常
  def tearDown(self):
    self.driver.quit()
if __name__ == '__main__':
  unittest.main(verbosity=2)

运行包含异常的代码,输出结果如下所示:

上述代码中调用了WebDriver内置的屏幕捕获及保存功能,具体包括save_screenshot(filename)和save_screenshot_as_file(filename)方法。在测试异常抛出的过程中,系统会同时截取浏览器屏幕,并将截图以自定义的文件名保存在指定路径(示例中为当前工作目录)。

此外,若某个元素虽然存在于DOM中但处于不可见状态,导致无法与其进行交互,系统同样会抛出异常。以百度首页登录功能为例,当目标元素不可见时,将触发ElementNotVisibleException异常。具体代码实现如下:

import unittest
from selenium import webdriver
from selenium.common.exceptions import ElementNotVisibleException  #导入ElementNotVisibleException
class ExceptionTest(unittest.TestCase):
  def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.get("https://www.baidu.com")
  def test_exception(self):
    driver = self.driver
    try:
      login = driver.find_element_by_name("tj_login")
      login.click()
    except ElementNotVisibleException:
      raise  
  def tearDown(self):
    self.driver.quit()
if __name__ == '__main__':
  unittest.main(verbosity=2)

运行上述代码并触发异常后,控制台输出结果如下:

接下来,列举Selenium中常见的几种异常类型供参考:

总结

以上介绍了Python中Selenium异常处理的实例代码,希望能为读者提供帮助。如有任何疑问,欢迎留言咨询,小编将及时回复。同时,衷心感谢各位对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。