我的编程空间,编程开发者的网络收藏夹
学习永远不晚

推荐一款新的自动化测试框架:DrissionPage

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

推荐一款新的自动化测试框架:DrissionPage

今天给大家推荐一款基于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_pathsset_paths(browser_path=r'这里修改为您的Chrome浏览器exe文件路径')

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

四、实战一下

尝试启动浏览器:

from DrissionPage import ChromiumPagepage = 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 etreeheaders = {'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 WebPagefrom 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%免费】
在这里插入图片描述

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

来源地址:https://blog.csdn.net/m0_67695717/article/details/129284355

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

推荐一款新的自动化测试框架:DrissionPage

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pytest自动化测试框架的使用

本文主要介绍了Pytest自动化测试框架的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-19

FAutoTest一个 H5、小程序自动化测试框架

简介随着产品业务形态逐渐从 App 延升到微信小程序、微信公众号以及 QQ公众号等,而之前的自动化建设主要是 Native App 为主,全手工测试已无法满足快速增长的业务需求。为提升测试效率和质量,FAutoTest 框架致力于解决 QQ
2023-06-05

基于Selenium+Python的web自动化测试框架

一、什么是Selenium?Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Se
2023-06-04

Python + selenium 自动化测试框架是怎样的

今天就跟大家聊聊有关Python + selenium 自动化测试框架是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。自动化测试框架项目自动化测试框架设计为4层1.基础层(通用
2023-06-22

Linux Docker容器化应用的自动化测试框架

构建一个基于Linux Docker容器化应用的自动化测试框架涉及多个步骤,包括环境准备、容器编排、测试脚本编写、执行测试和结果分析等。以下是一个基本的框架设计:1. 环境准备Dockerfile:编写Dockerfile以定义应用及其依
Linux Docker容器化应用的自动化测试框架
2024-10-07

解锁 ASP 测试框架的宝藏:自动化测试的财富

ASP 测试框架:自动化测试的秘宝
解锁 ASP 测试框架的宝藏:自动化测试的财富
2024-03-03

常用的golang自动化测试框架有哪些

常用的Golang自动化测试框架有:1. testing:Golang自带的测试框架,可以进行单元测试和性能测试。2. testify:一个功能强大的测试工具包,提供了丰富的断言和mock对象的功能,可以用于编写单元测试和集成测试。3. g
2023-08-08

ASP 测试框架的艺术:用自动化演奏测试的交响乐

利用自动化谱写测试交响乐:ASP 测试框架的艺术
ASP 测试框架的艺术:用自动化演奏测试的交响乐
2024-03-03

自动化测试框架pytest的Fixture固件怎么调用

本篇内容介绍了“自动化测试框架pytest的Fixture固件怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是固件Fixture
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录