目前 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 库相关推荐

  1. GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...

    GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...

  2. kafka mysql秒杀框架_一次模拟简单秒杀场景的实践 Docker Node.js Kafka Redis MySQL...

    秒杀活动可以说在互联网上随处可见,从12306抢票,到聚划算抢购,我们生活的方方面面都可以看到秒杀的身影.秒杀的架构设计也是对于一个架构师架构设计能力的一次考验.本文的目的并不在于提供一个可以直接落地 ...

  3. [译]简单得不得了的教程-一步一步用 NODE.JS, EXPRESS, JADE, MONGODB 搭建一个网站

    原文: http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/ 原文的源代码在此 太多的教程教你些一个Hello, World!了, ...

  4. node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试

    WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Come ...

  5. NodeJS环境搭建以及运行Node.js项目、饿了么ui(elementui)开发模式简单介绍

    一.Node.js是什么? 1.1 Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]. Node.js使用了一个事件驱动.非阻塞式I/O 的模型. 1.2 Node.j ...

  6. 怎样查看目标网站mysql地址_如何简单获取目标网站的数据库(暴库教程)

    SQL注入流行很久了,我们找漏洞注入目的无非是想得到数据库内的东西,比如用户名密码等.(当然mssql数据库还可以借此获得权限).如果我们不用注入就可以得到整个数据库,不是更好吗?于是暴库成了一个比注 ...

  7. Node.js(黑马)笔记01--day1--最简单的node执行脚本,readFile,创建服务器,核心模块,IP地址和端口号,编码格式g、get,post,路由,静态资源

    0.webstom2020解决node代码不自动提示及显示警告的bug 完美解决Webstorm不支持nodejs等语法提示和补全 https://blog.csdn.net/Dobility/art ...

  8. NodeQuant:一个基于Node.js的开源量化交易平台

    NodeQuant:一个基于Node.js的开源量化交易平台 NodeQuant的愿景 让Node.js社区轻巧地开发和部署量化金融交易程序,成为一个简单.高效.可依赖的量化交易平台:NodeQuan ...

  9. 带你开发一个完整的 node.js 项目

    「他们根本不知道,现在的电商大促有多么依赖 Node.js」任职阿里的架构师朋友这么说. 说真的,我倒并不意外.作为一个定位明确的高性能 Web 服务器,Node.js 非常火热,几乎霸占了前端生态. ...

  10. Node.js 被分叉出一个项目 — Ayo.js,肿么了

    (注:ayo.js叉从Node.js.目前,大量的文档仍然指向Node.js库.) ayo.js是一个JavaScript运行时建立在Chrome的V8 JavaScript引擎.ayo.js使用事件 ...

最新文章

  1. 计算机基础知识作业答案,计算机基础与应用作业答案ID及计算机基础知识笔试题.doc...
  2. 将EditText的光标定位到字符的最后面
  3. 红外探头_问题3: 关于在线近红外光谱仪的探头
  4. 黑马程序员 C语言:循环语句
  5. 面向对象编程起步——神来之笔
  6. python源码 高通滤波、低通滤波、带通滤波
  7. Qt学习之路_008-最全的Qt学习总结(前期)
  8. 推荐好轮子【Echarts数据可视化】图表插件 兼容ie6、7、8
  9. 【数值计算】计算机中的数值计算
  10. 基于selenium的大麦网自动抢票脚本实测(新年第一篇)
  11. python小海龟画房子编程_这个python海龟绘图为什么出错?
  12. URLLC关键技术和网络适应性分析
  13. 【转】调优方法——warmup
  14. (js)switch
  15. LaTeX soul包
  16. 中国智能行车记录仪行业发展现状及趋势分析,DMS将替代DVR
  17. 「多语言图像描述」最强评估基准XM3600来了!涵盖36种语言
  18. 深入AMCL(四):相机如何辅助AMCL自动全局定位
  19. Oracle面试题集锦(2020大厂秋招真题)
  20. 李宏毅《机器学习》国语课程(2022)来了

热门文章

  1. 关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)...
  2. Python-Day2三级菜单
  3. UVA 624 CD (01背包 带路径)
  4. 再硬写一个最简单的HTTPSERVER
  5. 《授予博士、硕士学位和培养研究生的学科、专业目录》 (1997 颁布 )
  6. cmd批处理常用符号详解
  7. 逐帧动画 and 有限状态机(fsm)
  8. PhoneClean(iOS设备清理)下载安装,软件介绍
  9. 轻松使用EasyRecovery恢复丢失照片
  10. Monkey测试:日志信息分析