1 异常类基类
common/exceptions.py
目录定义了各种异常类;- 其中
WebDriverException
为基类; - 源码如下:
class WebDriverException(Exception):
"""
Base webdriver exception.
"""
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
2 基类分析
- 从后边的异常类可以看出,都是继承了以上的基类;
- 而这个基类中有三个参数:
def __init__(self, msg=None, screen=None, stacktrace=None):
self.msg = msg
self.screen = screen
self.stacktrace = stacktrace
# msg:发生异常的信息
# screen:发生异常进行截屏
# stacktrace:异常堆栈信息
- 此外还定义了“魔法”方法
__str__
,用来返回一个对象的描述信息
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
- 从
__str__
中可以看出返回的是异常信息exception_msg
,而其初始值为msg
,当screen
和stacktrace
都不为空的时候,exception_msg
为其它两个参数的拼接。
3 常见异常类NoSuchElementException分析
- 我们在做自动化的时候,经常会遇到的异常是,元素没有找到,那么它的异常类就是
NoSuchElementException
; NoSuchElementException
源码如下:
class NoSuchElementException(WebDriverException):
"""
Thrown when element could not be found.
If you encounter this exception, you may want to check the following:
* Check your selector used in your find_by...
* Element may not yet be on the screen at the time of the find operation,
(webpage is still loading) see selenium.webdriver.support.wait.WebDriverWait()
for how to write a wait wrapper to wait for an element to appear.
"""
pass
- 该异常类的说明如下:
1、找不到元素时引发 2、如果遇到此类异常,可能需要检查以下内容: A、检查find_by中使用的选择器; B、元素在查找操作时可能尚未出现在屏幕上,(网页仍在加载)请参阅selenium。网络驱动程序。支持等待WebDriverWait()了解如何编写等待包装器以等待元素出现
- 返回结果:
pass
,这里只是进行占位,说明具体的功能应该在以后的子类中进行。
4 所有异常类说明和分解
- 注意:以下为源码中的针对说明,英文不好,翻译的可能有问题,但大体意思基本没有问题。
异常类 | 描述 | 返回 |
---|---|---|
| 在服务器端发生错误时引发,与firefox扩展通信时可能会发生这种情况或者远程驱动服务器 |
|
| 当要切换的frame或窗口目标不存在时引发 |
|
| 当要切换的frame目标不存在时抛出,继承 |
|
| 当要切换的窗口目标不存在时抛出,要查找当前的活动窗口句柄集,可以获取一个列表按以下方式创建活动窗口句柄: |
|
| 找不到元素时引发,如果遇到此类异常,可能需要检查以下内容:A、检查find_by中使用的选择器;B、元素在查找操作时可能尚未出现在屏幕上,(网页仍在加载)请参阅selenium。网络驱动程序。支持等待 |
|
| 找不到元素的属性时引发,您可能需要检查所使用的特定浏览器中是否存在该属性对…进行测试。对于同一个浏览器,某些浏览器可能有不同的属性名所有物(IE8的 |
|
| 当对元素的引用现在“stale”时引发,Stale表示元素不再出现在页面的DOM上 | |
| 由于元素处于无效状态而无法完成命令时引发,这可能是因为试图清除既不可编辑又不可重置的元素 |
|
| 出现意外alert时引发,通常在预期模式阻止webdriver窗体执行任何更多命令 |
|
| 切换到无提示alert时引发,这可能是由于在发出alert时调用 |
|
| 当DOM上存在元素时抛出,但是它不可见,因此无法与之交互,在尝试单击或阅读文本时最常见隐藏在视图之外的元素的 |
|
| 当DOM中存在一个元素但没有交互时抛出使用该元素将点击另一个元素进行绘制 |
|
| 尝试选择不可选择的元素时引发,For example, selecting a 'script' element.例如,选择“脚本”元素 |
|
| 尝试在其他域下添加cookie时引发而不是当前的URL |
|
| 当驱动程序未能设置cookie时引发 |
|
| 源码没说 |
|
| 当命令没有在足够的时间内完成时引发 |
|
| 当目标提供给 |
|
| 当支持类未获取预期的web元素时引发 |
|
| 用于查找元素的选择器未返回时引发一个网络元素。目前,只有当选择器是xpath时才会发生这种情况表达式,它要么在语法上无效 。继承 |
|
| 当IME支持不可用时引发。对于每个与IME相关的如果计算机上没有IME支持,则调用方法 |
|
| 激活IME引擎失败时引发 |
|
| 传递给命令的参数无效或格式不正确 |
|
| 执行用户提供的 |
|
| 在当前浏览上下文的活动文档的关联cookie中未找到与给定路径名匹配的cookie |
|
| 屏幕截图变得不可能了 |
|
| 无法完成元素单击命令,因为接收事件的元素遮挡了请求单击的元素 |
|
| 导航导致用户代理发出证书警告,这通常是TLS证书过期或无效的结果 |
|
| 为交互操作提供的坐标无效 |
|
| 如果给定会话id不在活动会话列表中,则发生,这意味着该会话不存在或不活动 |
|
| 无法创建新会话 |
|
| 请求的命令与已知URL匹配,但与该URL的方法不匹配 |
|