fix(console): respect repeat count in webkit (#2032)
This commit is contained in:
parent
b11d7f15bb
commit
534857269b
|
|
@ -38,6 +38,8 @@ import * as jpeg from 'jpeg-js';
|
||||||
import * as png from 'pngjs';
|
import * as png from 'pngjs';
|
||||||
import { NotConnectedError } from '../errors';
|
import { NotConnectedError } from '../errors';
|
||||||
import { logError } from '../logger';
|
import { logError } from '../logger';
|
||||||
|
import { ConsoleMessageLocation } from '../console';
|
||||||
|
import { JSHandle } from '../javascript';
|
||||||
|
|
||||||
const UTILITY_WORLD_NAME = '__playwright_utility_world__';
|
const UTILITY_WORLD_NAME = '__playwright_utility_world__';
|
||||||
const BINDING_CALL_MESSAGE = '__playwright_binding_call__';
|
const BINDING_CALL_MESSAGE = '__playwright_binding_call__';
|
||||||
|
|
@ -64,6 +66,7 @@ export class WKPage implements PageDelegate {
|
||||||
private _firstNonInitialNavigationCommittedPromise: Promise<void>;
|
private _firstNonInitialNavigationCommittedPromise: Promise<void>;
|
||||||
private _firstNonInitialNavigationCommittedFulfill = () => {};
|
private _firstNonInitialNavigationCommittedFulfill = () => {};
|
||||||
private _firstNonInitialNavigationCommittedReject = (e: Error) => {};
|
private _firstNonInitialNavigationCommittedReject = (e: Error) => {};
|
||||||
|
private _lastConsoleMessage: { derivedType: string, text: string, handles: JSHandle[]; count: number, location: ConsoleMessageLocation; } | null = null;
|
||||||
|
|
||||||
constructor(browserContext: WKBrowserContext, pageProxySession: WKSession, opener: WKPage | null) {
|
constructor(browserContext: WKBrowserContext, pageProxySession: WKSession, opener: WKPage | null) {
|
||||||
this._pageProxySession = pageProxySession;
|
this._pageProxySession = pageProxySession;
|
||||||
|
|
@ -320,6 +323,7 @@ export class WKPage implements PageDelegate {
|
||||||
helper.addEventListener(this._session, 'Page.didRequestOpenWindow', event => this._onDidRequestOpenWindow(event)),
|
helper.addEventListener(this._session, 'Page.didRequestOpenWindow', event => this._onDidRequestOpenWindow(event)),
|
||||||
helper.addEventListener(this._session, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),
|
helper.addEventListener(this._session, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)),
|
||||||
helper.addEventListener(this._session, 'Console.messageAdded', event => this._onConsoleMessage(event)),
|
helper.addEventListener(this._session, 'Console.messageAdded', event => this._onConsoleMessage(event)),
|
||||||
|
helper.addEventListener(this._session, 'Console.messageRepeatCountUpdated', event => this._onConsoleRepeatCountUpdated(event)),
|
||||||
helper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogOpening', event => this._onDialog(event)),
|
helper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogOpening', event => this._onDialog(event)),
|
||||||
helper.addEventListener(this._session, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),
|
helper.addEventListener(this._session, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)),
|
||||||
helper.addEventListener(this._session, 'Network.requestWillBeSent', e => this._onRequestWillBeSent(this._session, e)),
|
helper.addEventListener(this._session, 'Network.requestWillBeSent', e => this._onRequestWillBeSent(this._session, e)),
|
||||||
|
|
@ -483,7 +487,33 @@ export class WKPage implements PageDelegate {
|
||||||
}
|
}
|
||||||
return context._createHandle(p);
|
return context._createHandle(p);
|
||||||
});
|
});
|
||||||
this._page._addConsoleMessage(derivedType, handles, { url, lineNumber: (lineNumber || 1) - 1, columnNumber: (columnNumber || 1) - 1 }, handles.length ? undefined : text);
|
this._lastConsoleMessage = {
|
||||||
|
derivedType,
|
||||||
|
text,
|
||||||
|
handles,
|
||||||
|
count: 0,
|
||||||
|
location: {
|
||||||
|
url,
|
||||||
|
lineNumber: (lineNumber || 1) - 1,
|
||||||
|
columnNumber: (columnNumber || 1) - 1,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this._onConsoleRepeatCountUpdated({ count: 1});
|
||||||
|
}
|
||||||
|
|
||||||
|
_onConsoleRepeatCountUpdated(event: Protocol.Console.messageRepeatCountUpdatedPayload) {
|
||||||
|
if (this._lastConsoleMessage) {
|
||||||
|
const {
|
||||||
|
derivedType,
|
||||||
|
text,
|
||||||
|
handles,
|
||||||
|
count,
|
||||||
|
location
|
||||||
|
} = this._lastConsoleMessage;
|
||||||
|
for (let i = count; i < event.count; ++i)
|
||||||
|
this._page._addConsoleMessage(derivedType, handles, location, handles.length ? undefined : text);
|
||||||
|
this._lastConsoleMessage.count = event.count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDialog(event: Protocol.Dialog.javascriptDialogOpeningPayload) {
|
_onDialog(event: Protocol.Dialog.javascriptDialogOpeningPayload) {
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,12 @@ describe('Page.Events.Console', function() {
|
||||||
expect(await message.args()[1].jsonValue()).toEqual(5);
|
expect(await message.args()[1].jsonValue()).toEqual(5);
|
||||||
expect(await message.args()[2].jsonValue()).toEqual({foo: 'bar'});
|
expect(await message.args()[2].jsonValue()).toEqual({foo: 'bar'});
|
||||||
});
|
});
|
||||||
|
it('should emit same log twice', async({page, server}) => {
|
||||||
|
const messages = [];
|
||||||
|
page.on('console', m => messages.push(m.text()));
|
||||||
|
await page.evaluate(() => { for (let i = 0; i < 2; ++i ) console.log('hello'); } );
|
||||||
|
expect(messages).toEqual(['hello', 'hello']);
|
||||||
|
});
|
||||||
it('should work for different console API calls', async({page, server}) => {
|
it('should work for different console API calls', async({page, server}) => {
|
||||||
const messages = [];
|
const messages = [];
|
||||||
page.on('console', msg => messages.push(msg));
|
page.on('console', msg => messages.push(msg));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue