在Puppeteer出现之前,测试web应用程序通常依靠两种方式:有头浏览器,和构建在JavaScript引擎之上的无头浏览器。无头浏览器意味着没有用户界面,有头浏览器是最终用户与产品进行交互的窗口。
这就造成了一种必须权衡的局面:速度(无头)与可靠性(有头)。Puppeter的设计目标是消除这种权衡,能够让开发人员利用Chromium浏览器环境来运行测试,并让他们能够灵活地利用有头与无头浏览器来实现用户场景的测试。
Puppeteer也非常适合开发人员,开发人员可以基于熟悉的测试框架集成Puppeteer来实现、拓展自己的测试能力。
简单来说使用Puppeteer,我们可以实现:
- 快速爬取网页内容
- 自动完成表单数据提交
- 实现在浏览器上的所有自动化操作
- 跟踪并记录页面加载性能
- 浏览器屏幕截图
- 实现自动化测试
- 从网页生成PDF
安装Puppeteer
使用如下命令安装:
使用Puppeteer
在Node.js文件中加载Puppeteer
测试结束后可以使用close()方法关闭浏览器:
Page对象内置函数
page.$() 提供对页面上的选择器API方法querySelector()的访问权限
page.$$() 提供对页面上的选择器API方法querySelectorAll()的访问权限
page.$eval() 接收2个或多个参数。第一个是选择器,第二个是函数。如果有更多参数,则这些参数将作为附加参数传递给函数。
click() 对页面元素进行点击事件模拟
content() 获取HTML的页面源代码
emulate() 模拟设备信息,可以通过配置Agent和viewport 模拟不同设备访问网站。
evaluate() 在页上下文中执行用户指定的函数。在这个函数中,可以直接访问document对象,因此可以调用任何DOM API:
focus() 选中当前元素
goBack() 后退页面
goForward() 前进页面
goto() 打开某一网址
hover() 悬停在某元素上
pdf() 生成当前页面的PDF文档
reload() 重新加载当前页面
screenshot() 截图当前页面并存储为PNG图片
setViewPort() 默认的viewport 为800x600px, 可以通过setViewport 来模拟不同窗口尺寸
waitFor() 等待某些条件成立,内置以下等待条件:
- waitForFunction
- waitForNavigation
- waitForRequest
- waitForResponse
- waitForSelector
- waitForXPath
结论
本文介绍了Puppeteer的原理以及常用API,在接下来的文章中,我们将详细比较Selenium和pupperter框架的优缺点,如何针对项目的技术背景有针对的选择测试框架。