摘要:目前已經(jīng)成為了非常流行的的庫(kù),被廣泛用于爬蟲(chóng)或測(cè)試。然而,的幾乎所有的都是異步的,它返回的是一個(gè)。而提供了一系列的,使得測(cè)試變得簡(jiǎn)單方便,測(cè)試同樣沒(méi)有問(wèn)題。更多的可以參考的文檔鏈接在下方。
目前 puppeteer 已經(jīng)成為了非常流行的 Node.js 的庫(kù),被廣泛用于爬蟲(chóng)或 UI 測(cè)試。
我也很歡喜 puppeteer 這個(gè)庫(kù)。然而,puppeteer 的幾乎所有的 API 都是異步的,它返回的是一個(gè) Promise。
這就導(dǎo)致整個(gè)代碼有點(diǎn)啰嗦,下面是官方的例子:
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() })()
如您所見(jiàn),一堆的 await 關(guān)鍵字使得代碼不太優(yōu)雅。為了要使用 async/await,您必須將代碼放入一個(gè)立即執(zhí)行函數(shù)(IIFE)里。
為此,我受到了 Laravel Dusk 的啟發(fā),寫(xiě)了 Rize 這個(gè)庫(kù)。
上面的例子如果用 Rize 重寫(xiě),將會(huì)是這個(gè)樣子:
const Rize = require("rize") const rize = new Rize() rize .goto("http://example.com") .saveScreenshot("example.png") .end()
代碼簡(jiǎn)單得多了。另外,鏈?zhǔn)降?API 調(diào)用也是代碼變得優(yōu)雅。
除了提供基本的操作(如頁(yè)面導(dǎo)航、對(duì) DOM 操作、與表單進(jìn)行交互),Rize 這個(gè)庫(kù)還提供了一些斷言方法。
為什么呢?因?yàn)槲覀兘?jīng)常利用 puppeteer 來(lái)進(jìn)行 UI 測(cè)試。而 Rize 提供了一系列的 assertions,使得 UI 測(cè)試變得簡(jiǎn)單、方便,E2E 測(cè)試同樣沒(méi)有問(wèn)題。
例如,您可以斷言當(dāng)前頁(yè)面的 URL:
const rize = new Rize() rize.assertUrlIs("http://example.com")
又或者斷言指定的文本是否存在于頁(yè)面上:
const rize = new Rize() rize.assertSee("Some text")
還可以為 DOM 斷言:
const rize = new Rize() rize.assertClassHas("div", "my-class")
上面這個(gè)函數(shù)可以斷言指定的元素上是否存在指定的類名。更多的 API 可以參考 Rize 的文檔(鏈接在下方)。
Rize 庫(kù)的 GitHub 倉(cāng)庫(kù):https://github.com/g-plane/rize (歡迎 star)
Rize 庫(kù)的文檔教程:https://rize.js.org/
Rize 庫(kù)所有的 API 參考:https://rize.js.org/api/classes/_index_.rize.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/8800.html
摘要:目前已經(jīng)成為了非常流行的的庫(kù),被廣泛用于爬蟲(chóng)或測(cè)試。然而,的幾乎所有的都是異步的,它返回的是一個(gè)。而提供了一系列的,使得測(cè)試變得簡(jiǎn)單方便,測(cè)試同樣沒(méi)有問(wèn)題。更多的可以參考的文檔鏈接在下方。 目前 puppeteer 已經(jīng)成為了非常流行的 Node.js 的庫(kù),被廣泛用于爬蟲(chóng)或 UI 測(cè)試。 我也很歡喜 puppeteer 這個(gè)庫(kù)。然而,puppeteer 的幾乎所有的 API 都是異步...
摘要:約定我們假定要被測(cè)試的頁(yè)面是這樣的標(biāo)題開(kāi)始編寫(xiě)測(cè)試首先是導(dǎo)入。我們推薦使用的語(yǔ)法當(dāng)然您也可以用方式第一件事是構(gòu)造一個(gè)實(shí)例然后要轉(zhuǎn)到要被測(cè)試的頁(yè)面。 之前我曾經(jīng)在《Rize - 一個(gè)可以讓你簡(jiǎn)單、優(yōu)雅地使用 puppeteer 的 Node.js 庫(kù)》一文簡(jiǎn)單介紹過(guò) Rize 這個(gè)庫(kù)。當(dāng)時(shí)僅僅是介紹這個(gè)庫(kù)本身,關(guān)于如何使用,我沒(méi)有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來(lái)做 U...
摘要:約定我們假定要被測(cè)試的頁(yè)面是這樣的標(biāo)題開(kāi)始編寫(xiě)測(cè)試首先是導(dǎo)入。我們推薦使用的語(yǔ)法當(dāng)然您也可以用方式第一件事是構(gòu)造一個(gè)實(shí)例然后要轉(zhuǎn)到要被測(cè)試的頁(yè)面。 之前我曾經(jīng)在《Rize - 一個(gè)可以讓你簡(jiǎn)單、優(yōu)雅地使用 puppeteer 的 Node.js 庫(kù)》一文簡(jiǎn)單介紹過(guò) Rize 這個(gè)庫(kù)。當(dāng)時(shí)僅僅是介紹這個(gè)庫(kù)本身,關(guān)于如何使用,我沒(méi)有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來(lái)做 U...
摘要:約定我們假定要被測(cè)試的頁(yè)面是這樣的標(biāo)題開(kāi)始編寫(xiě)測(cè)試首先是導(dǎo)入。我們推薦使用的語(yǔ)法當(dāng)然您也可以用方式第一件事是構(gòu)造一個(gè)實(shí)例然后要轉(zhuǎn)到要被測(cè)試的頁(yè)面。 之前我曾經(jīng)在《Rize - 一個(gè)可以讓你簡(jiǎn)單、優(yōu)雅地使用 puppeteer 的 Node.js 庫(kù)》一文簡(jiǎn)單介紹過(guò) Rize 這個(gè)庫(kù)。當(dāng)時(shí)僅僅是介紹這個(gè)庫(kù)本身,關(guān)于如何使用,我沒(méi)有給太多的指導(dǎo)。 這篇文章講的是如何使用 Rize 來(lái)做 U...
摘要:現(xiàn)狀最近在寫(xiě)歡迎的時(shí)候,一直為錯(cuò)誤的棧追蹤而愁。由于送入隊(duì)列的是函數(shù),因此在的參數(shù)可以放心地使用。其次,這些函數(shù)并不是立即在中調(diào)用的,而是由專門的隊(duì)列處理代碼來(lái)調(diào)用。 本文的講述都是以 Node.js 環(huán)境為例子,而 Node.js 使用的 JavaScript 引擎是 V8,因此理論上 Chrome 也能適用,其它瀏覽器我就不清楚了。 現(xiàn)狀 最近在寫(xiě) Rize(歡迎 star) 的時(shí)...
閱讀 3413·2021-11-18 10:02
閱讀 3549·2021-10-11 10:58
閱讀 3470·2021-09-24 09:47
閱讀 1296·2021-09-22 15:21
閱讀 4285·2021-09-10 11:10
閱讀 3358·2021-09-03 10:28
閱讀 1868·2019-08-30 15:45
閱讀 2329·2019-08-30 14:22