fix: add parameter to close/crash/disconnected etc events (#5098)

This commit is contained in:
Yury Semikhatsky 2021-01-22 09:58:31 -08:00 committed by GitHub
parent 018727db8e
commit a4eb121399
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 122 additions and 55 deletions

View file

@ -46,6 +46,7 @@ with sync_playwright() as playwright:
``` ```
## event: Browser.disconnected ## event: Browser.disconnected
- type: <[Browser]>
Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following: Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* Browser application is closed or crashed. * Browser application is closed or crashed.

View file

@ -40,6 +40,7 @@ context.close()
``` ```
## event: BrowserContext.close ## event: BrowserContext.close
- type: <[BrowserContext]>
Emitted when Browser context gets closed. This might happen because of one of the following: Emitted when Browser context gets closed. This might happen because of one of the following:
* Browser context is closed. * Browser context is closed.

View file

@ -89,6 +89,7 @@ page.remove_listener("request", log_request)
``` ```
## event: Page.close ## event: Page.close
- type: <[Page]>
Emitted when the page closes. Emitted when the page closes.
@ -129,6 +130,7 @@ page.evaluate("console.log('hello', 5, {foo: 'bar'})")
``` ```
## event: Page.crash ## event: Page.crash
- type: <[Page]>
Emitted when the page crashes. Browser pages might crash if they try to allocate too much memory. When the page crashes, Emitted when the page crashes. Browser pages might crash if they try to allocate too much memory. When the page crashes,
ongoing and subsequent operations will throw. ongoing and subsequent operations will throw.
@ -173,6 +175,7 @@ Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` o
to the dialog via [`method: Dialog.accept`] or [`method: Dialog.dismiss`] methods. to the dialog via [`method: Dialog.accept`] or [`method: Dialog.dismiss`] methods.
## event: Page.domcontentloaded ## event: Page.domcontentloaded
- type: <[Page]>
Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
event is dispatched. event is dispatched.
@ -221,6 +224,7 @@ Emitted when a frame is detached.
Emitted when a frame is navigated to a new url. Emitted when a frame is navigated to a new url.
## event: Page.load ## event: Page.load
- type: <[Page]>
Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.

View file

@ -3,6 +3,7 @@
The [WebSocket] class represents websocket connections in the page. The [WebSocket] class represents websocket connections in the page.
## event: WebSocket.close ## event: WebSocket.close
- type: <[WebSocket]>
Fired when the websocket closes. Fired when the websocket closes.

View file

@ -91,6 +91,6 @@ export class Browser extends ChannelOwner<channels.BrowserChannel, channels.Brow
_didClose() { _didClose() {
this._isConnected = false; this._isConnected = false;
this.emit(Events.Browser.Disconnected); this.emit(Events.Browser.Disconnected, this);
} }
} }

View file

@ -239,7 +239,7 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel,
async _onClose() { async _onClose() {
if (this._browser) if (this._browser)
this._browser._contexts.delete(this); this._browser._contexts.delete(this);
this.emit(Events.BrowserContext.Close); this.emit(Events.BrowserContext.Close, this);
} }
async close(): Promise<void> { async close(): Promise<void> {

View file

@ -350,7 +350,7 @@ export class WebSocket extends ChannelOwner<channels.WebSocketChannel, channels.
this._channel.on('socketError', ({ error }) => this.emit(Events.WebSocket.Error, error)); this._channel.on('socketError', ({ error }) => this.emit(Events.WebSocket.Error, error));
this._channel.on('close', () => { this._channel.on('close', () => {
this._isClosed = true; this._isClosed = true;
this.emit(Events.WebSocket.Close); this.emit(Events.WebSocket.Close, this);
}); });
} }

View file

@ -117,12 +117,12 @@ export class Page extends ChannelOwner<channels.PageChannel, channels.PageInitia
this._channel.on('console', ({ message }) => this.emit(Events.Page.Console, ConsoleMessage.from(message))); this._channel.on('console', ({ message }) => this.emit(Events.Page.Console, ConsoleMessage.from(message)));
this._channel.on('crash', () => this._onCrash()); this._channel.on('crash', () => this._onCrash());
this._channel.on('dialog', ({ dialog }) => this.emit(Events.Page.Dialog, Dialog.from(dialog))); this._channel.on('dialog', ({ dialog }) => this.emit(Events.Page.Dialog, Dialog.from(dialog)));
this._channel.on('domcontentloaded', () => this.emit(Events.Page.DOMContentLoaded)); this._channel.on('domcontentloaded', () => this.emit(Events.Page.DOMContentLoaded, this));
this._channel.on('download', ({ download }) => this.emit(Events.Page.Download, Download.from(download))); this._channel.on('download', ({ download }) => this.emit(Events.Page.Download, Download.from(download)));
this._channel.on('fileChooser', ({ element, isMultiple }) => this.emit(Events.Page.FileChooser, new FileChooser(this, ElementHandle.from(element), isMultiple))); this._channel.on('fileChooser', ({ element, isMultiple }) => this.emit(Events.Page.FileChooser, new FileChooser(this, ElementHandle.from(element), isMultiple)));
this._channel.on('frameAttached', ({ frame }) => this._onFrameAttached(Frame.from(frame))); this._channel.on('frameAttached', ({ frame }) => this._onFrameAttached(Frame.from(frame)));
this._channel.on('frameDetached', ({ frame }) => this._onFrameDetached(Frame.from(frame))); this._channel.on('frameDetached', ({ frame }) => this._onFrameDetached(Frame.from(frame)));
this._channel.on('load', () => this.emit(Events.Page.Load)); this._channel.on('load', () => this.emit(Events.Page.Load, this));
this._channel.on('pageError', ({ error }) => this.emit(Events.Page.PageError, parseError(error))); this._channel.on('pageError', ({ error }) => this.emit(Events.Page.PageError, parseError(error)));
this._channel.on('popup', ({ page }) => this.emit(Events.Page.Popup, Page.from(page))); this._channel.on('popup', ({ page }) => this.emit(Events.Page.Popup, Page.from(page)));
this._channel.on('request', ({ request }) => this.emit(Events.Page.Request, Request.from(request))); this._channel.on('request', ({ request }) => this.emit(Events.Page.Request, Request.from(request)));
@ -199,11 +199,11 @@ export class Page extends ChannelOwner<channels.PageChannel, channels.PageInitia
_onClose() { _onClose() {
this._closed = true; this._closed = true;
this._browserContext._pages.delete(this); this._browserContext._pages.delete(this);
this.emit(Events.Page.Close); this.emit(Events.Page.Close, this);
} }
private _onCrash() { private _onCrash() {
this.emit(Events.Page.Crash); this.emit(Events.Page.Crash, this);
} }
context(): BrowserContext { context(): BrowserContext {

View file

@ -141,6 +141,15 @@ it('close() should be callable twice', async ({browser}) => {
await context.close(); await context.close();
}); });
it('should pass self to close event', async ({browser}) => {
const newContext = await browser.newContext();
const [closedContext] = await Promise.all([
newContext.waitForEvent('close'),
newContext.close()
]);
expect(closedContext).toBe(newContext);
});
it('should not report frameless pages on error', async ({browser, server}) => { it('should not report frameless pages on error', async ({browser, server}) => {
const context = await browser.newContext(); const context = await browser.newContext();
const page = await context.newPage(); const page = await context.newPage();

View file

@ -85,6 +85,15 @@ describe('connect', (suite, { mode }) => {
expect(disconnected2).toBe(1); expect(disconnected2).toBe(1);
}); });
it('disconnected event should have browser as argument', async ({browserType, remoteServer}) => {
const browser = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint() });
const [disconnected] = await Promise.all([
new Promise(f => browser.on('disconnected', f)),
browser.close(),
]);
expect(disconnected).toBe(browser);
});
it('should handle exceptions during connect', async ({browserType, remoteServer}) => { it('should handle exceptions during connect', async ({browserType, remoteServer}) => {
const __testHookBeforeCreateBrowser = () => { throw new Error('Dummy'); }; const __testHookBeforeCreateBrowser = () => { throw new Error('Dummy'); };
const error = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint(), __testHookBeforeCreateBrowser } as any).catch(e => e); const error = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint(), __testHookBeforeCreateBrowser } as any).catch(e => e);

View file

@ -41,6 +41,15 @@ it('should set the page close state', async ({context}) => {
expect(newPage.isClosed()).toBe(true); expect(newPage.isClosed()).toBe(true);
}); });
it('should pass page to close event', async ({context}) => {
const newPage = await context.newPage();
const [closedPage] = await Promise.all([
newPage.waitForEvent('close'),
newPage.close()
]);
expect(closedPage).toBe(newPage);
});
it('should terminate network waiters', async ({context, server}) => { it('should terminate network waiters', async ({context, server}) => {
const newPage = await context.newPage(); const newPage = await context.newPage();
const results = await Promise.all([ const results = await Promise.all([
@ -106,6 +115,22 @@ it('should fire domcontentloaded when expected', async ({page, server}) => {
await navigatedPromise; await navigatedPromise;
}); });
it('should pass self as argument to domcontentloaded event', async ({page, server}) => {
const [eventArg] = await Promise.all([
new Promise(f => page.on('domcontentloaded', f)),
page.goto('about:blank')
]);
expect(eventArg).toBe(page);
});
it('should pass self as argument to load event', async ({page, server}) => {
const [eventArg] = await Promise.all([
new Promise(f => page.on('load', f)),
page.goto('about:blank')
]);
expect(eventArg).toBe(page);
});
it('should fail with error upon disconnect', async ({page, server}) => { it('should fail with error upon disconnect', async ({page, server}) => {
let error; let error;
const waitForPromise = page.waitForEvent('download').catch(e => error = e); const waitForPromise = page.waitForEvent('download').catch(e => error = e);

View file

@ -36,7 +36,8 @@ describe('', (suite, { browserName, platform, mode }) => {
it('should emit crash event when page crashes', async ({page, browserName, toImpl}) => { it('should emit crash event when page crashes', async ({page, browserName, toImpl}) => {
await page.setContent(`<div>This page should crash</div>`); await page.setContent(`<div>This page should crash</div>`);
crash(page, toImpl, browserName); crash(page, toImpl, browserName);
await new Promise(f => page.on('crash', f)); const crashedPage = await new Promise(f => page.on('crash', f));
expect(crashedPage).toBe(page);
}); });
it('should throw on any action after page crashes', async ({page, browserName, toImpl}) => { it('should throw on any action after page crashes', async ({page, browserName, toImpl}) => {

View file

@ -69,6 +69,22 @@ it('should emit frame events', async ({ page, server, isFirefox }) => {
expect(log.join(':')).toBe('close:open:received<incoming>:sent<outgoing>'); expect(log.join(':')).toBe('close:open:received<incoming>:sent<outgoing>');
}); });
it('should pass self as argument to close event', async ({ page, server, isFirefox }) => {
let socketClosed;
const socketClosePromise = new Promise(f => socketClosed = f);
let webSocket;
page.on('websocket', ws => {
webSocket = ws;
ws.on('close', socketClosed);
});
await page.evaluate(port => {
const ws = new WebSocket('ws://localhost:' + port + '/ws');
ws.addEventListener('open', () => ws.close());
}, server.PORT);
const eventArg = await socketClosePromise;
expect(eventArg).toBe(webSocket);
});
it('should emit binary frame events', async ({ page, server }) => { it('should emit binary frame events', async ({ page, server }) => {
let doneCallback; let doneCallback;
const donePromise = new Promise(f => doneCallback = f); const donePromise = new Promise(f => doneCallback = f);

94
types/types.d.ts vendored
View file

@ -369,7 +369,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
on(event: 'close', listener: () => void): this; on(event: 'close', listener: (page: Page) => void): this;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -408,7 +408,7 @@ export interface Page {
* ``` * ```
* *
*/ */
on(event: 'crash', listener: () => void): this; on(event: 'crash', listener: (page: Page) => void): this;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -421,7 +421,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
on(event: 'domcontentloaded', listener: () => void): this; on(event: 'domcontentloaded', listener: (page: Page) => void): this;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -466,7 +466,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
on(event: 'load', listener: () => void): this; on(event: 'load', listener: (page: Page) => void): this;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -538,7 +538,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
once(event: 'close', listener: () => void): this; once(event: 'close', listener: (page: Page) => void): this;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -577,7 +577,7 @@ export interface Page {
* ``` * ```
* *
*/ */
once(event: 'crash', listener: () => void): this; once(event: 'crash', listener: (page: Page) => void): this;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -590,7 +590,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
once(event: 'domcontentloaded', listener: () => void): this; once(event: 'domcontentloaded', listener: (page: Page) => void): this;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -635,7 +635,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
once(event: 'load', listener: () => void): this; once(event: 'load', listener: (page: Page) => void): this;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -707,7 +707,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
addListener(event: 'close', listener: () => void): this; addListener(event: 'close', listener: (page: Page) => void): this;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -746,7 +746,7 @@ export interface Page {
* ``` * ```
* *
*/ */
addListener(event: 'crash', listener: () => void): this; addListener(event: 'crash', listener: (page: Page) => void): this;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -759,7 +759,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
addListener(event: 'domcontentloaded', listener: () => void): this; addListener(event: 'domcontentloaded', listener: (page: Page) => void): this;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -804,7 +804,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
addListener(event: 'load', listener: () => void): this; addListener(event: 'load', listener: (page: Page) => void): this;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -876,7 +876,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
removeListener(event: 'close', listener: () => void): this; removeListener(event: 'close', listener: (page: Page) => void): this;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -915,7 +915,7 @@ export interface Page {
* ``` * ```
* *
*/ */
removeListener(event: 'crash', listener: () => void): this; removeListener(event: 'crash', listener: (page: Page) => void): this;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -928,7 +928,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
removeListener(event: 'domcontentloaded', listener: () => void): this; removeListener(event: 'domcontentloaded', listener: (page: Page) => void): this;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -973,7 +973,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
removeListener(event: 'load', listener: () => void): this; removeListener(event: 'load', listener: (page: Page) => void): this;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -1045,7 +1045,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
off(event: 'close', listener: () => void): this; off(event: 'close', listener: (page: Page) => void): this;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -1084,7 +1084,7 @@ export interface Page {
* ``` * ```
* *
*/ */
off(event: 'crash', listener: () => void): this; off(event: 'crash', listener: (page: Page) => void): this;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -1097,7 +1097,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
off(event: 'domcontentloaded', listener: () => void): this; off(event: 'domcontentloaded', listener: (page: Page) => void): this;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -1142,7 +1142,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
off(event: 'load', listener: () => void): this; off(event: 'load', listener: (page: Page) => void): this;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -2814,7 +2814,7 @@ export interface Page {
/** /**
* Emitted when the page closes. * Emitted when the page closes.
*/ */
waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: (page: Page) => boolean, timeout?: number } | ((page: Page) => boolean)): Promise<Page>;
/** /**
* Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also * Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also
@ -2853,7 +2853,7 @@ export interface Page {
* ``` * ```
* *
*/ */
waitForEvent(event: 'crash', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'crash', optionsOrPredicate?: { predicate?: (page: Page) => boolean, timeout?: number } | ((page: Page) => boolean)): Promise<Page>;
/** /**
* Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond * Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Playwright can respond
@ -2866,7 +2866,7 @@ export interface Page {
* Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) * Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded)
* event is dispatched. * event is dispatched.
*/ */
waitForEvent(event: 'domcontentloaded', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'domcontentloaded', optionsOrPredicate?: { predicate?: (page: Page) => boolean, timeout?: number } | ((page: Page) => boolean)): Promise<Page>;
/** /**
* Emitted when attachment download started. User can access basic file operations on downloaded content via the passed * Emitted when attachment download started. User can access basic file operations on downloaded content via the passed
@ -2911,7 +2911,7 @@ export interface Page {
/** /**
* Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. * Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched.
*/ */
waitForEvent(event: 'load', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'load', optionsOrPredicate?: { predicate?: (page: Page) => boolean, timeout?: number } | ((page: Page) => boolean)): Promise<Page>;
/** /**
* Emitted when an uncaught exception happens within the page. * Emitted when an uncaught exception happens within the page.
@ -4513,7 +4513,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
on(event: 'close', listener: () => void): this; on(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -4544,7 +4544,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
once(event: 'close', listener: () => void): this; once(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -4575,7 +4575,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
addListener(event: 'close', listener: () => void): this; addListener(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -4606,7 +4606,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
removeListener(event: 'close', listener: () => void): this; removeListener(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -4637,7 +4637,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
off(event: 'close', listener: () => void): this; off(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -5052,7 +5052,7 @@ export interface BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: (browserContext: BrowserContext) => boolean, timeout?: number } | ((browserContext: BrowserContext) => boolean)): Promise<BrowserContext>;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -6970,35 +6970,35 @@ export interface Browser extends EventEmitter {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
on(event: 'disconnected', listener: () => void): this; on(event: 'disconnected', listener: (browser: Browser) => void): this;
/** /**
* Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following: * Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
once(event: 'disconnected', listener: () => void): this; once(event: 'disconnected', listener: (browser: Browser) => void): this;
/** /**
* Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following: * Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
addListener(event: 'disconnected', listener: () => void): this; addListener(event: 'disconnected', listener: (browser: Browser) => void): this;
/** /**
* Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following: * Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
removeListener(event: 'disconnected', listener: () => void): this; removeListener(event: 'disconnected', listener: (browser: Browser) => void): this;
/** /**
* Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following: * Emitted when Browser gets disconnected from the browser application. This might happen because of one of the following:
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
off(event: 'disconnected', listener: () => void): this; off(event: 'disconnected', listener: (browser: Browser) => void): this;
/** /**
* In case this browser is obtained using * In case this browser is obtained using
@ -7433,7 +7433,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
on(event: 'close', listener: () => void): this; on(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -7476,7 +7476,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
once(event: 'close', listener: () => void): this; once(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -7519,7 +7519,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
addListener(event: 'close', listener: () => void): this; addListener(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -7562,7 +7562,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
removeListener(event: 'close', listener: () => void): this; removeListener(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -7605,7 +7605,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
off(event: 'close', listener: () => void): this; off(event: 'close', listener: (browserContext: BrowserContext) => void): this;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -7664,7 +7664,7 @@ export interface ChromiumBrowserContext extends BrowserContext {
* - Browser application is closed or crashed. * - Browser application is closed or crashed.
* - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called. * - The [browser.close()](https://playwright.dev/docs/api/class-browser#browserclose) method was called.
*/ */
waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: (browserContext: BrowserContext) => boolean, timeout?: number } | ((browserContext: BrowserContext) => boolean)): Promise<BrowserContext>;
/** /**
* The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will * The event is emitted when a new Page is created in the BrowserContext. The page may still be loading. The event will
@ -8870,7 +8870,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
on(event: 'close', listener: () => void): this; on(event: 'close', listener: (webSocket: WebSocket) => void): this;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.
@ -8900,7 +8900,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
once(event: 'close', listener: () => void): this; once(event: 'close', listener: (webSocket: WebSocket) => void): this;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.
@ -8930,7 +8930,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
addListener(event: 'close', listener: () => void): this; addListener(event: 'close', listener: (webSocket: WebSocket) => void): this;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.
@ -8960,7 +8960,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
removeListener(event: 'close', listener: () => void): this; removeListener(event: 'close', listener: (webSocket: WebSocket) => void): this;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.
@ -8990,7 +8990,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
off(event: 'close', listener: () => void): this; off(event: 'close', listener: (webSocket: WebSocket) => void): this;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.
@ -9030,7 +9030,7 @@ export interface WebSocket {
/** /**
* Fired when the websocket closes. * Fired when the websocket closes.
*/ */
waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: () => boolean, timeout?: number } | (() => boolean)): Promise<void>; waitForEvent(event: 'close', optionsOrPredicate?: { predicate?: (webSocket: WebSocket) => boolean, timeout?: number } | ((webSocket: WebSocket) => boolean)): Promise<WebSocket>;
/** /**
* Fired when the websocket recieves a frame. * Fired when the websocket recieves a frame.