写点什么

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

作者:虫无涯
  • 2023-04-10
    陕西
  • 本文字数:1326 字

    阅读完需:约 4 分钟

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

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





发布于: 2023-04-10阅读数: 17
用户头像

虫无涯

关注

专注测试领域各种技术研究、分享和交流~ 2019-12-11 加入

CSDN测试领域优质创作者 | CSDN博客专家 | 阿里云专家博主 | 华为云享专家 | 51CTO专家博主

评论

发布
暂无评论
selenium源码通读·2 | common/exceptions.py异常类_Python_虫无涯_InfoQ写作社区