1、准备工作
- 安装python3
- 安装selenium3
2、python端selenium API源码结构
- common:定义了通用的异常类
- exceptions:定义了所有可能在webdriver代码中可能出现的异常
- webdriver:核心实现
- android:android浏览器支持
- blackberry:blackberry平台支持
- chrome:谷歌浏览器支持
- edge:微软最新的edge浏览器支持,一般要windows10及以上平台比较好
- firefox:火狐浏览器支持
- ie:微软ie浏览器支持,注意ie和edge是两个不同的浏览器
- opera:opera浏览器支持,可能很多人没见过这个,很出名的
- phantomjs:内存模式可以渲染解析js、css、html,可以快速运行
- safari:apple下的浏览器支持
- webkitgtk:一般不怎么用
上述各目录定义了各浏览器兼容的代码,即用于支持不同的浏览器
- common:定义了webdriver所指定的通用能力
- remote:定义了webdriver的核心能力
- support:定义了webdriver的辅助能力
- __init__.py 对外导出了webdriver的能力
3、common/exceptions 异常模块
common/__int__.py -- 对外提供导入功能
# 提供对外导入的功能
from . import exceptions # noqa
commom/exceptions.py -- 所有webdriver代码中可能发生的异常
常见异常类型:
NoSuchElementException:没有找到元素
NoSuchFrameException:没有找到iframe
NoSuchWindowException: 没找到窗口句柄handle
NoSuchAttributeException: 属性错误
NoAlertPresentException:没找到alert弹出框
lementNotVisibleException:元素不可见
ElementNotSelectableException:元素没有被选中
TimeoutException:查找元素超时
…………
异常的基类,其他异常类均继承该类。
"""
Exceptions that may happen in all the webdriver code.
"""
class WebDriverException(Exception):
"""
Base webdriver exception.
webdriver 所有异常的基类
"""
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: # 屏幕截图scree不为None,说明有screen相关的异常信息
exception_msg += "Screenshot: available via screen\n" # 异常信息加上屏幕截图异常信息提示
if self.stacktrace is not None: # 堆栈stacktrace不为None,说明stacktrace有相关的异常信息
stacktrace = "\n".join(self.stacktrace) # 把WebDriverException类的异常信息赋值给变量stacktrace
exception_msg += "Stacktrace:\n%s" % stacktrace # 拼接异常信息
return exception_msg # 返回异常信息
其他异常类。
class InvalidSwitchToTargetException(WebDriverException):
"""
Thrown when frame or window target to be switched doesn't exist.
"""
pass
至于为什么其他异常类的具体实现为什么都是pass,那可能就需要好好品味一下继承这个东西了