Selenium3源码之异常模块篇
Selenium3源码之异常模块篇
简介
本文分析Selenium3源码中关于异常处理的通用代码,要分析的代码位置如下(路径为:***python3/lib/site-packages/selenium/common/exceptions.py):
这里我源码做了折叠以便大家看下,只截取部分图如下:
在模块中共30余个异常类,本文不会一一说明,所有的类,请自行去看源码学习。
webdriver异常基类
类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: %sn" % self.msg
# 判断是否存在异常快照信息,有则拼接到格式化字符串
if self.screen is not None:
exception_msg += "Screenshot: available via screenn"
# 判断是否存在堆栈跟踪信息,有则拼接到格式化字符串
if self.stacktrace is not None:
stacktrace = "n".join(self.stacktrace)
exception_msg += "Stacktrace:n%s" % stacktrace # 返回格式化后的异常信息
return exception_msg
webdriver服务端异常类
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 |
未知方法异常 |
注:这些异常你应该都要熟悉的理解,以便在实际自动化测试过程中快速定位问题并解决问题
- 通过Xtrabackup日志来恢复检查点文件
- POJ--2158--------------Milking Grid(最小覆盖字符矩阵)---(开二维kmp)
- poj-------------(2752)Seek the Name, Seek the Fame(kmp)
- hust--------The Minimum Length (最短循环节)(kmp)
- hdu-----(3746)Cyclic Nacklace(kmp)
- javaSE之如何将一个文件复制到另一个文件
- 将文件字节输出流写入到文本中
- javaSE之如何将一个文档显示出来(,txt,.doc,.....)
- Git -- 分支与合并 (命令行+可视化工具p4merge)
- java之如何实现调用启动一个可执行文件,exe
- file类之目录
- 理解Go语言Web编程(上)
- 理解Go语言Web编程(下)
- 呆呆的io流输入输出的一些基础
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Codeforce 239 B. Easy Tape Programming
- Codeforces Round #530 (Div. 1) 1098A Sum in the tree
- 非易失性WAL buffer实现解析(三)
- android实现切换日期左右无限滑动效果
- 疯子的算法总结(七) 字符串算法之 manacher 算法 O(N)解决回文串
- PostgreSQL WAL解析:构建WAL记录准备
- CodeForces - 225C. Barcode(DP)
- android studio 3.0 service项目背景音乐实现
- 疯子的算法总结(六) 复杂排序算法 ① 归并排序 merge_sort()
- PostgreSQL扫描方法综述
- CodeForces - 224C. Bracket Sequence (栈模拟)简单做法
- XLOG段文件跳号现象分析
- codeforce 227E 矩阵快速幂求斐波那契+N个连续数求最大公约数+斐波那契数列的性质
- 疯子的算法总结(五) 矩阵乘法 (矩阵快速幂)
- codeforce 227D Naughty Stone Piles (贪心+递归+递推)