乐趣区

关于selenium:selenium源码通读-commonexceptionspy异常类

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 指标不存在时抛出,继承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占位
退出移动版