首页IT科技自动化测试框架搭建思路(推荐一款新的自动化测试框架:DrissionPage)

自动化测试框架搭建思路(推荐一款新的自动化测试框架:DrissionPage)

时间2025-08-03 01:30:57分类IT科技浏览6209
导读:今天给大家推荐一款基于Python的网页自动化工具:DrissionPage。这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和 requests 的高效率优点。...

今天给大家推荐一款基于Python的网页自动化工具:DrissionPage                。这款工具既能控制浏览器                ,也能收发数据包                        ,甚至能把两者合而为一        ,简单来说:集合了WEB浏览器自动化的便利性和 requests 的高效率优点                        。

一                、DrissionPage框架产生背景

对网页实现自动化                ,通常会有两类形式:

直接向服务器发送请求数据包                        ,获取需要的数据        ,模拟数据流向操作        。 控制浏览器跟网页进行交互        ,模拟用户界面操作                。

前者轻量级                        ,速度快                ,例如requests 库                        。但requests面对需要登录的网站时        ,往往还要应付验证码                        、JS 混淆        、签名参数等反爬手段                        ,门槛较高        。若数据是由 JS 计算生成的                ,还须重现计算过程,开发效率不高        。

而后者直接使用浏览器                        ,模拟用户行为                        ,如Selenium库,可以很大程度上绕过这些坑                ,但浏览器运行效率不高                        。

因此                        ,DrissionPag设计初衷        ,是将它们合而为一                ,能够在不同须要时切换相应模式                        ,并提供一种人性化的使用方法        ,提高开发和运行效率                。

为什么叫DrissionPag

Selenium框架用于操作浏览器的对象叫 Driver        ,requests 用于管理请求连接的对象叫 Session                        ,因此Drission 就是它们两者的合体        。在旧版本中                ,是通过对 selenium 和 requests 的重新封装实现的                        。

但从 3.0 版开始        ,作者另起炉灶                        ,用 chromium 协议自行实现了 selenium 全部功能                ,从而摆脱了对 selenium 的依赖,功能更多更强                        ,运行效率更高                        ,开发更灵活                。

二                、DrissionPage框架亮点特色

本库采用全自研的内核,对比 selenium                ,有以下优点:

无 webdriver 特征                        ,不会被网站识别        ,无需为不同版本的浏览器下载不同的驱动 。 运行速度更快                ,可以跨 iframe 查找元素                        ,无需切入切出        ,iframe 看作普通元素        ,获取后可直接在其中查找元素                        ,逻辑更清晰                        。 可以同时操作浏览器中的多个标签页                ,即使标签页为非激活状态        ,无需切换                        。 内置等待和自动重试功能。使不稳定的网络变得易于控制                        ,程序更稳定                ,编写更省心                。 允许反复使用已经打开的浏览器                        。无须每次运行从头启动浏览器,调试超方便        。 极简的语法规则                。集成大量常用功能                        ,定位元素更加容易                        ,功能更强大稳定                        。 使用 POM 模式封装,可直接用于测试                ,便于扩展        。 等等        。                        。                。

三                        、安装搭建

说了这么多                        ,相信很多人已经跃跃欲试了        ,怎么快速搭建这套框架                ,先要准备一些基础环境        。

环境准备

操作系统:Windows        、Linux 或 Mac                        。 Python 版本:3.6 及以上 支持浏览器:Chromium 内核(如 Chrome 和 Edge)

项目地址:

https://gitee.com/g1879/DrissionPage

使用 pip 安装 DrissionPage:

pip install DrissionPage

另外在开始之前                        ,我们先进行一些简单设置                。如果只使用收发数据包功能        ,无须任何准备工作。

如果要控制浏览器        ,须设置浏览器路径                        。程序默认设置控制 Chrome                        ,所以以下用 Chrome 作为演示                        。如果要使用 Edge 或其它 Chromium 内核浏览器                ,设置方法是一样的。

设置浏览器路径:

from DrissionPage.easy_set import set_paths set_paths(browser_path=r这里修改为您的Chrome浏览器exe文件路径)

这段代码会记录 Chrome 浏览器路径到配置文件                。由于路径设置只要运行一次即可        ,不要写到正式程序里                        。一般建议新建一个临时 py 文件                        ,并输入以下代码                ,填入您电脑里的 Chrome 浏览器 exe 文件路径,然后执行        。

四        、实战一下

1                        、尝试启动浏览器:

from DrissionPage import ChromiumPage page = ChromiumPage() page.get(https://www.baidu.com)

执行以下代码                        ,如果正常启动了浏览器并且访问了百度                        ,说明可直接使用,跳过后面的步骤即可                。

执行代码前                ,如果已有打开的 Chrome 浏览器                        ,请关闭                        。

2                、与selenium框架代码对比

#案例一:用显性等待方式查找第一个文本包含 some text 的元素        。 # 使用 selenium: element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, //*[contains(text(), "some text")]))) # 使用 DrissionPage: element = page(some text) #案例二:跳转到第一个标签页 # 使用 selenium: driver.switch_to.window(driver.window_handles[0]) # 使用 DrissionPage: page.to_tab(0) # 案例三:拖拽一个元素 # 使用 selenium: ActionChains(driver).drag_and_drop(ele1, ele2).perform() # 使用 DrissionPage: ele1.drag_to(ele2)

以上代码实现一模一样的功能        ,但DrissionPage代码明显更简洁优雅        。

3        、与requests框架代码对比

# 案例一:获取元素内容 url = https://baike.baidu.com/item/python # 使用 requests: from lxml import etree headers = {User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36} response = requests.get(url, headers = headers) html = etree.HTML(response.text) element = html.xpath(//h1)[0] title = element.text # 使用 DrissionPage: page = WebPage(s) page.get(url) title = page(tag:h1).text

4                        、DrissionPage不同模式切换

例如:用浏览器登录网站                ,然后切换到 requests 读取网页                        。两者会共享登录信息                。

from DrissionPage import WebPage from time import sleep # 创建页面对象                        ,默认 d 模式 page = WebPage() # 访问个人中心页面(未登录        ,重定向到登录页面) page.get(https://gitee.com/profile) # 使用 selenium 输入账号密码登录 page.ele(@id:user_login).input(your_user_name) page.ele(@id:user_password).input(your_password\n) sleep(1) # 切换到 s 模式 page.change_mode() # 登录后 session 模式的输出 print(登录后title:, page.title, \n)

五                、小结

DrissionPage体验一番后        ,虽然还是存在一些不足的地方                        ,但整得来讲                ,很多设计理念还是非常值得借鉴的        ,更多功能就留给大家去探索了                        ,项目文档地址:

http://g1879.gitee.io/drissionpagedocs/

如果您觉得本篇文章对自己或身边同事朋友有帮助启发                ,欢迎您点击下方【点赞】或【转发】,喜欢本篇文章的读者请点击【关注】                        ,公号主页更多干货好文等您悦读        。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成                        ,朋友们如果需要可以自行免费领取 【保证100%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库                ,这个仓库也陪伴上万个测试工程师们走过最艰难的路程                        ,希望也能帮助到你!

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
dll动态链接库是什么(ldconfig命令 – 动态链接库管理命令) caxa电子图板教学视频(win7下CAXA电子图版经常崩溃停止工作怎么办?)