feat(console): expose stack trace for console messages (#6445)
This commit is contained in:
parent
322cc96e7b
commit
96f3d439f5
@ -214,6 +214,7 @@
|
|||||||
- [class: ConsoleMessage](#class-consolemessage)
|
- [class: ConsoleMessage](#class-consolemessage)
|
||||||
* [consoleMessage.args()](#consolemessageargs)
|
* [consoleMessage.args()](#consolemessageargs)
|
||||||
* [consoleMessage.location()](#consolemessagelocation)
|
* [consoleMessage.location()](#consolemessagelocation)
|
||||||
|
* [consoleMessage.stackTrace()](#consolemessagestacktrace)
|
||||||
* [consoleMessage.text()](#consolemessagetext)
|
* [consoleMessage.text()](#consolemessagetext)
|
||||||
* [consoleMessage.type()](#consolemessagetype)
|
* [consoleMessage.type()](#consolemessagetype)
|
||||||
- [class: Frame](#class-frame)
|
- [class: Frame](#class-frame)
|
||||||
@ -2752,6 +2753,12 @@ const puppeteer = require('puppeteer');
|
|||||||
- `lineNumber` <[number]> 0-based line number in the resource if known or `undefined` otherwise.
|
- `lineNumber` <[number]> 0-based line number in the resource if known or `undefined` otherwise.
|
||||||
- `columnNumber` <[number]> 0-based column number in the resource if known or `undefined` otherwise.
|
- `columnNumber` <[number]> 0-based column number in the resource if known or `undefined` otherwise.
|
||||||
|
|
||||||
|
#### consoleMessage.stackTrace()
|
||||||
|
- returns: <[Array]<[Object]>>
|
||||||
|
- `url` <[string]> URL of the resource if known or `undefined` otherwise.
|
||||||
|
- `lineNumber` <[number]> 0-based line number in the resource if known or `undefined` otherwise.
|
||||||
|
- `columnNumber` <[number]> 0-based column number in the resource if known or `undefined` otherwise.
|
||||||
|
|
||||||
#### consoleMessage.text()
|
#### consoleMessage.text()
|
||||||
- returns: <[string]>
|
- returns: <[string]>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Constructs a new instance of the `ConsoleMessage` class
|
|||||||
<b>Signature:</b>
|
<b>Signature:</b>
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
constructor(type: ConsoleMessageType, text: string, args: JSHandle[], location?: ConsoleMessageLocation);
|
constructor(type: ConsoleMessageType, text: string, args: JSHandle[], stackTraceLocations: ConsoleMessageLocation[]);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
@ -19,5 +19,5 @@ constructor(type: ConsoleMessageType, text: string, args: JSHandle[], location?:
|
|||||||
| type | [ConsoleMessageType](./puppeteer.consolemessagetype.md) | |
|
| type | [ConsoleMessageType](./puppeteer.consolemessagetype.md) | |
|
||||||
| text | string | |
|
| text | string | |
|
||||||
| args | [JSHandle](./puppeteer.jshandle.md)<!-- -->\[\] | |
|
| args | [JSHandle](./puppeteer.jshandle.md)<!-- -->\[\] | |
|
||||||
| location | [ConsoleMessageLocation](./puppeteer.consolemessagelocation.md) | |
|
| stackTraceLocations | [ConsoleMessageLocation](./puppeteer.consolemessagelocation.md)<!-- -->\[\] | |
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ export declare class ConsoleMessage
|
|||||||
|
|
||||||
| Constructor | Modifiers | Description |
|
| Constructor | Modifiers | Description |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| [(constructor)(type, text, args, location)](./puppeteer.consolemessage._constructor_.md) | | Constructs a new instance of the <code>ConsoleMessage</code> class |
|
| [(constructor)(type, text, args, stackTraceLocations)](./puppeteer.consolemessage._constructor_.md) | | Constructs a new instance of the <code>ConsoleMessage</code> class |
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
@ -24,6 +24,7 @@ export declare class ConsoleMessage
|
|||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| [args()](./puppeteer.consolemessage.args.md) | | |
|
| [args()](./puppeteer.consolemessage.args.md) | | |
|
||||||
| [location()](./puppeteer.consolemessage.location.md) | | |
|
| [location()](./puppeteer.consolemessage.location.md) | | |
|
||||||
|
| [stackTrace()](./puppeteer.consolemessage.stacktrace.md) | | |
|
||||||
| [text()](./puppeteer.consolemessage.text.md) | | |
|
| [text()](./puppeteer.consolemessage.text.md) | | |
|
||||||
| [type()](./puppeteer.consolemessage.type.md) | | |
|
| [type()](./puppeteer.consolemessage.type.md) | | |
|
||||||
|
|
||||||
|
17
new-docs/puppeteer.consolemessage.stacktrace.md
Normal file
17
new-docs/puppeteer.consolemessage.stacktrace.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
||||||
|
|
||||||
|
[Home](./index.md) > [puppeteer](./puppeteer.md) > [ConsoleMessage](./puppeteer.consolemessage.md) > [stackTrace](./puppeteer.consolemessage.stacktrace.md)
|
||||||
|
|
||||||
|
## ConsoleMessage.stackTrace() method
|
||||||
|
|
||||||
|
<b>Signature:</b>
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
stackTrace(): ConsoleMessageLocation[];
|
||||||
|
```
|
||||||
|
<b>Returns:</b>
|
||||||
|
|
||||||
|
[ConsoleMessageLocation](./puppeteer.consolemessagelocation.md)<!-- -->\[\]
|
||||||
|
|
||||||
|
The array of locations on the stack of the console message.
|
||||||
|
|
@ -68,7 +68,7 @@ export class ConsoleMessage {
|
|||||||
private _type: ConsoleMessageType;
|
private _type: ConsoleMessageType;
|
||||||
private _text: string;
|
private _text: string;
|
||||||
private _args: JSHandle[];
|
private _args: JSHandle[];
|
||||||
private _location: ConsoleMessageLocation;
|
private _stackTraceLocations: ConsoleMessageLocation[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
@ -77,12 +77,12 @@ export class ConsoleMessage {
|
|||||||
type: ConsoleMessageType,
|
type: ConsoleMessageType,
|
||||||
text: string,
|
text: string,
|
||||||
args: JSHandle[],
|
args: JSHandle[],
|
||||||
location: ConsoleMessageLocation = {}
|
stackTraceLocations: ConsoleMessageLocation[]
|
||||||
) {
|
) {
|
||||||
this._type = type;
|
this._type = type;
|
||||||
this._text = text;
|
this._text = text;
|
||||||
this._args = args;
|
this._args = args;
|
||||||
this._location = location;
|
this._stackTraceLocations = stackTraceLocations;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,6 +110,13 @@ export class ConsoleMessage {
|
|||||||
* @returns The location of the console message.
|
* @returns The location of the console message.
|
||||||
*/
|
*/
|
||||||
location(): ConsoleMessageLocation {
|
location(): ConsoleMessageLocation {
|
||||||
return this._location;
|
return this._stackTraceLocations.length ? this._stackTraceLocations[0] : {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns The array of locations on the stack of the console message.
|
||||||
|
*/
|
||||||
|
stackTrace(): ConsoleMessageLocation[] {
|
||||||
|
return this._stackTraceLocations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,7 +605,7 @@ export class Page extends EventEmitter {
|
|||||||
if (source !== 'worker')
|
if (source !== 'worker')
|
||||||
this.emit(
|
this.emit(
|
||||||
PageEmittedEvents.Console,
|
PageEmittedEvents.Console,
|
||||||
new ConsoleMessage(level, text, [], { url, lineNumber })
|
new ConsoleMessage(level, text, [], [{ url, lineNumber }])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1230,19 +1230,21 @@ export class Page extends EventEmitter {
|
|||||||
if (remoteObject.objectId) textTokens.push(arg.toString());
|
if (remoteObject.objectId) textTokens.push(arg.toString());
|
||||||
else textTokens.push(helper.valueFromRemoteObject(remoteObject));
|
else textTokens.push(helper.valueFromRemoteObject(remoteObject));
|
||||||
}
|
}
|
||||||
const location =
|
const stackTraceLocations = [];
|
||||||
stackTrace && stackTrace.callFrames.length
|
if (stackTrace) {
|
||||||
? {
|
for (const callFrame of stackTrace.callFrames) {
|
||||||
url: stackTrace.callFrames[0].url,
|
stackTraceLocations.push({
|
||||||
lineNumber: stackTrace.callFrames[0].lineNumber,
|
url: callFrame.url,
|
||||||
columnNumber: stackTrace.callFrames[0].columnNumber,
|
lineNumber: callFrame.lineNumber,
|
||||||
}
|
columnNumber: callFrame.columnNumber,
|
||||||
: {};
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
const message = new ConsoleMessage(
|
const message = new ConsoleMessage(
|
||||||
type,
|
type,
|
||||||
textTokens.join(' '),
|
textTokens.join(' '),
|
||||||
args,
|
args,
|
||||||
location
|
stackTraceLocations
|
||||||
);
|
);
|
||||||
this.emit(PageEmittedEvents.Console, message);
|
this.emit(PageEmittedEvents.Console, message);
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,13 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
console.log('yellow')
|
function foo() {
|
||||||
|
console.log('yellow')
|
||||||
|
}
|
||||||
|
function bar() {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
bar();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -548,7 +548,7 @@ describe('Page', function () {
|
|||||||
lineNumber: undefined,
|
lineNumber: undefined,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should have location for console API calls', async () => {
|
it('should have location and stack trace for console API calls', async () => {
|
||||||
const { page, server, isChrome } = getTestState();
|
const { page, server, isChrome } = getTestState();
|
||||||
|
|
||||||
await page.goto(server.EMPTY_PAGE);
|
await page.goto(server.EMPTY_PAGE);
|
||||||
@ -560,9 +560,26 @@ describe('Page', function () {
|
|||||||
expect(message.type()).toBe('log');
|
expect(message.type()).toBe('log');
|
||||||
expect(message.location()).toEqual({
|
expect(message.location()).toEqual({
|
||||||
url: server.PREFIX + '/consolelog.html',
|
url: server.PREFIX + '/consolelog.html',
|
||||||
lineNumber: 7,
|
lineNumber: 8,
|
||||||
columnNumber: isChrome ? 14 : 6, // console.|log vs |console.log
|
columnNumber: isChrome ? 16 : 8, // console.|log vs |console.log
|
||||||
});
|
});
|
||||||
|
expect(message.stackTrace()).toEqual([
|
||||||
|
{
|
||||||
|
url: server.PREFIX + '/consolelog.html',
|
||||||
|
lineNumber: 8,
|
||||||
|
columnNumber: isChrome ? 16 : 8, // console.|log vs |console.log
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: server.PREFIX + '/consolelog.html',
|
||||||
|
lineNumber: 11,
|
||||||
|
columnNumber: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: server.PREFIX + '/consolelog.html',
|
||||||
|
lineNumber: 13,
|
||||||
|
columnNumber: 6,
|
||||||
|
},
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
// @see https://github.com/puppeteer/puppeteer/issues/3865
|
// @see https://github.com/puppeteer/puppeteer/issues/3865
|
||||||
it('should not throw when there are console messages in detached iframes', async () => {
|
it('should not throw when there are console messages in detached iframes', async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user