产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

如何成为 Puppeteer 大师

  • 2017-09-24
  • 本文字数:2031 字

    阅读完需:约 7 分钟

对程序进行测试有很多方法。从微型的单元测试开始,到更大型的用户界面测试 Puppeteer 绝对属于后一种。

Puppeteer 宣传自己是

一个 Node 库,它提供了一组高级 API,通过 DevTools 协议控制无界面 Chrome。

简而言之,基于 Chrome Devtools 协议,Puppeteer 可以让用户界面测试变得很轻松。而所有这一切都是免费的。

什么是 Puppeteer?

Puppeteer 是一个用户界面自动化工具。它通过使用 Chrome 无界面模式和 DevTools 协议的组合来实现这一点。正如上面的引用所言,它使用一个更上层的 API 来封装其功能,让用户界面测试自动化变得轻而易举。

人们基于 Chrome DevTools 协议开发了一系列 Google Chrome 工具。你在浏览器中点击更多工具 -> 开发工具,打开的就是 DevTools 。DevTools 协议是 DevTools 的动力基础,我们现在可以使用 Chrome 中的 DevTools 来做更多的事情。

无界面Chrome 是没有Chrome 的Chrome。是的,你没看错。它允许你从浏览器之外的环境(即命令行)与Chromium 进行交互。

将Chromium 和 Blink 渲染引擎带入命令行使得很多事情变得可行,比如自动化测试。

安装

安装很简单,可以通过 yarn npm 来完成。只需运行下面的命令:

复制代码
yarn add pupeeter
# or "npm i puppeteer"

之后可以像其它 nodejs 程序一样用 node 来运行。

创建截图

有时你想测试像 CSS 这样的东西,确保网站观感没有出现回退。

譬如,对我的博客首页进行截图:

复制代码
const puppeteer = require("puppeteer");
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("http://jackhiston.com/");
await page.screenshot({ path: "jackhiston-blog.png" });
browser.close();
})();

首先我们要引用 puppeteer 作为依赖包。有了这个,你可以启动一个浏览器实例,它实际上也可以在屏幕上加载浏览器,如下所示:

复制代码
const browser = await puppeteer.launch({ headless: false });

注意 headless 选项。

这样你就可以在浏览页面时创建一个全新的页面,然后你可以“转到”一个特定的网址(在这个例子里会转到我的主页)。

然后,我们可以使用内建的屏幕截图功能来保存页面截图。

爬取网页

另外一个应用场景是用 Puppeteer 爬取网站的内容。在下面的例子里,我将浏览骇客新闻并从第一页上取得所有新闻的链接:

复制代码
const puppeteer = require("puppeteer");
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on("console", (...args) => console.log("PAGE LOG:", ...args));
await page.goto("https://news.ycombinator.com", { waitUntil: "networkidle" });
const links = await page.evaluate(() => {
const anchors = Array.from(document.querySelectorAll(".storylink"));
return anchors.map(anchor => anchor.textContent);
});
console.log(links.join("\n"));
browser.close();
})();

这里需要注意的是 page.evaluate 功能。它允许我们检查当前所在的页面 ,就像我们在 Chrome 的 DevTools 里做的那样。

点击链接并浏览

我想展示的最后一个用例是导航。在下面的例子中,我展示了你如何点击页面链接并等待页面加载,并将结果记录下来:

复制代码
const puppeteer = require("puppeteer");
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://news.ycombinator.com", { waitUntil: "networkidle" });
await page.click("a.storylink");
var response = await page.waitForNavigation({ waitUntil: "networkidle" });
console.log(await page.title());
console.log(page.url());
browser.close();
})();

在这里, page.waitForNavigation 是一个很关键的功能。我们可以等到页面加载完毕,因为 promise 只会在点击事件完成后结束。

这对于浏览导航来说非常有用,并且可以进行全面的 UI 用户体验测试。

总结

Puppeteer 的重点是提供 API 来展现 DevTools 协议的功能。

Selenium 这样的工具更加成熟,并提供跨浏览器测试。Puppeteer 不属于 Selenium 这类应用。

Puppeteer 只是许多无界面 Chrome 的应用中的一种。在撰写本文时,已经有很多项目在使用无界面 Chrome。Ken Soh 的博客很好地介绍了这方面的内容。其他使用DevTools 协议的项目可以在这里找到。

Puppeteer 由 Chrome DevTools 团队维护,他们正在寻求各种人才为社区作贡献。因此,你可以通过加入 Puppeteer 开源项目来推动无界面 Chrome 自动化测试。

谢谢阅读。请与朋友分享。

有用的链接

查看英文原文 Making a Master Puppeteer


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-24 19:007579
用户头像

发布了 322 篇内容, 共 140.2 次阅读, 收获喜欢 145 次。

关注

评论

发布
暂无评论
发现更多内容

SVN管理工具Cornerstone for Mac入门教程 Cornerstone永久破解资源

Rose

SVN优缺点详解及版本控制系统选型建议

龙智—DevSecOps解决方案

svn 版本控制

在自动化测试时,Python常用的几个加密算法,你有用到吗

华为云开发者联盟

Python 开发 自动化测试 华为云 华为云开发者联盟

开源MES/免费MES/开源MES生产流程管理

万界星空科技

开源 开源代码 开源软件 免费开源 开源mes

视频后期特效合成软件:Blackmagic Fusion Studio18 激活最新

mac大玩家j

Mac软件 特效合成工具 Mac软件特效

四川大学携手和鲸打造课内workshop,趣味实践教学助力数据思维培养

ModelWhale

Python 数据分析 人才培养 数据思维 四川大学

MySQL:从MySQL看主从架构高可用性实现

互联网工科生

MySQL 数据库

【FAQ】推送前台应用的通知处理功能没生效,如何进行排查?

HarmonyOS SDK

HMS Core

和鲸科技荣获第三届光合组织解决方案大赛集智赛道优秀奖

ModelWhale

人工智能 信创 数据科学 海光 光合组织

Flutter开发微信小程序:如何构建一个简单的天气预报小程序

Geek_2305a8

Atlassian发布四个CVSS风险评分9.0或更高漏洞,影响多个产品

龙智—DevSecOps解决方案

Atlassian

MongoDB和阿里云携手驱动WeLab 引领超千万用户迈向智能金融未来

Geek_2d6073

推出 Amazon EC2 C7i 实例

亚马逊云科技 (Amazon Web Services)

机器学习 分布式 ebs

010 Editor 十六进制编辑器 注册激活版 mac/win

Rose

010 Editor下载 010 Editor破解版 010 Editor注册码 16进制编辑器

Amazon CodeWhisperer 免费的 AI 代码生成助手!最新体验反馈~

亚马逊云科技 (Amazon Web Services)

人工智能 亚马逊云科技 云上探索实验室 Amazon CodeWhisperer

INTO领航:2023社交变革峰会揭示数字社交的未来格局

Geek_2d6073

Blackhat Europe 2023 | 百度安全揭秘多平台NPU背后的安全风险

百度安全

软件测试/人工智能丨身份运算符

测试人

人工智能 软件测试

Android开发中如何进行单元测试?

高端章鱼哥

android 单元测试 JUnit Mockito

CSS属性isolation,走过路过不要错过!

伤感汤姆布利柏

CSS 前端

别划走!3分钟看懂 Git 底层工作原理

伤感汤姆布利柏

mac强大的音频处理工具Ableton Live 12 中文版最新

胖墩儿不胖y

Mac软件 mac音频编辑器

LED透明屏市场前景展望

Dylan

全球经济下行 中美贸易 LED LED显示屏 led显示屏厂家

寿光教育城乡一体化的秘诀,藏在“教育一朵云”里

脑极体

云平台

【数据安全】金融行业数据安全保障措施汇总

行云管家

金融 数据安全 运维安全 数据安全运维

NFTScan | 12.04~12.10 NFT 市场热点汇总

NFT Research

NFT NFTScan nft工具

SmartGit for Mac(老牌Git客户端)v23.1.1中文注册版 支持M/intel

Rose

SmartGit破解版 SmartGit许可证 Git 客户端 SmartGit for Mac SmartGit 中文

软件测试/人工智能丨成员运算符

测试人

人工智能 软件测试

2023滨海湾人工智能论坛举办,范向伟代表和鲸科技共同发起成立工业智能算法联盟

ModelWhale

人工智能 算法 大模型 算料 滨海湾

如何成为Puppeteer大师_软件工程_Jack Histon_InfoQ精选文章