资讯专栏INFORMATION COLUMN

Rize - 一个可以让你简单、优雅的使用 puppeteer 的 Node.js 库

AZmake / 3576人阅读

摘要:目前已经成为了非常流行的的库,被广泛用于爬虫或测试。然而,的几乎所有的都是异步的,它返回的是一个。而提供了一系列的,使得测试变得简单方便,测试同样没有问题。更多的可以参考的文档链接在下方。

目前 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 仓库:https://github.com/g-plane/rize (欢迎 star)

Rize 库的文档教程:https://rize.js.org/

Rize 库所有的 API 参考:https://rize.js.org/api/classes/_index_.rize.html

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8800.html

相关文章

  • Rize - 一个可以让你简单优雅使用 puppeteer Node.js

    摘要:目前已经成为了非常流行的的库,被广泛用于爬虫或测试。然而,的几乎所有的都是异步的,它返回的是一个。而提供了一系列的,使得测试变得简单方便,测试同样没有问题。更多的可以参考的文档链接在下方。 目前 puppeteer 已经成为了非常流行的 Node.js 的库,被广泛用于爬虫或 UI 测试。 我也很欢喜 puppeteer 这个库。然而,puppeteer 的几乎所有的 API 都是异步...

    JeOam 评论0 收藏0
  • 利用 Rize 来进行 UI 测试或 E2E 测试

    摘要:约定我们假定要被测试的页面是这样的标题开始编写测试首先是导入。我们推荐使用的语法当然您也可以用方式第一件事是构造一个实例然后要转到要被测试的页面。 之前我曾经在《Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库》一文简单介绍过 Rize 这个库。当时仅仅是介绍这个库本身,关于如何使用,我没有给太多的指导。 这篇文章讲的是如何使用 Rize 来做 U...

    Coding01 评论0 收藏0
  • 利用 Rize 来进行 UI 测试或 E2E 测试

    摘要:约定我们假定要被测试的页面是这样的标题开始编写测试首先是导入。我们推荐使用的语法当然您也可以用方式第一件事是构造一个实例然后要转到要被测试的页面。 之前我曾经在《Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库》一文简单介绍过 Rize 这个库。当时仅仅是介绍这个库本身,关于如何使用,我没有给太多的指导。 这篇文章讲的是如何使用 Rize 来做 U...

    yimo 评论0 收藏0
  • 利用 Rize 来进行 UI 测试或 E2E 测试

    摘要:约定我们假定要被测试的页面是这样的标题开始编写测试首先是导入。我们推荐使用的语法当然您也可以用方式第一件事是构造一个实例然后要转到要被测试的页面。 之前我曾经在《Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库》一文简单介绍过 Rize 这个库。当时仅仅是介绍这个库本身,关于如何使用,我没有给太多的指导。 这篇文章讲的是如何使用 Rize 来做 U...

    Lin_R 评论0 收藏0
  • V8 Error 对象与栈追踪妙用

    摘要:现状最近在写欢迎的时候,一直为错误的栈追踪而愁。由于送入队列的是函数,因此在的参数可以放心地使用。其次,这些函数并不是立即在中调用的,而是由专门的队列处理代码来调用。 本文的讲述都是以 Node.js 环境为例子,而 Node.js 使用的 JavaScript 引擎是 V8,因此理论上 Chrome 也能适用,其它浏览器我就不清楚了。 现状 最近在写 Rize(欢迎 star) 的时...

    Luosunce 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<