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

Posted NoamaNelson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium源码通读·2 | common/exceptions.py异常类相关的知识,希望对你有一定的参考价值。

·2 | common/exceptions.py异常类

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

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: %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
  • __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 所有异常类说明和分解

  • 注意:以下为源码中的针对说明,英文不好,翻译的可能有问题,但大体意思基本没有问题。
异常类描述返回
ErrorInResponseException在服务器端发生错误时引发,与firefox扩展通信时可能会发生这种情况或者远程驱动服务器response 信息
InvalidSwitchToTargetException当要切换的frame或窗口目标不存在时引发pass占位
NoSuchFrameException当要切换的frame目标不存在时抛出,继承InvalidSwitchToTargetExceptionpass占位
NoSuchWindowException当要切换的窗口目标不存在时抛出,要查找当前的活动窗口句柄集,可以获取一个列表按以下方式创建活动窗口句柄:print driver.window_handlespass占位
NoSuchElementException找不到元素时引发,如果遇到此类异常,可能需要检查以下内容:A、检查find_by中使用的选择器;B、元素在查找操作时可能尚未出现在屏幕上,(网页仍在加载)请参阅selenium。网络驱动程序。支持等待WebDriverWait()了解如何编写等待包装器以等待元素出现pass占位
NoSuchAttributeException找不到元素的属性时引发,您可能需要检查所使用的特定浏览器中是否存在该属性对…进行测试。对于同一个浏览器,某些浏览器可能有不同的属性名所有物(IE8的innerTextFirefox.textContentpass占位
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时引发而不是当前的URLpass占位
UnableToSetCookieException当驱动程序未能设置cookie时引发pass占位
RemoteDriverServerException源码没说pass占位
TimeoutException当命令没有在足够的时间内完成时引发pass占位
MoveTargetOutOfBoundsException当目标提供给'ActionsChains' move()时抛出方法无效,即超出文档范围pass占位
UnexpectedTagNameException当支持类未获取预期的web元素时引发pass占位
InvalidSelectorException用于查找元素的选择器未返回时引发一个网络元素。目前,只有当选择器是xpath时才会发生这种情况表达式,它要么在语法上无效 。继承NoSuchElementExceptionpass占位
ImeNotAvailableException当IME支持不可用时引发。对于每个与IME相关的如果计算机上没有IME支持,则调用方法pass占位
ImeActivationFailedException激活IME引擎失败时引发pass占位
InvalidArgumentException传递给命令的参数无效或格式不正确pass占位
javascriptException执行用户提供的JavaScript时出错pass占位
NoSuchCookieException在当前浏览上下文的活动文档的关联cookie中未找到与给定路径名匹配的cookiepass占位
ScreenshotException屏幕截图变得不可能了pass占位
ElementClickInterceptedException无法完成元素单击命令,因为接收事件的元素遮挡了请求单击的元素pass占位
InsecureCertificateException导航导致用户代理发出证书警告,这通常是TLS证书过期或无效的结果pass占位
InvalidCoordinatesException为交互操作提供的坐标无效pass占位
InvalidSessionIdException如果给定会话id不在活动会话列表中,则发生,这意味着该会话不存在或不活动pass占位
SessionNotCreatedException无法创建新会话pass占位
UnknownMethodException请求的命令与已知URL匹配,但与该URL的方法不匹配pass占位

『全栈测试技术,分享,共勉,共进,提升』


以上是关于selenium源码通读·2 | common/exceptions.py异常类的主要内容,如果未能解决你的问题,请参考以下文章

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

selenium源码通读·13 |webdriver/support分析

selenium源码通读·3 | 从源码看引入webdriver包的原因

selenium源码通读·12 |webdriver/remote分析

selenium源码通读·9 |webdriver/common/desired_capabilities.py-DesiredCapabilities类分析

selenium源码通读·7 |webdriver/common/by.py-By类分析