调试 Puppeteer

关闭无头模式

有时,查看浏览器显示的内容非常有用。请使用 headless: false 启动完整版浏览器,而不是在无头模式下启动:

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

放慢速度

slowMo 选项会将 Puppeteer 操作减慢指定的毫秒数。这也有助于我们查明到底发生了什么。

const browser = await puppeteer.launch({
  headless: false,
  slowMo: 250, // slow down by 250ms
});

捕获控制台输出

您可以监听 console 事件。这在调试 page.evaluate() 中的代码时也很方便:

page.on('console', (msg) => console.log('PAGE LOG:', msg.text()));

await page.evaluate(() => console.log(`url is ${location.href}`));

在应用代码浏览器中使用调试程序

有两个执行上下文:运行测试代码的 node.js,以及运行被测试应用代码的浏览器。这样,您就可以在应用代码浏览器(即 evaluate() 内的代码)中调试代码。

启动 Puppeteer 时使用 {devtools: true}

const browser = await puppeteer.launch({ devtools: true });

更改默认测试超时

  • jest:jest.setTimeout(100000);
  • jasminejasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;
  • mochathis.timeout(100000);(不要忘记更改测试以使用函数,而不是“=>”

添加带有调试程序的评估语句,或向现有评估语句添加调试程序:

await page.evaluate(() => {
  debugger;
});

然后,测试会在上述评估语句中停止执行,并且 Chromium 会在调试模式下停止。

在 Node.js 中使用调试程序

这样您就可以调试测试代码。例如,您可以单步调试 Node.js 脚本中的 await page.click(),然后在应用代码浏览器中查看点击发生的情况。

由于 Chromium 错误 833928,您无法在开发者工具控制台中运行 await page.click()。因此,如果您想试用,则必须将其添加到测试文件中。

  1. 在测试中添加调试程序,例如:javascript debugger; await page.click('a[target=_blank]');
  2. 将无头设置为 false。
  3. 运行节点 --inspect-brk,例如 node --inspect-brk node_modules/.bin/jest tests
  4. 在 Chrome 中打开 chrome://inspect/#devices,然后点击 inspect
  5. 在新打开的测试浏览器中,输入 F8 以继续运行测试。
  6. 现在,您的调试程序已发布,您可以在测试浏览器中进行调试了

启用详细日志记录

内部开发者工具协议流量通过调试模块记录在 Puppeteer 命名空间下。

# Basic verbose logging
env DEBUG="puppeteer:*" node script.js

# Protocol traffic can be rather noisy. This example filters out all Network
# domain messages
env DEBUG="puppeteer:*" env DEBUG_COLORS=true node script.js 2>&1 | grep -v '"Network'

调试 Puppeteer(节点)代码

使用 ndb

  • npm install -g ndb(或使用 npx)。
  • 向 Puppeteer(节点)代码添加调试程序。
  • 在测试命令前面添加 ndb(或 npx ndb)。例如:ndb jestndb mocha(或 npx ndb jest / npx ndb mocha)。
  • 像大师一样在 Chromium 内调试测试!