selenium源码通读·2 | common/exceptions.py异常类

2023-02-08 09:51:10 浏览数 (1)

1 异常类基类

  • common/exceptions.py目录定义了各种异常类;
  • 其中WebDriverException为基类;
  • 源码如下:
代码语言:python代码运行次数:0复制
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 基类分析

  • 从后边的异常类可以看出,都是继承了以上的基类;
  • 而这个基类中有三个参数:
代码语言:python代码运行次数:0复制
    def __init__(self, msg=None, screen=None, stacktrace=None):
        self.msg = msg
        self.screen = screen
        self.stacktrace = stacktrace

# msg:发生异常的信息
# screen:发生异常进行截屏
# stacktrace:异常堆栈信息
  • 此外还定义了“魔法”方法__str__,用来返回一个对象的描述信息
代码语言:python代码运行次数:0复制
 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,当screenstacktrace都不为空的时候,exception_msg为其它两个参数的拼接。

3 常见异常类NoSuchElementException分析

  • 我们在做自动化的时候,经常会遇到的异常是,元素没有找到,那么它的异常类就是NoSuchElementException
  • NoSuchElementException源码如下:
代码语言:python代码运行次数:0复制
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 所有异常类说明和分解

  • 注意:以下为源码中的针对说明,英文不好,翻译的可能有问题,但大体意思基本没有问题。

异常类

描述

返回

ErrorInResponseException

在服务器端发生错误时引发,与firefox扩展通信时可能会发生这种情况或者远程驱动服务器

response 信息

InvalidSwitchToTargetException

当要切换的frame或窗口目标不存在时引发

pass占位

NoSuchFrameException

当要切换的frame目标不存在时抛出,继承InvalidSwitchToTargetException

pass占位

NoSuchWindowException

当要切换的窗口目标不存在时抛出,要查找当前的活动窗口句柄集,可以获取一个列表按以下方式创建活动窗口句柄:print driver.window_handles

pass占位

NoSuchElementException

找不到元素时引发,如果遇到此类异常,可能需要检查以下内容:A、检查find_by中使用的选择器;B、元素在查找操作时可能尚未出现在屏幕上,(网页仍在加载)请参阅selenium。网络驱动程序。支持等待WebDriverWait()了解如何编写等待包装器以等待元素出现

pass占位

NoSuchAttributeException

找不到元素的属性时引发,您可能需要检查所使用的特定浏览器中是否存在该属性对…进行测试。对于同一个浏览器,某些浏览器可能有不同的属性名所有物(IE8的innerTextFirefox.textContent

pass占位

StaleElementReferenceException

当对元素的引用现在“stale”时引发,Stale表示元素不再出现在页面的DOM上

InvalidElementStateException

由于元素处于无效状态而无法完成命令时引发,这可能是因为试图清除既不可编辑又不可重置的元素

pass占位

UnexpectedAlertPresentException

出现意外alert时引发,通常在预期模式阻止webdriver窗体执行任何更多命令

alert_text

NoAlertPresentException

切换到无提示alert时引发,这可能是由于在发出alert时调用Alert()类上的操作造成的还没有出现在屏幕上

pass占位

ElementNotVisibleException

当DOM上存在元素时抛出,但是它不可见,因此无法与之交互,在尝试单击或阅读文本时最常见隐藏在视图之外的元素的

pass占位

ElementNotInteractableException

当DOM中存在一个元素但没有交互时抛出使用该元素将点击另一个元素进行绘制

pass占位

ElementNotSelectableException

尝试选择不可选择的元素时引发,For example, selecting a 'script' element.例如,选择“脚本”元素

pass占位

InvalidCookieDomainException

尝试在其他域下添加cookie时引发而不是当前的URL

pass占位

UnableToSetCookieException

当驱动程序未能设置cookie时引发

pass占位

RemoteDriverServerException

源码没说

pass占位

TimeoutException

当命令没有在足够的时间内完成时引发

pass占位

MoveTargetOutOfBoundsException

当目标提供给'ActionsChains' move()时抛出方法无效,即超出文档范围

pass占位

UnexpectedTagNameException

当支持类未获取预期的web元素时引发

pass占位

InvalidSelectorException

用于查找元素的选择器未返回时引发一个网络元素。目前,只有当选择器是xpath时才会发生这种情况表达式,它要么在语法上无效 。继承NoSuchElementException

pass占位

ImeNotAvailableException

当IME支持不可用时引发。对于每个与IME相关的如果计算机上没有IME支持,则调用方法

pass占位

ImeActivationFailedException

激活IME引擎失败时引发

pass占位

InvalidArgumentException

传递给命令的参数无效或格式不正确

pass占位

JavascriptException

执行用户提供的JavaScript时出错

pass占位

NoSuchCookieException

在当前浏览上下文的活动文档的关联cookie中未找到与给定路径名匹配的cookie

pass占位

ScreenshotException

屏幕截图变得不可能了

pass占位

ElementClickInterceptedException

无法完成元素单击命令,因为接收事件的元素遮挡了请求单击的元素

pass占位

InsecureCertificateException

导航导致用户代理发出证书警告,这通常是TLS证书过期或无效的结果

pass占位

InvalidCoordinatesException

为交互操作提供的坐标无效

pass占位

InvalidSessionIdException

如果给定会话id不在活动会话列表中,则发生,这意味着该会话不存在或不活动

pass占位

SessionNotCreatedException

无法创建新会话

pass占位

UnknownMethodException

请求的命令与已知URL匹配,但与该URL的方法不匹配

pass占位

0 人点赞