Python Selenium异常处理:捕获NoSuchElementException与ElementNotVisibleException实战
本文详解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异常处理的实例代码,希望能为读者提供帮助。如有任何疑问,欢迎留言咨询,小编将及时回复。同时,衷心感谢各位对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









