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

举报
虫无涯 发表于 2023/01/18 10:23:49 2023/01/18
【摘要】 1 异常类基类common/exceptions.py目录定义了各种异常类;其中WebDriverException为基类;源码如下:class WebDriverException(Exception): """ Base webdriver exception. """ def __init__(self, msg=None, screen=None, stac...

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,当screenstacktrace都不为空的时候,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目标不存在时抛出,继承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占位
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。