DrissionPage模块
DrissionPage是一个强大的自动化测试框架,它提供了丰富的特性和功能,包括但不限于强大的内核、亮点功能、安装与升级、导包与简单示例、查找元素等。12
特性:
强大的内核:DrissionPage拥有一个强大的内核,支持多种浏览器和操作系统的自动化测试。
亮点功能:包括但不限于页面中查找元素、链式查找、相对查找、shadow root等。
安装与升级:DrissionPage提供了详细的安装和升级指南,确保用户能够轻松地安装和更新这个框架。
导包与简单示例:DrissionPage的导包和简单示例部分,提供了如何导入和使用DrissionPage的示例代码,帮助用户快速上手。
查找元素:
概述:DrissionPage提供了多种查找元素的方法,包括在页面中查找、在元素中查找、链式查找、相对查找等。
基本用法:包括查找元素的方法(ele()、eles()),匹配模式(精确匹配、模糊匹配等),查找语法(id匹配符、class匹配符等),以及相对定位(获取父级元素、获取直接子节点等)。
更多用法:包括静态方式查找元素等,提供了丰富的功能和灵活性,满足不同场景下的需求。
通过上述内容,可以看出DrissionPage是一个功能强大且易于使用的自动化测试框架,它不仅提供了丰富的特性和功能,还提供了详细的教程和示例,帮助用户快速掌握并使用这个框架进行自动化测试和网页爬取等任务
- DrissionPage目录
DrissionPage目录结构
DrissionPage目录下有四个文件:__init__.py,common.py, errors.py, items.py, setup.py。
1.1 __init__.py
__init__.py文件中导入定义了三个浏览器类,分别为:
- ChromiumPage类:创建d模式驱动的类,来源于_pages目录下的chromium_page.py
- SessionPage类:创建s模式驱动的类,来源于_pages目录下的session_page.py
- WebPage类:创建同时具备d和s模式驱动的类,来源于_pages目录下的web_page.py
对这三类的解析,其实也就是对_pages目录下chromium_page.py,session_page.py,web_page.py和chromiumbase.py的解析。
__init__.py文件中也导入定义了二个启动配置类,分别如下:
- ChromiumOptions类:来源于_configs目录下的chromium_options.py
- SessionOption类:来源于_configs目录下的session_options.py
属性、类、函数 | 值 | 说明 |
ChromiumPage | from ._pages.chromium_page import ChromiumPage | |
ChromiumOptions | from ._configs.chromium_options import ChromiumOptions | |
SessionPage | from ._pages.session_page import SessionPage | |
SessionOptions | from ._configs.session_options import SessionOptions | |
WebPage | from ._pages.web_page import WebPage | |
__version__ | ‘4.0.4.22’ | DrissionPage库的版本号 |
WebPage类由_pages目录下的web_page.py中导入,其是ChromiumPage类、SessionPage类和BasePage的子类。
ChromiumPage类,由selenium的__init__.py文件导入,但源于_pages目录下的chromium_page.py,其继承于ChromiumBase类,是ChromiumBase类的子类,其用于管理浏览器的类,使用requests模块来获取和解析url页面。
SessionPage类,由selenium的__init__.py文件导入,但源于_pages目录下的session_page.py,其继承于BasePage类,是BasePage类的子类,其封装了页面操作的常用功能,使用requests模块来获取和解析url页面。
1.2 common.py
Command.py主要考虑从其它具有类似功能的库的转换。
common.py文件定义了二个函数,如下:
函数(方法) | 功能 |
from_selenium(driver) | 从selenium的WebDriver对象生成ChromiumPage对象 |
from_playwright(page_or_browser) | 从playwright的Page或Browser对象生成ChromiumPage对象 |
1.3 error.py
errors.py定义了18个错误类:
序号 | 类名 | 功能 |
1 | BaseError(Exception) | 实例化时,可传入ErrorInfo,默认为ErrorInfo=None。 |
2 | ElementNotFoundError(BaseError) | 实例化时,参数可为ErrorInfo=None, method=None, arguments=None,默认为:没有找到元素。 |
3 | AlertExistsError(BaseError) | 存在未处理的提示框。 |
4 | ContextLostError(BaseError) | 页面被刷新,请操作前尝试等待页面刷新或加载完成。 |
5 | ElementLostError(BaseError) | 元素对象已失效。可能是页面整体刷新,或js局部刷新把元素替换或去除了。 |
6 | CDPError(BaseError) | 方法调用错误。 |
7 | PageDisconnectedError(BaseError) | 与页面的连接已断开。 |
8 | JavaScriptError(BaseError) | JavaScript运行错误。 |
9 | NoRectError(BaseError) | 该元素没有位置及大小。 |
10 | BrowserConnectError(BaseError) | 浏览器连接失败。 |
11 | NoResourceError(BaseError) | 该元素无可保存的内容或保存失败。 |
12 | CanNotClickError(BaseError) | 该元素无法滚动到视口或被遮挡,无法点击。 |
13 | GetDocumentError(BaseError) | 获取文档失败。 |
14 | WaitTimeoutError(BaseError) | 等待失败。 |
15 | WrongURLError(BaseError) | 无效的url。 |
16 | StorageError(BaseError) | 无法操作当前存储数据。 |
17 | CookieFormatError(BaseError) | cookie格式不正确。 |
18 | TargetNotFoundError(BaseError) | 找不到指定页面。 |
1.4 item.py
items.py定义了元素类
主要有:ChromiumElement, ShadowRoot, NoneElement, SessionElement, ChromiumFrame, ChromiumTab,WebPageTab。其主要是从其他文件中导入定义,如:
from ._elements.chromium_element import ChromiumElement, ShadowRoot
from ._elements.none_element import NoneElement
from ._elements.session_element import SessionElement
from ._pages.chromium_frame import ChromiumFrame
from ._pages.chromium_tab import ChromiumTab, WebPageTab
序号 | 类名 | 功能 | 来源 |
1 | ChromiumElement | d模式的元素对象 | ._elements.chromium_element |
2 | ShadowRoot | ._elements.chromium_element | |
3 | NoneElement | ._elements.none_element | |
4 | SessionElement | s模式的元素对象 | ._elements.session_element |
5 | ChromiumFrame | ._pages.chromium_frame | |
6 | ChromiumTab | 浏览器的url页面,即标签对象 | ._pages.chromium_tab |
7 | WebPageTab | 浏览器的url页面,即标签对象 | ._pages.chromium_tab |
具体的信息在下文再详细介绍。
1.5 setup.py
Setup.py文件暂时还未写,故就不解析了。