自学Python第十八天-自动化测试框架(二):DrissionPage、appium
DrissionPage
由于 selenium 的缺点过多,pyppeteer 使用较为复杂,也可以使用 DrissionPage 库来进行自动化测试。
DrissionPage 的优点有:
- 极简的语法规则,定位元素更加容易
- 无处不在的等待和自动重试功能,使得容错能力大大增加
- 允许反复使用已经打开的浏览器,方便调试
- 把 iframe 看作普通元素,无需切入切出,可以直接查找内容
- 良好的异步支持
环境和安装配置
DrissionPage需要的环境为:
- 操作系统:Windows、Linux 或 Mac。
- python 版本:3.6 及以上
- 支持浏览器:Chromium 内核(如 Chrome 和 Edge)
使用 pip 安装 DrissionPage:
pip install DrissionPage
DrissionPage 包含三种主要页面类。根据需要在其中选择使用。
- 如果只要控制浏览器,导入
ChromiumPage
。from DrissionPage import ChromiumPage
- 如果只要收发数据包,导入
SessionPage
。from DrissionPage import SessionPage
WebPage
是功能最全面的页面类,既可控制浏览器,也可收发数据包。from DrissionPage import WebPage
另外 DrissionPage 还有一些配置工具类
类名 | 描述 | 引入方式 |
---|---|---|
ChromiumOptions |
用于设置浏览器启动参数。这些参数只有在启动浏览器时有用,接管已存在的浏览器时是不生效的。 | from DrissionPage import ChromiumOptions |
SessionOptions |
用于配置SessionPage或WebPages 模式的连接参数。 | from DrissionPage import SessionOptions |
Settings |
用于设置全局运行配置,如找不到元素时是否抛出异常等。 | from DrissionPage.common import Settings |
Keys |
键盘按键类,用于键入 ctrl、alt 等按键。 | from DrissionPage.common import Keys |
Actions |
动作链,用于执行一系列动作。在浏览器页面对象中已有内置,无如特殊需要无需主动导入。 | from DrissionPage.common import Actions |
By |
与 selenium 一致的By类,便于项目迁移。 | from DrissionPage.common import By |
wait_until |
可等待传入的方法结果为真 | from DrissionPage.common import wait_until |
make_session_ele |
从 html 文本生成ChromiumElement 对象 |
from DrissionPage.common import make_session_ele |
configs_to_here |
把配置文件复制到当前路径 | from DrissionPage.common import configs_to_here |
get_blob |
获取指定的 blob 资源 | from DrissionPage.common import get_blob |
ElementNotFoundError |
异常类,全部在路径DrissionPage.errors 里 |
from DrissionPage.errors import ElementNotFoundError |
另外 DrissionPage 还有一些衍生对象,例如 Tab
、Element
等对象是由 Page
对象生成的,开发过程中需要类型判断时需要导入这些类型。
from DrissionPage.items import SessionElement
from DrissionPage.items import ChromiumElement
from DrissionPage.items import ShadowRoot
from DrissionPage.items import NoneElement
from DrissionPage.items import ChromiumTab
from DrissionPage.items import WebPageTab
from DrissionPage.items import ChromiumFrame
准备工作
如果只使用收发数据包功能,无需任何准备工作。
如果要控制浏览器,需设置浏览器路径。程序默认设置控制 Chrome,所以下面用 Chrome 演示。如果要使用 Edge 或其它 Chromium 内核浏览器,设置方法是一样的。
- 尝试启动浏览器
默认状态下,程序会自动在系统内查找 Chrome 路径。执行以下代码,浏览器启动并且访问了项目文档,说明可直接使用,跳过后面的步骤即可。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('http://g1879.gitee.io/DrissionPageDocs')
- 设置路径
如果上面的步骤提示出错,说明程序没在系统里找到 Chrome 浏览器。可用以下其中一种方法设置,设置会持久化记录到默认配置文件,之后程序会使用该设置启动。
设置方法有2种:
方法一:新建一个临时 py 文件,并输入以下代码,填入您电脑里的 Chrome 浏览器可执行文件路径,然后运行。
from DrissionPage import ChromiumOptions
path = r'D:\Chrome\Chrome.exe' # 请改为你电脑内Chrome可执行文件路径
ChromiumOptions().set_browser_path(path).save()
这段代码会把浏览器路径记录到配置文件,今后启动浏览器皆以新路径为准。另外,如果是想临时切换浏览器路径以尝试运行和操作是否正常,可以去掉 .save(),以如下方式结合第1️⃣步的代码。
from DrissionPage import ChromiumPage, ChromiumOptions
path = r'D:\Chrome\Chrome.exe' # 请改为你电脑内Chrome可执行文件路径
co = ChromiumOptions().set_browser_path(path)
page = ChromiumPage(co)
page.get('http://g1879.gitee.io/DrissionPageDocs')
方法二:在命令行输入以下命令(路径改成自己电脑里的):
dp -p D:\Chrome\chrome.exe
注意要先使用 cd 命令定位到项目路径
简单的使用示例
DrissionPage 的三个主要的类 ChromiumPage
、SessionPage
和 WebPage
分别用于主要的三种模式:浏览器模式、数据包模式、混合模式。
控制浏览器
DrissionPage 可以类似于 selenium 一样直接控制浏览器。
from DrissionPage import ChromiumPage
# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
# 跳转到登录页面
page.get('https://gitee.com/login')
# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号
ele.input('您的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password'
文章评论