我正在使用puppeteer和express在node.js中编写应用程序。最近,我一直在有人对其进行测试。我遇到了一个通用错误,即如果发生意外情况,它会告诉用户将输入的屏幕截图发送给我,该屏幕快照是express生成的网页,以便我进行调试。
我发现了一个需要捕获的常见错误,以便出于重要原因可以向用户显示更具体和更具描述性的错误。
在编辑代码并将其添加到我的应用程序中时,以捕获导致错误的情况并向用户显示描述性错误原因。当应用运行时,我在控制台中收到此错误,我输入了我知道会触发特定错误的输入:
(node:18517) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null
at <anonymous>:1:102
at ExecutionContext.evaluateHandle (/root/node_modules/puppeteer/lib/ExecutionContext.js:88:13)
at process._tickCallback (internal/process/next_tick.js:68:7)
错误表明它在下面的函数中的第102行上: 隐藏复制代码
const availability = await page.evaluate(() => {
const availabilityText = document.querySelector('.errorClass .errorClass')
return availabilityText ? availabilityText.innerText : "error"; });
我知道您认为选择器一定不能存在于puppeteer应用程序的页面上,但是在尝试抓住选择器之前,我对它所在的页面进行了截屏,并且确实在正确的页面上。我本人使用chrome浏览到该页面,并使用devtools测试了所有功能,并使用innerText正确地捕获了文本。
这是奇怪的地方。我可以删除整个功能。尝试使用其他方法捕获甚至不使用innerText的错误。但是,如上所述,出现了SAME EXACT错误,引用的是相同的确切行(102)和innerText。
什么鬼?