Selenium3源码之异常模块篇
本文分析Selenium3源码中关于异常处理的通用代码,要分析的代码位置如下(路径为:***python3/lib/site-packages/selenium/common/exceptions.py):
这里我源码做了折叠以便大家看下,只截取部分图如下:
在模块中共30余个异常类,本文不会一一说明,所有的类,请自行去看源码学习。
类WebDriverException是webdriver所有异常类的基类,其继承自Python中的Exception基础类。下面将直接在源码中对代码进行注释说明:
## 定义WebDriverException类,继承Exception
class WebDriverException(Exception):
"""
Base webdriver exception.
webdriver异常基类
"""
# __init__函数,初始化用
def __init__(self,
msg=None, # 异常信息
screen=None, # 异常快照
stacktrace=None): # 堆栈跟踪信息
self.msg = msg
self.screen = screen
self.stacktrace = stacktrace
# 把类实例转换成字符串类型
def __str__(self):
# 格式化异常信息
exception_msg = "Message: %s\n" % self.msg
# 判断是否存在异常快照信息,有则拼接到格式化字符串
if self.screen is not None:
exception_msg += "Screenshot: available via screen\n"
# 判断是否存在堆栈跟踪信息,有则拼接到格式化字符串
if self.stacktrace is not None:
stacktrace = "\n".join(self.stacktrace)
exception_msg += "Stacktrace:\n%s" % stacktrace # 返回格式化后的异常信息
return exception_msg
ErrorInResponseException类是webdriver服务端抛出异常时处理
# 继承自WebDriverException基类
# 当webdriver远程服务出现异常时,抛出该异常
class ErrorInResponseException(WebDriverException):
"""
Thrown when an error has occurred on the server side.
This may happen when communicating with the firefox extension
or the remote driver server.
"""
def __init__(self, response, msg):
WebDriverException.__init__(self, msg)
self.response = response
其他异常基本如下图所示的样式:
主要有这些异常:
异常 | 描述 |
---|---|
InvalidSwitchToTargetException | 切换的窗口或frame不存在时抛出该异常 |
NoSuchFrameException | 切换的frame不存在时抛出该异常 |
NoSuchWindowException | 切换的窗口不存在时抛出该异常 |
NoSuchElementException | 未找到元素时抛出该异常 |
NoSuchAttributeException | 未找到元素的指定属性时抛出该异常 |
StaleElementReferenceException | 引用一个不存在的元素时抛出该异常 |
InvalidElementStateException | 当元素状态无效时导致webdriver指令无法完成时,抛出该异常 |
UnexpectedAlertPresentException | 当alert弹出导致webdriver指令阻塞时抛出该异常 |
NoAlertPresentException | 当切换至一个不存在的alert弹窗时抛出该异常 |
ElementNotVisibleException | 当操作不可见元素时抛出该异常 |
UnableToSetCookieException | 设置cookie失败时抛出该异常 |
RemoteDriverServerException | 远程webdriver服务异常时抛出该异常 |
TimeoutException | webdirver指令超时时抛出该异常 |
UnexpectedTagNameException | 使用tag name定位失败时抛出该异常 |
InvalidSelectorException | 当使用了无效的定位选择器时抛出该异常 |
JavascriptException | 执行js异常时抛出该异常 |
NoSuchCookieException | 获取不存在的cookie时抛出该异常 |
ScreenshotException | 截屏异常 |
ElementClickInterceptedException | 单击元素交互异常时抛出该异常 |
InsecureCertificateException | SSL证书异常时抛出该异常 |
InvalidSessionIdException | webdriver session(会话)异常时(例如会话无效),抛出该异常 |
SessionNotCreatedException | 无法创建新的webdriver会话时抛出该异常 |
UnknownMethodException | 未知方法异常 |
注:这些异常你应该都要熟悉的理解,以便在实际自动化测试过程中快速定位问题并解决问题