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: %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

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

未知方法异常

注:这些异常你应该都要熟悉的理解,以便在实际自动化测试过程中快速定位问题并解决问题

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】C++ Primer快速入门三:两种控制语句

语句总是顺序执行的:第一条语句执行完了接着是第二条,第三条等等。这是最简单的情况,为了更好的控制语句的运行,程序设计语言提供了多种控制结构支持更为复杂的语句执行...

3439
来自专栏java闲聊

Shell入门

a. 单引号(括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释)

1364
来自专栏编程心路

想学习php的,不如来这里看看

win+R打开命令行,cmd进DOS窗口 DOS命令开启关闭Apache和Mysql Apache启动关闭命令

1263
来自专栏用户画像

H5中的标记方法

要使用H5标记,必须先进行如下的doctype声明,不区分大小写。Web浏览器通过判断文件开头有没有这个声明,来判断解析器和渲染类型是否切换到对应的H5模式。

821
来自专栏python百例

118-ip地址与10进制数的转换

当我们ping数字2130706433时,从127.0.0.1返回结果。为什么是这样呢? IP地址是个32位的二进制数,表示成点分10进制,只是为了方便,如果...

1783
来自专栏性能与架构

Javascript ES6版本的4个基础用法

JS 的 ES6版本已经被各大浏览器广泛支持,很多前端框架也已经使用 ES6,并且还有 Babel 可以做兼容处理,所以ES6已经进入了应用阶段 如果您对 ES...

3447
来自专栏程序员的SOD蜜

C#中?与??的区别

起初我也不知道C#中有??操作符,今天张鹏在查看我的MVC示例程序的时候问了这个问题,检查代码后发现,下面的代码是VS2010在生成MVC应用程序自己添加的: ...

2377
来自专栏黑白安全

PHP中echo,print,print_r,var_dump有什么区别

1.echo输出字符串或者数字,接受参数列表,不是函数,没有返回值。如果只是输出,echo更快

873
来自专栏Golang语言社区

如何在Go的函数中得到调用者函数名?

有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。

1333
来自专栏流媒体

C++输入输出流

741

扫码关注云+社区

领取腾讯云代金券