关闭无头模式
有时,查看浏览器显示的内容非常有用。请使用 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);
- jasmine:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;
- mocha:
this.timeout(100000);
(不要忘记更改测试以使用函数,而不是“=>”)
添加带有调试程序的评估语句,或向现有评估语句添加调试程序:
await page.evaluate(() => {
debugger;
});
然后,测试会在上述评估语句中停止执行,并且 Chromium 会在调试模式下停止。
在 Node.js 中使用调试程序
这样您就可以调试测试代码。例如,您可以单步调试 Node.js 脚本中的 await page.click()
,然后在应用代码浏览器中查看点击发生的情况。
由于 Chromium 错误 833928,您无法在开发者工具控制台中运行 await page.click()
。因此,如果您想试用,则必须将其添加到测试文件中。
- 在测试中添加调试程序,例如:
javascript debugger; await page.click('a[target=_blank]');
- 将无头设置为 false。
- 运行节点
--inspect-brk
,例如node --inspect-brk node_modules/.bin/jest tests
。 - 在 Chrome 中打开
chrome://inspect/#devices
,然后点击inspect
。 - 在新打开的测试浏览器中,输入
F8
以继续运行测试。 - 现在,您的调试程序已发布,您可以在测试浏览器中进行调试了
启用详细日志记录
内部开发者工具协议流量通过调试模块记录在 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 jest
、ndb mocha
(或npx ndb jest
/npx ndb mocha
)。 - 像大师一样在 Chromium 内调试测试!