测试员的那点事软件测试自动化测试

Puppeteer的入门与实践

2018-07-20  本文已影响8人  _夏兮

1.背景

在web端自动化测试中目前使用较多的是selenium、webdriver等的解决方案,这些的依赖较多。puppeteer是一款基于chrome的自动化测试以及爬虫工具。

2.了解puppeteer

image

Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

Puppeteer 核心功能

3 环境和安装

Puppeteer因为是一个npm的包,所以安装很简单:(在此之前需要安装node)

npm i puppeteer

或者

yarn add puppeteer

Puppeteer安装时自带一个最新版本的Chromium,可以通过设置环境变量或者npm config中的PUPPETEER_SKIP_CHROMIUM_DOWNLOAD跳过下载。如果不下载的话,启动时可以通过puppeteer.launch([options])配置项中的executablePath指定Chromium的位置。

4 使用和例子

Puppeteer类似其他框架,通过操作Browser实例来操作浏览器作出相应的反应。

const puppeteer = require('puppeteer');(async () => {      const browser = await puppeteer.launch();      const page = await browser.newPage();      await page.goto('http://google.com');      await page.screenshot({path: 'example.png'});      await page.pdf({path: 'example.pdf', format: 'A4'});      await browser.close();
})();

上述代码通过puppeteer.launch方法生成了一个browser的实例,对应于浏览器,launch方法可以传入配置项,比较有用的是在本地调试时传入{headless:false}可以关闭headless模式。

const browser = await puppeteer.launch({headless:false})

browser.newPage方法可以打开一个新tab并且返回这个tab的事例page,通过page的各种方法可以对页面进行常用操作,如元素查找、点击、输入等的操作。上述代码中page.screenshot是截屏,page.pdf是打印pdf。

puppeteer提供了一个强大的方法page.evaluate,来看下这个函数

page.evaluate(pageFunction, …args)

如果pageFunction返回的是[Promise],page.evaluate将等待promise完成,并返回其返回值。

如果pageFunction返回的是不能序列化的值,将返回undefined

来看下事例:

pageFunction传参数示例:

  1. const result = await page.evaluate(x => {

  2. return Promise.resolve(8 * x);

  3. }, 7); // 7 可以是你自己代码里任意方式得到的值

  4. console.log(result); // prints "56"

也可以传一个字符串:

  1. console.log(await page.evaluate('1 + 2')); // prints "3"

  2. const x = 10;

  3. console.log(await page.evaluate(1 + ${x})); // prints "11"

</pre>

可以通过该函数向页面注入我们的函数,这样就有了无限可能

4 调试技巧

先来了解launch方法:

puppeteer.launch([options])

该方法启动具有给定参数的浏览器实例。当父节点 node.js 进程关闭时,浏览器将被关闭。

  1. chrome提供了headless模式,在puppeteer中可以在launch中配置headless为false关掉无界面模式,查看浏览器显示的内容。使用以下命令可以启动完整版浏览器:
const browser = await puppeteer.launch({headless: false})
  1. 减慢速度,slowMo选项以指定的毫秒减慢Puppeteer的操作。这是另一个看到发生了什么的方法:
const browser = await puppeteer.launch({  headless:false,  slowMo:250});

下篇文章将会介绍page相关的操作。
本文首发于 https://mp.weixin.qq.com/s/smK6xGWyzEc25-e7rNcXJw

上一篇 下一篇

猜你喜欢

热点阅读