捕获浏览器 JS 异常
概述
从 v2.2 开始,Nightwatch 允许您监听网站运行时发生的 JavaScript 异常,并通过回调在测试中提供这些异常。
这得益于 Selenium 4 中现有的 Chrome DevTools 协议支持。
`captureBrowserExceptions()` 命令仅适用于基于 Chromium 的浏览器,如 Google Chrome 和 Microsoft Edge。
捕获 JS 异常
在导航到您的网站之前,使用 browser.captureBrowserExceptions()
命令以及所需的参数。
captureBrowserExceptions()
接受一个回调函数,该函数会在每次抛出新的 Error
时接收一个 event
对象作为参数。接收到的 event
对象的规范如下
名称 | 类型 | 描述 |
---|---|---|
时间戳 |
数字 | 捕获 JS 异常的时间。 |
exceptionDetails |
对象 | 包含发生异常的所有详细信息的 JS 对象。 对象的规范可以从 这里 阅读。 |
示例
tests/catch-js-exceptions.js
describe('catch browser exceptions', function() {
it('captures the js exceptions thrown in the browser', async function() {
await browser.captureBrowserExceptions((event) => {
console.log('>>> Exception:', event);
});
await browser.navigateTo('https://duckduckgo.com/');
const searchBoxElement = await browser.findElement('input[name=q]');
await browser.executeScript(function(_searchBoxElement) {
_searchBoxElement.setAttribute('onclick', 'throw new Error("Hello world!")');
}, [searchBoxElement]);
await browser.elementIdClick(searchBoxElement.getId());
});
});
以上示例的输出
Running captureBrowserExceptions():
───────────────────────────────────────────────────────────────────────────────────────────────────
{
exceptionDetails: {
exceptionId: 1,
text: 'Uncaught',
lineNumber: 0,
columnNumber: 6,
scriptId: '55',
url: 'https://duckduckgo.com/',
stackTrace: { callFrames: [Array] },
exception: {
type: 'object',
subtype: 'error',
className: 'Error',
description: 'Error: Hello world!\n' +
' at HTMLAnchorElement.onclick (https://duckduckgo.com/:1:7)',
objectId: '6711588812373266697.1.1',
preview: [Object]
},
executionContextId: 1
},
timestamp: 2022-06-10T13:14:52.722Z
}
No assertions ran.