Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库
目前 puppeteer 已经成为了非常流行的 Node.js 的库,被广泛用于爬虫或 UI 测试。
我也很欢喜 puppeteer 这个库。然而,puppeteer 的几乎所有的 API 都是异步的,它返回的是一个 Promise
。
这就导致整个代码有点啰嗦,下面是官方的例子:
const puppeteer = require('puppeteer')void (async () => {const browser = await puppeteer.launch()const page = await browser.newPage()await page.goto('http://example.com')await page.screenshot({ path: 'example.png' })await browser.close()
})()
复制代码
如您所见,一堆的 await
关键字使得代码不太优雅。为了要使用 async/await
,您必须将代码放入一个立即执行函数(IIFE)里。
为此,我受到了 Laravel Dusk 的启发,写了 Rize
这个库。
上面的例子如果用 Rize 重写,将会是这个样子:
const Rize = require('rize')const rize = new Rize()
rize.goto('http://example.com').saveScreenshot('example.png').end()
复制代码
代码简单得多了。另外,链式的 API 调用也是代码变得优雅。
除了提供基本的操作(如页面导航、对 DOM 操作、与表单进行交互),Rize 这个库还提供了一些断言方法。
为什么呢?因为我们经常利用 puppeteer 来进行 UI 测试。而 Rize 提供了一系列的 assertions,使得 UI 测试变得简单、方便,E2E 测试同样没有问题。
例如,您可以断言当前页面的 URL:
const rize = new Rize()
rize.assertUrlIs('http://example.com')
复制代码
又或者断言指定的文本是否存在于页面上:
const rize = new Rize()
rize.assertSee('Some text')
复制代码
还可以为 DOM 断言:
const rize = new Rize()
rize.assertClassHas('div', 'my-class')
复制代码
上面这个函数可以断言指定的元素上是否存在指定的类名。更多的 API 可以参考 Rize 的文档(链接在下方)。
Rize 库的 GitHub 仓库:github.com/g-plane/riz… (欢迎 star)
Rize 库的文档教程:rize.js.org/
Rize 库所有的 API 参考:https://rize.js.org/api/classes/index.rize.html
Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库相关推荐
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
- kafka mysql秒杀框架_一次模拟简单秒杀场景的实践 Docker Node.js Kafka Redis MySQL...
秒杀活动可以说在互联网上随处可见,从12306抢票,到聚划算抢购,我们生活的方方面面都可以看到秒杀的身影.秒杀的架构设计也是对于一个架构师架构设计能力的一次考验.本文的目的并不在于提供一个可以直接落地 ...
- [译]简单得不得了的教程-一步一步用 NODE.JS, EXPRESS, JADE, MONGODB 搭建一个网站
原文: http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/ 原文的源代码在此 太多的教程教你些一个Hello, World!了, ...
- node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试
WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Come ...
- NodeJS环境搭建以及运行Node.js项目、饿了么ui(elementui)开发模式简单介绍
一.Node.js是什么? 1.1 Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]. Node.js使用了一个事件驱动.非阻塞式I/O 的模型. 1.2 Node.j ...
- 怎样查看目标网站mysql地址_如何简单获取目标网站的数据库(暴库教程)
SQL注入流行很久了,我们找漏洞注入目的无非是想得到数据库内的东西,比如用户名密码等.(当然mssql数据库还可以借此获得权限).如果我们不用注入就可以得到整个数据库,不是更好吗?于是暴库成了一个比注 ...
- Node.js(黑马)笔记01--day1--最简单的node执行脚本,readFile,创建服务器,核心模块,IP地址和端口号,编码格式g、get,post,路由,静态资源
0.webstom2020解决node代码不自动提示及显示警告的bug 完美解决Webstorm不支持nodejs等语法提示和补全 https://blog.csdn.net/Dobility/art ...
- NodeQuant:一个基于Node.js的开源量化交易平台
NodeQuant:一个基于Node.js的开源量化交易平台 NodeQuant的愿景 让Node.js社区轻巧地开发和部署量化金融交易程序,成为一个简单.高效.可依赖的量化交易平台:NodeQuan ...
- 带你开发一个完整的 node.js 项目
「他们根本不知道,现在的电商大促有多么依赖 Node.js」任职阿里的架构师朋友这么说. 说真的,我倒并不意外.作为一个定位明确的高性能 Web 服务器,Node.js 非常火热,几乎霸占了前端生态. ...
- Node.js 被分叉出一个项目 — Ayo.js,肿么了
(注:ayo.js叉从Node.js.目前,大量的文档仍然指向Node.js库.) ayo.js是一个JavaScript运行时建立在Chrome的V8 JavaScript引擎.ayo.js使用事件 ...
最新文章
- 计算机基础知识作业答案,计算机基础与应用作业答案ID及计算机基础知识笔试题.doc...
- 将EditText的光标定位到字符的最后面
- 红外探头_问题3: 关于在线近红外光谱仪的探头
- 黑马程序员 C语言:循环语句
- 面向对象编程起步——神来之笔
- python源码 高通滤波、低通滤波、带通滤波
- Qt学习之路_008-最全的Qt学习总结(前期)
- 推荐好轮子【Echarts数据可视化】图表插件 兼容ie6、7、8
- 【数值计算】计算机中的数值计算
- 基于selenium的大麦网自动抢票脚本实测(新年第一篇)
- python小海龟画房子编程_这个python海龟绘图为什么出错?
- URLLC关键技术和网络适应性分析
- 【转】调优方法——warmup
- (js)switch
- LaTeX soul包
- 中国智能行车记录仪行业发展现状及趋势分析,DMS将替代DVR
- 「多语言图像描述」最强评估基准XM3600来了!涵盖36种语言
- 深入AMCL(四):相机如何辅助AMCL自动全局定位
- Oracle面试题集锦(2020大厂秋招真题)
- 李宏毅《机器学习》国语课程(2022)来了