2020-12-27 00:52:05 +03:00
// This file is generated by /utils/generate_types/index.js
/ * *
* Copyright ( c ) Microsoft Corporation .
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* /
import { Protocol } from './protocol' ;
import { ChildProcess } from 'child_process' ;
import { EventEmitter } from 'events' ;
import { Readable } from 'stream' ;
/ * *
* Can be converted to JSON
* /
type Serializable = { } ;
/ * *
* Can be converted to JSON , but may also contain JSHandles .
* /
type EvaluationArgument = { } ;
type NoHandles < Arg > = Arg extends JSHandle ? never : ( Arg extends object ? { [ Key in keyof Arg ] : NoHandles < Arg [ Key ] > } : Arg ) ;
type Unboxed < Arg > =
Arg extends ElementHandle < infer T > ? T :
Arg extends JSHandle < infer T > ? T :
Arg extends NoHandles < Arg > ? Arg :
Arg extends [ infer A0 ] ? [ Unboxed < A0 > ] :
Arg extends [ infer A0 , infer A1 ] ? [ Unboxed < A0 > , Unboxed < A1 > ] :
Arg extends [ infer A0 , infer A1 , infer A2 ] ? [ Unboxed < A0 > , Unboxed < A1 > , Unboxed < A2 > ] :
Arg extends [ infer A0 , infer A1 , infer A2 , infer A3 ] ? [ Unboxed < A0 > , Unboxed < A1 > , Unboxed < A2 > , Unboxed < A3 > ] :
Arg extends Array < infer T > ? Array < Unboxed < T > > :
Arg extends object ? { [ Key in keyof Arg ] : Unboxed < Arg [ Key ] > } :
Arg ;
type PageFunction < Arg , R > = string | ( ( arg : Unboxed < Arg > ) = > R | Promise < R > ) ;
type PageFunctionOn < On , Arg2 , R > = string | ( ( on : On , arg2 : Unboxed < Arg2 > ) = > R | Promise < R > ) ;
type SmartHandle < T > = T extends Node ? ElementHandle < T > : JSHandle < T > ;
type ElementHandleForTag < K extends keyof HTMLElementTagNameMap > = ElementHandle < HTMLElementTagNameMap [ K ] > ;
type PageWaitForSelectorOptionsNotHidden = PageWaitForSelectorOptions & {
state : 'visible' | 'attached' ;
} ;
type ElementHandleWaitForSelectorOptionsNotHidden = ElementHandleWaitForSelectorOptions & {
state : 'visible' | 'attached' ;
} ;
type BindingSource = { context : BrowserContext , page : Page , frame : Frame } ;
/ * *
* Page provides methods to interact with a single tab in a Browser , or an extension background page in Chromium . One Browser instance might have multiple Page instances .
* This example creates a page , navigates it to a URL , and then saves a screenshot :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
*
* ( async ( ) = > {
* const browser = await webkit . launch ( ) ;
* const context = await browser . newContext ( ) ;
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* await page . screenshot ( { path : 'screenshot.png' } ) ;
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* The Page class emits various events ( described below ) which can be handled using any of Node ' s native ` EventEmitter ` methods , such as ` on ` , ` once ` or ` removeListener ` .
* This example logs a message for a single page ` load ` event :
* ` ` ` js
* page . once ( 'load' , ( ) = > console . log ( 'Page loaded!' ) ) ;
* ` ` `
* To unsubscribe from events use the ` removeListener ` method :
* ` ` ` js
* function logRequest ( interceptedRequest ) {
* console . log ( 'A request was made:' , interceptedRequest . url ( ) ) ;
* }
* page . on ( 'request' , logRequest ) ;
* // Sometime later...
* page . removeListener ( 'request' , logRequest ) ;
* ` ` `
* /
export interface Page {
/ * *
2020-12-27 01:31:41 +03:00
* Returns the value of the ` pageFunction ` invocation .
2020-12-27 00:52:05 +03:00
* If the function passed to the ` page.evaluate ` returns a Promise , then ` page.evaluate ` would wait for the promise to resolve and return its value .
* If the function passed to the ` page.evaluate ` returns a non - Serializable value , then ` page.evaluate ` resolves to ` undefined ` . DevTools Protocol also supports transferring some additional values that are not serializable by ` JSON ` : ` -0 ` , ` NaN ` , ` Infinity ` , ` -Infinity ` , and bigint literals .
* Passing argument to ` pageFunction ` :
* ` ` ` js
* const result = await page . evaluate ( ( [ x , y ] ) = > {
* return Promise . resolve ( x * y ) ;
* } , [ 7 , 8 ] ) ;
* console . log ( result ) ; // prints "56"
* ` ` `
* A string can also be passed in instead of a function :
* ` ` ` js
* console . log ( await page . evaluate ( '1 + 2' ) ) ; // prints "3"
* const x = 10 ;
* console . log ( await page . evaluate ( ` 1 + ${ x } ` ) ) ; // prints "11"
* ` ` `
* ElementHandle instances can be passed as an argument to the ` page.evaluate ` :
* ` ` ` js
* const bodyHandle = await page . $ ( 'body' ) ;
* const html = await page . evaluate ( ( [ body , suffix ] ) = > body . innerHTML + suffix , [ bodyHandle , 'hello' ] ) ;
* await bodyHandle . dispose ( ) ;
* ` ` `
* Shortcut for main frame ' s ` frame.evaluate(pageFunction[, arg]) ` .
* @param pageFunction Function to be evaluated in the page context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluate < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < R > ;
evaluate < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < R > ;
/ * *
2020-12-27 01:31:41 +03:00
* Returns the value of the ` pageFunction ` invocation as in - page object ( JSHandle ) .
2020-12-27 00:52:05 +03:00
* The only difference between ` page.evaluate ` and ` page.evaluateHandle ` is that ` page.evaluateHandle ` returns in - page object ( JSHandle ) .
* If the function passed to the ` page.evaluateHandle ` returns a Promise , then ` page.evaluateHandle ` would wait for the promise to resolve and return its value .
* A string can also be passed in instead of a function :
* ` ` ` js
* const aHandle = await page . evaluateHandle ( 'document' ) ; // Handle for the 'document'
* ` ` `
* JSHandle instances can be passed as an argument to the ` page.evaluateHandle ` :
* ` ` ` js
* const aHandle = await page . evaluateHandle ( ( ) = > document . body ) ;
* const resultHandle = await page . evaluateHandle ( body = > body . innerHTML , aHandle ) ;
* console . log ( await resultHandle . jsonValue ( ) ) ;
* await resultHandle . dispose ( ) ;
* ` ` `
* @param pageFunction Function to be evaluated in the page context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluateHandle < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < SmartHandle < R > > ;
evaluateHandle < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < SmartHandle < R > > ;
/ * *
* The method finds an element matching the specified selector within the page . If no elements match the selector , the return value resolves to ` null ` .
* Shortcut for main frame ' s ` frame. $ (selector) ` .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > | null > ;
$ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > | null > ;
/ * *
* The method finds all elements matching the specified selector within the page . If no elements match the selector , the return value resolves to ` [] ` .
* Shortcut for main frame ' s ` frame. $ $ (selector) ` .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ $ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > [ ] > ;
$ $ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > [ ] > ;
/ * *
* The method finds an element matching the specified selector within the page and passes it as a first argument to ` pageFunction ` . If no elements match the selector , the method throws an error . Returns the value of ` pageFunction ` .
* If ` pageFunction ` returns a Promise , then ` page. $ eval(selector, pageFunction[, arg]) ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const searchValue = await page . $eval ( '#search' , el = > el . value ) ;
* const preloadHref = await page . $eval ( 'link[rel=preload]' , el = > el . href ) ;
* const html = await page . $eval ( '.main-container' , ( e , suffix ) = > e . outerHTML + suffix , 'hello' ) ;
* ` ` `
* Shortcut for main frame ' s ` frame. $ eval(selector, pageFunction[, arg]) ` .
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , void , R > , arg? : any ) : Promise < R > ;
$eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , void , R > , arg? : any ) : Promise < R > ;
/ * *
* The method finds all elements matching the specified selector within the page and passes an array of matched elements as a first argument to ` pageFunction ` . Returns the result of ` pageFunction ` invocation .
* If ` pageFunction ` returns a Promise , then ` page. $ $ eval(selector, pageFunction[, arg]) ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const divsCounts = await page . $ $eval ( 'div' , ( divs , min ) = > divs . length >= min , 10 ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$ $eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , void , R > , arg? : any ) : Promise < R > ;
$ $eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns when the ` pageFunction ` returns a truthy value . It resolves to a JSHandle of the truthy value .
* The ` waitForFunction ` can be used to observe viewport size change :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
*
* ( async ( ) = > {
* const browser = await webkit . launch ( ) ;
* const page = await browser . newPage ( ) ;
* const watchDog = page . waitForFunction ( 'window.innerWidth < 100' ) ;
* await page . setViewportSize ( { width : 50 , height : 50 } ) ;
* await watchDog ;
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* To pass an argument to the predicate of ` page.waitForFunction ` function :
* ` ` ` js
* const selector = '.foo' ;
* await page . waitForFunction ( selector = > ! ! document . querySelector ( selector ) , selector ) ;
* ` ` `
* Shortcut for main frame ' s ` frame.waitForFunction(pageFunction[, arg, options]) ` .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* @param options
* /
waitForFunction < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg , options? : PageWaitForFunctionOptions ) : Promise < SmartHandle < R > > ;
waitForFunction < R > ( pageFunction : PageFunction < void , R > , arg? : any , options? : PageWaitForFunctionOptions ) : Promise < SmartHandle < R > > ;
/ * *
* Returns when element specified by selector satisfies ` state ` option . Returns ` null ` if waiting for ` hidden ` or ` detached ` .
* Wait for the ` selector ` to satisfy ` state ` option ( either appear / disappear from dom , or become visible / hidden ) . If at the moment of calling the method ` selector ` already satisfies the condition , the method will return immediately . If the selector doesn ' t satisfy the condition for the ` timeout ` milliseconds , the function will throw .
* This method works across navigations :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* let currentURL ;
* page
* . waitForSelector ( 'img' )
* . then ( ( ) = > console . log ( 'First URL with image: ' + currentURL ) ) ;
* for ( currentURL of [ 'https://example.com' , 'https://google.com' , 'https://bbc.com' ] ) {
* await page . goto ( currentURL ) ;
* }
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param options
* /
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options? : PageWaitForSelectorOptionsNotHidden ) : Promise < ElementHandleForTag < K > > ;
waitForSelector ( selector : string , options? : PageWaitForSelectorOptionsNotHidden ) : Promise < ElementHandle < SVGElement | HTMLElement > > ;
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options : PageWaitForSelectorOptions ) : Promise < ElementHandleForTag < K > | null > ;
waitForSelector ( selector : string , options : PageWaitForSelectorOptions ) : Promise < null | ElementHandle < SVGElement | HTMLElement > > ;
/ * *
* The method adds a function called ` name ` on the ` window ` object of every frame in this page . When called , the function executes ` playwrightBinding ` and returns a Promise which resolves to the return value of ` playwrightBinding ` . If the ` playwrightBinding ` returns a Promise , it will be awaited .
* The first argument of the ` playwrightBinding ` function contains information about the caller : ` { browserContext: BrowserContext, page: Page, frame: Frame } ` .
* See ` browserContext.exposeBinding(name, playwrightBinding[, options]) ` for the context - wide version .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Functions installed via ` page.exposeBinding ` survive navigations .
2020-12-27 00:52:05 +03:00
* An example of exposing page URL to all frames in a page :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
*
* ( async ( ) = > {
* const browser = await webkit . launch ( { headless : false } ) ;
* const context = await browser . newContext ( ) ;
* const page = await context . newPage ( ) ;
* await page . exposeBinding ( 'pageURL' , ( { page } ) = > page . url ( ) ) ;
* await page . setContent ( `
* < script >
* async function onClick() {
* document . querySelector ( 'div' ) . textContent = await window . pageURL ( ) ;
* }
* < / script >
* < button onclick = "onClick()" > Click me < / button >
* < div > < / div >
* ` );
* await page . click ( 'button' ) ;
* } ) ( ) ;
* ` ` `
* An example of passing an element handle :
* ` ` ` js
* await page . exposeBinding ( 'clicked' , async ( source , element ) = > {
* console . log ( await element . textContent ( ) ) ;
* } , { handle : true } ) ;
* await page . setContent ( `
* < script >
* document . addEventListener ( 'click' , event = > window . clicked ( event . target ) ) ;
* < / script >
* < div > Click me < / div >
* < div > Or click me < / div >
* ` );
* ` ` `
* @param name Name of the function on the window object .
* @param playwrightBinding Callback function that will be called in the Playwright ' s context .
* @param options
* /
exposeBinding ( name : string , playwrightBinding : ( source : BindingSource , arg : JSHandle ) = > any , options : { handle : true } ) : Promise < void > ;
exposeBinding ( name : string , playwrightBinding : ( source : BindingSource , . . . args : any [ ] ) = > any , options ? : { handle? : boolean } ) : Promise < void > ;
/ * *
* Emitted when the page closes .
* /
on ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
on ( event : 'console' , listener : ( consoleMessage : ConsoleMessage ) = > void ) : this ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
on ( event : 'crash' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
on ( event : 'dialog' , listener : ( dialog : Dialog ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
on ( event : 'domcontentloaded' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'download' , listener : ( download : Download ) = > void ) : this ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
on ( event : 'filechooser' , listener : ( fileChooser : FileChooser ) = > void ) : this ;
/ * *
* Emitted when a frame is attached .
* /
on ( event : 'frameattached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is detached .
* /
on ( event : 'framedetached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
on ( event : 'framenavigated' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
on ( event : 'load' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
on ( event : 'pageerror' , listener : ( error : Error ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'popup' , listener : ( page : Page ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'request' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'requestfailed' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
on ( event : 'requestfinished' , listener : ( request : Request ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'response' , listener : ( response : Response ) = > void ) : this ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
on ( event : 'websocket' , listener : ( webSocket : WebSocket ) = > void ) : this ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
on ( event : 'worker' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when the page closes .
* /
once ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
once ( event : 'console' , listener : ( consoleMessage : ConsoleMessage ) = > void ) : this ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
once ( event : 'crash' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
once ( event : 'dialog' , listener : ( dialog : Dialog ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
once ( event : 'domcontentloaded' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'download' , listener : ( download : Download ) = > void ) : this ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
once ( event : 'filechooser' , listener : ( fileChooser : FileChooser ) = > void ) : this ;
/ * *
* Emitted when a frame is attached .
* /
once ( event : 'frameattached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is detached .
* /
once ( event : 'framedetached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
once ( event : 'framenavigated' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
once ( event : 'load' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
once ( event : 'pageerror' , listener : ( error : Error ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'popup' , listener : ( page : Page ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'request' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'requestfailed' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
once ( event : 'requestfinished' , listener : ( request : Request ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'response' , listener : ( response : Response ) = > void ) : this ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
once ( event : 'websocket' , listener : ( webSocket : WebSocket ) = > void ) : this ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
once ( event : 'worker' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when the page closes .
* /
addListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
addListener ( event : 'console' , listener : ( consoleMessage : ConsoleMessage ) = > void ) : this ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
addListener ( event : 'crash' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
addListener ( event : 'dialog' , listener : ( dialog : Dialog ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
addListener ( event : 'domcontentloaded' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'download' , listener : ( download : Download ) = > void ) : this ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
addListener ( event : 'filechooser' , listener : ( fileChooser : FileChooser ) = > void ) : this ;
/ * *
* Emitted when a frame is attached .
* /
addListener ( event : 'frameattached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is detached .
* /
addListener ( event : 'framedetached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
addListener ( event : 'framenavigated' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
addListener ( event : 'load' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
addListener ( event : 'pageerror' , listener : ( error : Error ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'popup' , listener : ( page : Page ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'request' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'requestfailed' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
addListener ( event : 'requestfinished' , listener : ( request : Request ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'response' , listener : ( response : Response ) = > void ) : this ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
addListener ( event : 'websocket' , listener : ( webSocket : WebSocket ) = > void ) : this ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
addListener ( event : 'worker' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when the page closes .
* /
removeListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
removeListener ( event : 'console' , listener : ( consoleMessage : ConsoleMessage ) = > void ) : this ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
removeListener ( event : 'crash' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
removeListener ( event : 'dialog' , listener : ( dialog : Dialog ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
removeListener ( event : 'domcontentloaded' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'download' , listener : ( download : Download ) = > void ) : this ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
removeListener ( event : 'filechooser' , listener : ( fileChooser : FileChooser ) = > void ) : this ;
/ * *
* Emitted when a frame is attached .
* /
removeListener ( event : 'frameattached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is detached .
* /
removeListener ( event : 'framedetached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
removeListener ( event : 'framenavigated' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
removeListener ( event : 'load' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
removeListener ( event : 'pageerror' , listener : ( error : Error ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'popup' , listener : ( page : Page ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'request' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'requestfailed' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
removeListener ( event : 'requestfinished' , listener : ( request : Request ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'response' , listener : ( response : Response ) = > void ) : this ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
removeListener ( event : 'websocket' , listener : ( webSocket : WebSocket ) = > void ) : this ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
removeListener ( event : 'worker' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when the page closes .
* /
off ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
off ( event : 'console' , listener : ( consoleMessage : ConsoleMessage ) = > void ) : this ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
off ( event : 'crash' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
off ( event : 'dialog' , listener : ( dialog : Dialog ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
off ( event : 'domcontentloaded' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'download' , listener : ( download : Download ) = > void ) : this ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
off ( event : 'filechooser' , listener : ( fileChooser : FileChooser ) = > void ) : this ;
/ * *
* Emitted when a frame is attached .
* /
off ( event : 'frameattached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is detached .
* /
off ( event : 'framedetached' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
off ( event : 'framenavigated' , listener : ( frame : Frame ) = > void ) : this ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
off ( event : 'load' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
off ( event : 'pageerror' , listener : ( error : Error ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'popup' , listener : ( page : Page ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'request' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'requestfailed' , listener : ( request : Request ) = > void ) : this ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
off ( event : 'requestfinished' , listener : ( request : Request ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'response' , listener : ( response : Response ) = > void ) : this ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
off ( event : 'websocket' , listener : ( webSocket : WebSocket ) = > void ) : this ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
off ( event : 'worker' , listener : ( worker : Worker ) = > void ) : this ;
accessibility : Accessibility ;
/ * *
* Adds a script which would be evaluated in one of the following scenarios :
2020-12-27 01:31:41 +03:00
* - Whenever the page is navigated .
* - Whenever the child frame is attached or navigated . In this case , the script is evaluated in the context of the newly attached frame .
2020-12-27 00:52:05 +03:00
* The script is evaluated after the document was created but before any of its scripts were run . This is useful to amend the JavaScript environment , e . g . to seed ` Math.random ` .
* An example of overriding ` Math.random ` before the page loads :
* ` ` ` js
* // preload.js
* Math . random = ( ) = > 42 ;
*
* // In your playwright script, assuming the preload.js file is in same directory
* const preloadFile = fs . readFileSync ( './preload.js' , 'utf8' ) ;
* await page . addInitScript ( preloadFile ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * The order of evaluation of multiple scripts installed via ` browserContext.addInitScript(script[, arg]) ` and ` page.addInitScript(script[, arg]) ` is not defined .
2020-12-27 00:52:05 +03:00
* @param script Script to be evaluated in the page .
* @param arg Optional argument to pass to ` script ` ( only supported when passing a function ) .
* /
addInitScript ( script : Function | string | {
/ * *
* Path to the JavaScript file . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw script content .
* /
content? : string ;
} , arg? : Serializable ) : Promise < void > ;
/ * *
* Adds a ` <script> ` tag into the page with the desired url or content . Returns the added tag when the script ' s onload fires or when the script content was injected into frame .
* Shortcut for main frame ' s ` frame.addScriptTag(params) ` .
* @param params
* /
addScriptTag ( params : {
/ * *
* URL of a script to be added .
* /
url? : string ;
/ * *
* Path to the JavaScript file to be injected into frame . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw JavaScript content to be injected into frame .
* /
content? : string ;
/ * *
* Script type . Use 'module' in order to load a Javascript ES6 module . See script for more details .
* /
type ? : string ;
} ) : Promise < ElementHandle > ;
/ * *
* Adds a ` <link rel="stylesheet"> ` tag into the page with the desired url or a ` <style type="text/css"> ` tag with the content . Returns the added tag when the stylesheet ' s onload fires or when the CSS content was injected into frame .
* Shortcut for main frame ' s ` frame.addStyleTag(params) ` .
* @param params
* /
addStyleTag ( params : {
/ * *
* URL of the ` <link> ` tag .
* /
url? : string ;
/ * *
* Path to the CSS file to be injected into frame . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw CSS content to be injected into frame .
* /
content? : string ;
} ) : Promise < ElementHandle > ;
/ * *
* Brings page to front ( activates tab ) .
* /
bringToFront ( ) : Promise < void > ;
/ * *
* This method checks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Ensure that matched element is a checkbox or a radio input . If not , this method rejects . If the element is already checked , this method returns immediately .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now checked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* Shortcut for main frame ' s ` frame.check(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
check ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method clicks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* Shortcut for main frame ' s ` frame.click(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
click ( selector : string , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* If ` runBeforeUnload ` is ` false ` , does not run any unload handlers and waits for the page to be closed . If ` runBeforeUnload ` is ` true ` the method will run unload handlers , but will * * not * * wait for the page to close .
* By default , ` page.close() ` * * does not * * run ` beforeunload ` handlers .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * if ` runBeforeUnload ` is passed as true , a ` beforeunload ` dialog might be summoned
*
* > and should be handled manually via ` page.on('dialog') ` event .
2020-12-27 00:52:05 +03:00
* @param options
* /
close ( options ? : {
/ * *
* Defaults to ` false ` . Whether to run the before unload page handlers .
* /
runBeforeUnload? : boolean ;
} ) : Promise < void > ;
/ * *
* Gets the full HTML contents of the page , including the doctype .
* /
content ( ) : Promise < string > ;
/ * *
* Get the browser context that the page belongs to .
* /
context ( ) : BrowserContext ;
/ * *
* Browser - specific Coverage implementation , only available for Chromium atm . See ChromiumCoverage for more details .
* /
coverage : null | ChromiumCoverage ;
/ * *
* This method double clicks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to double click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set . Note that if the first click of the ` dblclick() ` triggers a navigation event , this method will reject .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` page.dblclick() ` dispatches two ` click ` events and a single ` dblclick ` event .
2020-12-27 00:52:05 +03:00
* Shortcut for main frame ' s ` frame.dblclick(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
dblclick ( selector : string , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* The snippet below dispatches the ` click ` event on the element . Regardless of the visibility state of the elment , ` click ` is dispatched . This is equivalend to calling element . click ( ) .
* ` ` ` js
* await page . dispatchEvent ( 'button#submit' , 'click' ) ;
* ` ` `
* Under the hood , it creates an instance of an event based on the given ` type ` , initializes it with ` eventInit ` properties and dispatches it on the element . Events are ` composed ` , ` cancelable ` and bubble by default .
* Since ` eventInit ` is event - specific , please refer to the events documentation for the lists of initial properties :
2020-12-27 01:31:41 +03:00
* - DragEvent
* - FocusEvent
* - KeyboardEvent
* - MouseEvent
* - PointerEvent
* - TouchEvent
* - Event
2020-12-27 00:52:05 +03:00
* You can also specify ` JSHandle ` as the property value if you want live objects to be passed into the event :
* ` ` ` js
* // Note you can only create DataTransfer in Chromium and Firefox
* const dataTransfer = await page . evaluateHandle ( ( ) = > new DataTransfer ( ) ) ;
* await page . dispatchEvent ( '#source' , 'dragstart' , { dataTransfer } ) ;
* ` ` `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param type DOM event type : ` "click" ` , ` "dragstart" ` , etc .
* @param eventInit Optional event - specific initialization properties .
* @param options
* /
dispatchEvent ( selector : string , type : string , eventInit? : EvaluationArgument , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* ` ` ` js
* await page . evaluate ( ( ) = > matchMedia ( 'screen' ) . matches ) ;
* // → true
* await page . evaluate ( ( ) = > matchMedia ( 'print' ) . matches ) ;
* // → false
*
* await page . emulateMedia ( { media : 'print' } ) ;
* await page . evaluate ( ( ) = > matchMedia ( 'screen' ) . matches ) ;
* // → false
* await page . evaluate ( ( ) = > matchMedia ( 'print' ) . matches ) ;
* // → true
*
* await page . emulateMedia ( { } ) ;
* await page . evaluate ( ( ) = > matchMedia ( 'screen' ) . matches ) ;
* // → true
* await page . evaluate ( ( ) = > matchMedia ( 'print' ) . matches ) ;
* // → false
* ` ` `
* ` ` ` js
* await page . emulateMedia ( { colorScheme : 'dark' } ) ;
* await page . evaluate ( ( ) = > matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ;
* // → true
* await page . evaluate ( ( ) = > matchMedia ( '(prefers-color-scheme: light)' ) . matches ) ;
* // → false
* await page . evaluate ( ( ) = > matchMedia ( '(prefers-color-scheme: no-preference)' ) . matches ) ;
* // → false
* ` ` `
* @param params
* /
emulateMedia ( params : {
/ * *
* Changes the CSS media type of the page . The only allowed values are ` 'screen' ` , ` 'print' ` and ` null ` . Passing ` null ` disables CSS media emulation . Omitting ` media ` or passing ` undefined ` does not change the emulated value .
* /
media? : null | "print" | "screen" ;
/ * *
* Emulates ` 'prefers-colors-scheme' ` media feature , supported values are ` 'light' ` , ` 'dark' ` , ` 'no-preference' ` . Passing ` null ` disables color scheme emulation . Omitting ` colorScheme ` or passing ` undefined ` does not change the emulated value .
* /
colorScheme? : null | "dark" | "light" | "no-preference" ;
} ) : Promise < void > ;
/ * *
* The method adds a function called ` name ` on the ` window ` object of every frame in the page . When called , the function executes ` playwrightFunction ` and returns a Promise which resolves to the return value of ` playwrightFunction ` .
* If the ` playwrightFunction ` returns a Promise , it will be awaited .
* See ` browserContext.exposeFunction(name, playwrightFunction) ` for context - wide exposed function .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Functions installed via ` page.exposeFunction ` survive navigations .
2020-12-27 00:52:05 +03:00
* An example of adding an ` md5 ` function to the page :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
* const crypto = require ( 'crypto' ) ;
*
* ( async ( ) = > {
* const browser = await webkit . launch ( { headless : false } ) ;
* const page = await browser . newPage ( ) ;
* await page . exposeFunction ( 'md5' , text = > crypto . createHash ( 'md5' ) . update ( text ) . digest ( 'hex' ) ) ;
* await page . setContent ( `
* < script >
* async function onClick() {
* document . querySelector ( 'div' ) . textContent = await window . md5 ( 'PLAYWRIGHT' ) ;
* }
* < / script >
* < button onclick = "onClick()" > Click me < / button >
* < div > < / div >
* ` );
* await page . click ( 'button' ) ;
* } ) ( ) ;
* ` ` `
* An example of adding a ` window.readfile ` function to the page :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
* const fs = require ( 'fs' ) ;
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* page . on ( 'console' , msg = > console . log ( msg . text ( ) ) ) ;
* await page . exposeFunction ( 'readfile' , async filePath = > {
* return new Promise ( ( resolve , reject ) = > {
* fs . readFile ( filePath , 'utf8' , ( err , text ) = > {
* if ( err )
* reject ( err ) ;
* else
* resolve ( text ) ;
* } ) ;
* } ) ;
* } ) ;
* await page . evaluate ( async ( ) = > {
* // use window.readfile to read contents of a file
* const content = await window . readfile ( '/etc/hosts' ) ;
* console . log ( content ) ;
* } ) ;
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* @param name Name of the function on the window object
* @param playwrightFunction Callback function which will be called in Playwright ' s context .
* /
exposeFunction ( name : string , playwrightFunction : Function ) : Promise < void > ;
/ * *
* This method waits for an element matching ` selector ` , waits for actionability checks , focuses the element , fills it and triggers an ` input ` event after filling . If the element matching ` selector ` is not an ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element , this method throws an error . Note that you can pass an empty string to clear the input field .
* To send fine - grained keyboard events , use ` page.type(selector, text[, options]) ` .
* Shortcut for main frame ' s ` frame.fill(selector, value[, options]) `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param value Value to fill for the ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element .
* @param options
* /
fill ( selector : string , value : string , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method fetches an element with ` selector ` and focuses it . If there ' s no element matching ` selector ` , the method waits until a matching element appears in the DOM .
* Shortcut for main frame ' s ` frame.focus(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
focus ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns frame matching the specified criteria . Either ` name ` or ` url ` must be specified .
* ` ` ` js
* const frame = page . frame ( 'frame-name' ) ;
* ` ` `
* ` ` ` js
* const frame = page . frame ( { url : / . * d o m a i n . * \ / } ) ;
* ` ` `
* @param frameSelector Frame name or other frame lookup options .
* /
frame ( frameSelector : string | {
/ * *
2020-12-27 01:31:41 +03:00
* Frame name specified in the ` iframe ` ' s ` name ` attribute .
2020-12-27 00:52:05 +03:00
* /
name? : string ;
/ * *
* A glob pattern , regex pattern or predicate receiving frame ' s ` url ` as a URL object .
* /
url? : string | RegExp | Function ;
} ) : null | Frame ;
/ * *
* An array of all frames attached to the page .
* /
frames ( ) : Array < Frame > ;
/ * *
* Returns element attribute value .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param name Attribute name to get the value for .
* @param options
* /
getAttribute ( selector : string , name : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < null | string > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect . If can not go back , returns ` null ` .
* Navigate to the previous page in history .
* @param options
* /
goBack ( options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect . If can not go forward , returns ` null ` .
* Navigate to the next page in history .
* @param options
* /
goForward ( options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect .
* ` page.goto ` will throw an error if :
2020-12-27 01:31:41 +03:00
* - there ' s an SSL error ( e . g . in case of self - signed certificates ) .
* - target URL is invalid .
* - the ` timeout ` is exceeded during navigation .
* - the remote server does not respond or is unreachable .
* - the main resource failed to load .
2020-12-27 00:52:05 +03:00
* ` page.goto ` will not throw an error when any valid HTTP status code is returned by the remote server , including 404 "Not Found" and 500 "Internal Server Error" . The status code for such responses can be retrieved by calling ` response.status() ` .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` page.goto ` either throws an error or returns a main resource response . The only exceptions are navigation to ` about:blank ` or navigation to the same URL with a different hash , which would succeed and return ` null ` .
2020-12-27 00:52:05 +03:00
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Headless mode doesn ' t support navigation to a PDF document . See the upstream issue .
2020-12-27 00:52:05 +03:00
* Shortcut for main frame ' s ` frame.goto(url[, options]) `
* @param url URL to navigate page to . The url should include scheme , e . g . ` https:// ` .
* @param options
* /
goto ( url : string , options ? : {
/ * *
* Referer header value . If provided it will take preference over the referer header value set by ` page.setExtraHTTPHeaders(headers) ` .
* /
referer? : string ;
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* This method hovers over an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to hover over the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* Shortcut for main frame ' s ` frame.hover(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
hover ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns ` element.innerHTML ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
innerHTML ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < string > ;
/ * *
* Returns ` element.innerText ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
innerText ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < string > ;
/ * *
* Indicates that the page has been closed .
* /
isClosed ( ) : boolean ;
keyboard : Keyboard ;
/ * *
* The page ' s main frame . Page is guaranteed to have a main frame which persists during navigations .
* /
mainFrame ( ) : Frame ;
mouse : Mouse ;
/ * *
* Returns the opener for popup pages and ` null ` for others . If the opener has been closed already the returns ` null ` .
* /
opener ( ) : Promise < null | Page > ;
/ * *
* Returns the PDF buffer .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Generating a pdf is currently only supported in Chromium headless .
2020-12-27 00:52:05 +03:00
* ` page.pdf() ` generates a pdf of the page with ` print ` css media . To generate a pdf with ` screen ` media , call ` page.emulateMedia(params) ` before calling ` page.pdf() ` :
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * By default , ` page.pdf() ` generates a pdf with modified colors for printing . Use the ` -webkit-print-color-adjust ` property to force rendering of exact colors .
2020-12-27 00:52:05 +03:00
* ` ` ` js
* // Generates a PDF with 'screen' media type.
* await page . emulateMedia ( { media : 'screen' } ) ;
* await page . pdf ( { path : 'page.pdf' } ) ;
* ` ` `
* The ` width ` , ` height ` , and ` margin ` options accept values labeled with units . Unlabeled values are treated as pixels .
* A few examples :
2020-12-27 01:31:41 +03:00
* - ` page.pdf({width: 100}) ` - prints with width set to 100 pixels
* - ` page.pdf({width: '100px'}) ` - prints with width set to 100 pixels
* - ` page.pdf({width: '10cm'}) ` - prints with width set to 10 centimeters .
2020-12-27 00:52:05 +03:00
* All possible units are :
2020-12-27 01:31:41 +03:00
* - ` px ` - pixel
* - ` in ` - inch
* - ` cm ` - centimeter
* - ` mm ` - millimeter
2020-12-27 00:52:05 +03:00
* The ` format ` options are :
2020-12-27 01:31:41 +03:00
* - ` Letter ` : 8.5 in x 11 in
* - ` Legal ` : 8.5 in x 14 in
* - ` Tabloid ` : 11 in x 17 in
* - ` Ledger ` : 17 in x 11 in
* - ` A0 ` : 33.1 in x 46.8 in
* - ` A1 ` : 23.4 in x 33.1 in
* - ` A2 ` : 16.54 in x 23.4 in
* - ` A3 ` : 11.7 in x 16.54 in
* - ` A4 ` : 8.27 in x 11.7 in
* - ` A5 ` : 5.83 in x 8.27 in
* - ` A6 ` : 4.13 in x 5.83 in
*
* > * * NOTE * * ` headerTemplate ` and ` footerTemplate ` markup have the following limitations :
*
* > 1 . Script tags inside templates are not evaluated .
*
* > 2 . Page styles are not visible inside templates .
2020-12-27 00:52:05 +03:00
* @param options
* /
pdf ( options ? : {
/ * *
* Display header and footer . Defaults to ` false ` .
* /
displayHeaderFooter? : boolean ;
/ * *
* HTML template for the print footer . Should use the same format as the ` headerTemplate ` .
* /
footerTemplate? : string ;
/ * *
* Paper format . If set , takes priority over ` width ` or ` height ` options . Defaults to 'Letter' .
* /
format? : string ;
/ * *
* HTML template for the print header . Should be valid HTML markup with following classes used to inject printing values into them :
2020-12-27 01:31:41 +03:00
* - ` 'date' ` formatted print date
* - ` 'title' ` document title
* - ` 'url' ` document location
* - ` 'pageNumber' ` current page number
* - ` 'totalPages' ` total pages in the document
2020-12-27 00:52:05 +03:00
* /
headerTemplate? : string ;
/ * *
* Paper height , accepts values labeled with units .
* /
height? : string | number ;
/ * *
* Paper orientation . Defaults to ` false ` .
* /
landscape? : boolean ;
/ * *
* Paper margins , defaults to none .
* /
margin ? : {
/ * *
* Top margin , accepts values labeled with units . Defaults to ` 0 ` .
* /
top? : string | number ;
/ * *
* Right margin , accepts values labeled with units . Defaults to ` 0 ` .
* /
right? : string | number ;
/ * *
* Bottom margin , accepts values labeled with units . Defaults to ` 0 ` .
* /
bottom? : string | number ;
/ * *
* Left margin , accepts values labeled with units . Defaults to ` 0 ` .
* /
left? : string | number ;
} ;
/ * *
* Paper ranges to print , e . g . , '1-5, 8, 11-13' . Defaults to the empty string , which means print all pages .
* /
pageRanges? : string ;
/ * *
* The file path to save the PDF to . If ` path ` is a relative path , then it is resolved relative to the current working directory . If no path is provided , the PDF won ' t be saved to the disk .
* /
path? : string ;
/ * *
* Give any CSS ` @page ` size declared in the page priority over what is declared in ` width ` and ` height ` or ` format ` options . Defaults to ` false ` , which will scale the content to fit the paper size .
* /
preferCSSPageSize? : boolean ;
/ * *
* Print background graphics . Defaults to ` false ` .
* /
printBackground? : boolean ;
/ * *
* Scale of the webpage rendering . Defaults to ` 1 ` . Scale amount must be between 0.1 and 2 .
* /
scale? : number ;
/ * *
* Paper width , accepts values labeled with units .
* /
width? : string | number ;
} ) : Promise < Buffer > ;
/ * *
* Focuses the element , and then uses ` keyboard.down(key) ` and ` keyboard.up(key) ` .
* ` key ` can specify the intended keyboardEvent . key value or a single character to generate the text for . A superset of the ` key ` values can be found here . Examples of the keys are :
* ` F1 ` - ` F12 ` , ` Digit0 ` - ` Digit9 ` , ` KeyA ` - ` KeyZ ` , ` Backquote ` , ` Minus ` , ` Equal ` , ` Backslash ` , ` Backspace ` , ` Tab ` , ` Delete ` , ` Escape ` , ` ArrowDown ` , ` End ` , ` Enter ` , ` Home ` , ` Insert ` , ` PageDown ` , ` PageUp ` , ` ArrowRight ` , ` ArrowUp ` , etc .
2020-12-27 01:31:41 +03:00
* Following modification shortcuts are also supported : ` Shift ` , ` Control ` , ` Alt ` , ` Meta ` , ` ShiftLeft ` .
2020-12-27 00:52:05 +03:00
* Holding down ` Shift ` will type the text that corresponds to the ` key ` in the upper case .
* If ` key ` is a single character , it is case - sensitive , so the values ` a ` and ` A ` will generate different respective texts .
* Shortcuts such as ` key: "Control+o" ` or ` key: "Control+Shift+T" ` are supported as well . When speficied with the modifier , modifier is pressed and being held while the subsequent key is being pressed .
* ` ` ` js
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://keycode.info' ) ;
* await page . press ( 'body' , 'A' ) ;
* await page . screenshot ( { path : 'A.png' } ) ;
* await page . press ( 'body' , 'ArrowLeft' ) ;
* await page . screenshot ( { path : 'ArrowLeft.png' } ) ;
* await page . press ( 'body' , 'Shift+O' ) ;
* await page . screenshot ( { path : 'O.png' } ) ;
* await browser . close ( ) ;
* ` ` `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* @param options
* /
press ( selector : string , key : string , options ? : {
/ * *
* Time to wait between ` keydown ` and ` keyup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect .
* @param options
* /
reload ( options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* Routing provides the capability to modify network requests that are made by a page .
* Once routing is enabled , every request matching the url pattern will stall unless it ' s continued , fulfilled or aborted .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * The handler will only be called for the first url if the response is a redirect .
2020-12-27 00:52:05 +03:00
* An example of a naïve handler that aborts all image requests :
* ` ` ` js
* const page = await browser . newPage ( ) ;
* await page . route ( '**\/*.{png,jpg,jpeg}' , route = > route . abort ( ) ) ;
* await page . goto ( 'https://example.com' ) ;
* await browser . close ( ) ;
* ` ` `
* or the same snippet using a regex pattern instead :
* ` ` ` js
* const page = await browser . newPage ( ) ;
* await page . route ( /(\.png$)|(\.jpg$)/ , route = > route . abort ( ) ) ;
* await page . goto ( 'https://example.com' ) ;
* await browser . close ( ) ;
* ` ` `
* Page routes take precedence over browser context routes ( set up with ` browserContext.route(url, handler) ` ) when request matches both handlers .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Enabling routing disables http cache .
2020-12-27 00:52:05 +03:00
* @param url A glob pattern , regex pattern or predicate receiving URL to match while routing .
* @param handler handler function to route the request .
* /
route ( url : string | RegExp | ( ( url : URL ) = > boolean ) , handler : ( ( route : Route , request : Request ) = > void ) ) : Promise < void > ;
/ * *
* Returns the buffer with the captured screenshot .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Screenshots take at least 1 / 6 second on Chromium OS X and Chromium Windows . See https : //crbug.com/741689 for discussion.
2020-12-27 00:52:05 +03:00
* @param options
* /
screenshot ( options ? : {
/ * *
* An object which specifies clipping of the resulting image . Should have the following fields :
* /
clip ? : {
/ * *
* x - coordinate of top - left corner of clip area
* /
x : number ;
/ * *
* y - coordinate of top - left corner of clip area
* /
y : number ;
/ * *
* width of clipping area
* /
width : number ;
/ * *
* height of clipping area
* /
height : number ;
} ;
/ * *
* When true , takes a screenshot of the full scrollable page , instead of the currently visible viewport . Defaults to ` false ` .
* /
fullPage? : boolean ;
/ * *
* Hides default white background and allows capturing screenshots with transparency . Not applicable to ` jpeg ` images . Defaults to ` false ` .
* /
omitBackground? : boolean ;
/ * *
* The file path to save the image to . The screenshot type will be inferred from file extension . If ` path ` is a relative path , then it is resolved relative to the current working directory . If no path is provided , the image won ' t be saved to the disk .
* /
path? : string ;
/ * *
* The quality of the image , between 0 - 100 . Not applicable to ` png ` images .
* /
quality? : number ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* Specify screenshot type , defaults to ` png ` .
* /
type ? : "jpeg" | "png" ;
} ) : Promise < Buffer > ;
/ * *
* Returns the array of option values that have been successfully selected .
* Triggers a ` change ` and ` input ` event once all the provided options have been selected . If there ' s no ` <select> ` element matching ` selector ` , the method throws an error .
* ` ` ` js
* // single selection matching the value
* page . selectOption ( 'select#colors' , 'blue' ) ;
*
* // single selection matching both the value and the label
* page . selectOption ( 'select#colors' , { label : 'Blue' } ) ;
*
* // multiple selection
* page . selectOption ( 'select#colors' , [ 'red' , 'green' , 'blue' ] ) ;
*
* ` ` `
* Shortcut for main frame ' s ` frame.selectOption(selector, values[, options]) `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param values Options to select . If the ` <select> ` has the ` multiple ` attribute , all matching options are selected , otherwise only the first option matching one of the passed options is selected . String values are equivalent to ` {value:'string'} ` . Option is considered matching if all specified properties match .
* @param options
* /
selectOption ( selector : string , values : null | string | ElementHandle | Array < string > | {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} | Array < ElementHandle > | Array < {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < Array < string > > ;
/ * *
* @param html HTML markup to assign to the page .
* @param options
* /
setContent ( html : string , options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < void > ;
/ * *
* This setting will change the default maximum navigation time for the following methods and related shortcuts :
2020-12-27 01:31:41 +03:00
* - ` page.goBack([options]) `
* - ` page.goForward([options]) `
* - ` page.goto(url[, options]) `
* - ` page.reload([options]) `
* - ` page.setContent(html[, options]) `
* - ` page.waitForNavigation([options]) `
*
* > * * NOTE * * ` page.setDefaultNavigationTimeout(timeout) ` takes priority over ` page.setDefaultTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` and ` browserContext.setDefaultNavigationTimeout(timeout) ` .
2020-12-27 00:52:05 +03:00
* @param timeout Maximum navigation time in milliseconds
* /
setDefaultNavigationTimeout ( timeout : number ) : void ;
/ * *
* This setting will change the default maximum time for all the methods accepting ` timeout ` option .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` page.setDefaultNavigationTimeout(timeout) ` takes priority over ` page.setDefaultTimeout(timeout) ` .
2020-12-27 00:52:05 +03:00
* @param timeout Maximum time in milliseconds
* /
setDefaultTimeout ( timeout : number ) : void ;
/ * *
* The extra HTTP headers will be sent with every request the page initiates .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * page . setExtraHTTPHeaders does not guarantee the order of headers in the outgoing requests .
2020-12-27 00:52:05 +03:00
* @param headers An object containing additional HTTP headers to be sent with every request . All header values must be strings .
* /
setExtraHTTPHeaders ( headers : { [ key : string ] : string ; } ) : Promise < void > ;
/ * *
* This method expects ` selector ` to point to an input element .
* Sets the value of the file input to these file paths or files . If some of the ` filePaths ` are relative paths , then they are resolved relative to the the current working directory . For empty array , clears the selected files .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param files
* @param options
* /
setInputFiles ( selector : string , files : string | Array < string > | {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} | Array < {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* In the case of multiple pages in a single browser , each page can have its own viewport size . However , ` browser.newContext([options]) ` allows to set viewport size ( and more ) for all pages in the context at once .
* ` page.setViewportSize ` will resize the page . A lot of websites don ' t expect phones to change size , so you should set the viewport size before navigating to the page .
* ` ` ` js
* const page = await browser . newPage ( ) ;
* await page . setViewportSize ( {
* width : 640 ,
* height : 480 ,
* } ) ;
* await page . goto ( 'https://example.com' ) ;
* ` ` `
* @param viewportSize
* /
setViewportSize ( viewportSize : {
/ * *
* page width in pixels . * * required * *
* /
width : number ;
/ * *
* page height in pixels . * * required * *
* /
height : number ;
} ) : Promise < void > ;
/ * *
* This method taps an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . touchscreen to tap the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` page.tap() ` requires that the ` hasTouch ` option of the browser context be set to true .
2020-12-27 00:52:05 +03:00
* Shortcut for main frame ' s ` frame.tap(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
tap ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns ` element.textContent ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
textContent ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < null | string > ;
/ * *
* Returns the page 's title. Shortcut for main frame' s ` frame.title() ` .
* /
title ( ) : Promise < string > ;
touchscreen : Touchscreen ;
/ * *
* Sends a ` keydown ` , ` keypress ` / ` input ` , and ` keyup ` event for each character in the text . ` page.type ` can be used to send fine - grained keyboard events . To fill values in form fields , use ` page.fill(selector, value[, options]) ` .
* To press a special key , like ` Control ` or ` ArrowDown ` , use ` keyboard.press(key[, options]) ` .
* ` ` ` js
* await page . type ( '#mytextarea' , 'Hello' ) ; // Types instantly
* await page . type ( '#mytextarea' , 'World' , { delay : 100 } ) ; // Types slower, like a user
* ` ` `
* Shortcut for main frame ' s ` frame.type(selector, text[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param text A text to type into a focused element .
* @param options
* /
type ( selector : string , text : string , options ? : {
/ * *
* Time to wait between key presses in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method unchecks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Ensure that matched element is a checkbox or a radio input . If not , this method rejects . If the element is already unchecked , this method returns immediately .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now unchecked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* Shortcut for main frame ' s ` frame.uncheck(selector[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
uncheck ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Removes a route created with ` page.route(url, handler) ` . When ` handler ` is not specified , removes all routes for the ` url ` .
* @param url A glob pattern , regex pattern or predicate receiving URL to match while routing .
* @param handler Optional handler function to route the request .
* /
unroute ( url : string | RegExp | ( ( url : URL ) = > boolean ) , handler ? : ( ( route : Route , request : Request ) = > void ) ) : Promise < void > ;
/ * *
* Shortcut for main frame ' s ` frame.url() ` .
* /
url ( ) : string ;
/ * *
* Video object associated with this page .
* /
video ( ) : null | Video ;
viewportSize ( ) : null | {
/ * *
* page width in pixels .
* /
width : number ;
/ * *
* page height in pixels .
* /
height : number ;
} ;
/ * *
* Emitted when the page closes .
* /
waitForEvent ( event : 'close' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
* Emitted when JavaScript within the page calls one of console API methods , e . g . ` console.log ` or ` console.dir ` . Also emitted if the page throws an error or a warning .
* The arguments passed into ` console.log ` appear as arguments on the event handler .
* An example of handling ` console ` event :
* ` ` ` js
* page . on ( 'console' , msg = > {
* for ( let i = 0 ; i < msg . args ( ) . length ; ++ i )
* console . log ( ` ${ i } : ${ msg . args ( ) [ i ] } ` ) ;
* } ) ;
* page . evaluate ( ( ) = > console . log ( 'hello' , 5 , { foo : 'bar' } ) ) ;
* ` ` `
* /
waitForEvent ( event : 'console' , optionsOrPredicate ? : { predicate ? : ( consoleMessage : ConsoleMessage ) = > boolean , timeout? : number } | ( ( consoleMessage : ConsoleMessage ) = > boolean ) ) : Promise < ConsoleMessage > ;
/ * *
* 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 .
* The most common way to deal with crashes is to catch an exception :
* ` ` ` js
* try {
* // Crash might happen during a click.
* await page . click ( 'button' ) ;
* // Or while waiting for an event.
* await page . waitForEvent ( 'popup' ) ;
* } catch ( e ) {
* // When the page crashes, exception message contains 'crash'.
* }
* ` ` `
* However , when manually listening to events , it might be useful to avoid stalling when the page crashes . In this case , handling ` crash ` event helps :
* ` ` ` js
* await new Promise ( ( resolve , reject ) = > {
* page . on ( 'requestfinished' , async request = > {
* if ( await someProcessing ( request ) )
* resolve ( request ) ;
* } ) ;
* page . on ( 'crash' , error = > reject ( error ) ) ;
* } ) ;
* ` ` `
* /
waitForEvent ( event : 'crash' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
* Emitted when a JavaScript dialog appears , such as ` alert ` , ` prompt ` , ` confirm ` or ` beforeunload ` . Playwright can respond to the dialog via ` dialog.accept([promptText]) ` or ` dialog.dismiss() ` methods .
* /
waitForEvent ( event : 'dialog' , optionsOrPredicate ? : { predicate ? : ( dialog : Dialog ) = > boolean , timeout? : number } | ( ( dialog : Dialog ) = > boolean ) ) : Promise < Dialog > ;
/ * *
* Emitted when the JavaScript ` DOMContentLoaded ` event is dispatched .
* /
waitForEvent ( event : 'domcontentloaded' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
* Emitted when attachment download started . User can access basic file operations on downloaded content via the passed Download instance .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'download' , optionsOrPredicate ? : { predicate ? : ( download : Download ) = > boolean , timeout? : number } | ( ( download : Download ) = > boolean ) ) : Promise < Download > ;
/ * *
* Emitted when a file chooser is supposed to appear , such as after clicking the ` <input type=file> ` . Playwright can respond to it via setting the input files using ` fileChooser.setFiles(files[, options]) ` that can be uploaded after that .
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
waitForEvent ( event : 'filechooser' , optionsOrPredicate ? : { predicate ? : ( fileChooser : FileChooser ) = > boolean , timeout? : number } | ( ( fileChooser : FileChooser ) = > boolean ) ) : Promise < FileChooser > ;
/ * *
* Emitted when a frame is attached .
* /
waitForEvent ( event : 'frameattached' , optionsOrPredicate ? : { predicate ? : ( frame : Frame ) = > boolean , timeout? : number } | ( ( frame : Frame ) = > boolean ) ) : Promise < Frame > ;
/ * *
* Emitted when a frame is detached .
* /
waitForEvent ( event : 'framedetached' , optionsOrPredicate ? : { predicate ? : ( frame : Frame ) = > boolean , timeout? : number } | ( ( frame : Frame ) = > boolean ) ) : Promise < Frame > ;
/ * *
* Emitted when a frame is navigated to a new url .
* /
waitForEvent ( event : 'framenavigated' , optionsOrPredicate ? : { predicate ? : ( frame : Frame ) = > boolean , timeout? : number } | ( ( frame : Frame ) = > boolean ) ) : Promise < Frame > ;
/ * *
* Emitted when the JavaScript ` load ` event is dispatched .
* /
waitForEvent ( event : 'load' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
* Emitted when an uncaught exception happens within the page .
* /
waitForEvent ( event : 'pageerror' , optionsOrPredicate ? : { predicate ? : ( error : Error ) = > boolean , timeout? : number } | ( ( error : Error ) = > boolean ) ) : Promise < Error > ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when the page opens a new tab or window . This event is emitted in addition to the ` browserContext.on('page') ` , but only for popups relevant to this page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . evaluate ( ( ) = > window . open ( 'https://example.com' ) ) ,
* ] ) ;
* console . log ( await popup . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'popup' , optionsOrPredicate ? : { predicate ? : ( page : Page ) = > boolean , timeout? : number } | ( ( page : Page ) = > boolean ) ) : Promise < Page > ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when a page issues a request . The [ request ] object is read - only . In order to intercept and mutate requests , see ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'request' , optionsOrPredicate ? : { predicate ? : ( request : Request ) = > boolean , timeout? : number } | ( ( request : Request ) = > boolean ) ) : Promise < Request > ;
/ * *
* Emitted when a request fails , for example by timing out .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` page.on('requestfinished') ` event and not with ` page.on('requestfailed') ` .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'requestfailed' , optionsOrPredicate ? : { predicate ? : ( request : Request ) = > boolean , timeout? : number } | ( ( request : Request ) = > boolean ) ) : Promise < Request > ;
/ * *
* Emitted when a request finishes successfully after downloading the response body . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
* /
waitForEvent ( event : 'requestfinished' , optionsOrPredicate ? : { predicate ? : ( request : Request ) = > boolean , timeout? : number } | ( ( request : Request ) = > boolean ) ) : Promise < Request > ;
/ * *
2020-12-27 01:31:41 +03:00
* Emitted when [ response ] status and headers are received for a request . For a successful response , the sequence of events is ` request ` , ` response ` and ` requestfinished ` .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'response' , optionsOrPredicate ? : { predicate ? : ( response : Response ) = > boolean , timeout? : number } | ( ( response : Response ) = > boolean ) ) : Promise < Response > ;
/ * *
* Emitted when < WebSocket > request is sent .
* /
waitForEvent ( event : 'websocket' , optionsOrPredicate ? : { predicate ? : ( webSocket : WebSocket ) = > boolean , timeout? : number } | ( ( webSocket : WebSocket ) = > boolean ) ) : Promise < WebSocket > ;
/ * *
* Emitted when a dedicated WebWorker is spawned by the page .
* /
waitForEvent ( event : 'worker' , optionsOrPredicate ? : { predicate ? : ( worker : Worker ) = > boolean , timeout? : number } | ( ( worker : Worker ) = > boolean ) ) : Promise < Worker > ;
/ * *
* Returns when the required load state has been reached .
* This resolves when the page reaches a required load state , ` load ` by default . The navigation must have been committed when this method is called . If current document has already reached the required state , resolves immediately .
* ` ` ` js
* await page . click ( 'button' ) ; // Click triggers navigation.
* await page . waitForLoadState ( ) ; // The promise resolves after 'load' event.
* ` ` `
* ` ` ` js
* const [ popup ] = await Promise . all ( [
* page . waitForEvent ( 'popup' ) ,
* page . click ( 'button' ) , // Click triggers a popup.
* ] )
* await popup . waitForLoadState ( 'domcontentloaded' ) ; // The promise resolves after 'domcontentloaded' event.
* console . log ( await popup . title ( ) ) ; // Popup is ready to use.
* ` ` `
* Shortcut for main frame ' s ` frame.waitForLoadState([state, options]) ` .
2020-12-27 01:31:41 +03:00
* @param state Optional load state to wait for , defaults to ` load ` . If the state has been already reached while loading current document , the method resolves immediately . Can be one of : - ` 'load' ` - wait for the ` load ` event to be fired .
* - ` 'domcontentloaded' ` - wait for the ` DOMContentLoaded ` event to be fired .
* - ` 'networkidle' ` - wait until there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* @param options
* /
waitForLoadState ( state ? : "domcontentloaded" | "load" | "networkidle" , options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect . In case of navigation to a different anchor or navigation due to History API usage , the navigation will resolve with ` null ` .
* This resolves when the page navigates to a new URL or reloads . It is useful for when you run code which will indirectly cause the page to navigate . e . g . The click target has an ` onclick ` handler that triggers navigation from a ` setTimeout ` . Consider this example :
* ` ` ` js
* const [ response ] = await Promise . all ( [
* page . waitForNavigation ( ) , // The promise resolves after navigation has finished
* page . click ( 'a.delayed-navigation' ) , // Clicking the link will indirectly cause a navigation
* ] ) ;
* ` ` `
* * * NOTE * * Usage of the History API to change the URL is considered a navigation .
* Shortcut for main frame ' s ` frame.waitForNavigation([options]) ` .
* @param options
* /
waitForNavigation ( options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* A glob pattern , regex pattern or predicate receiving URL to match while waiting for the navigation .
* /
url? : string | RegExp | Function ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* Waits for the matching request and returns it .
* ` ` ` js
* const firstRequest = await page . waitForRequest ( 'http://example.com/resource' ) ;
* const finalRequest = await page . waitForRequest ( request = > request . url ( ) === 'http://example.com' && request . method ( ) === 'GET' ) ;
* return firstRequest . url ( ) ;
* ` ` `
* ` ` ` js
* await page . waitForRequest ( request = > request . url ( ) . searchParams . get ( 'foo' ) === 'bar' && request . url ( ) . searchParams . get ( 'foo2' ) === 'bar2' ) ;
* ` ` `
* @param urlOrPredicate Request URL string , regex or predicate receiving Request object .
* @param options
* /
waitForRequest ( urlOrPredicate : string | RegExp | Function , options ? : {
/ * *
* Maximum wait time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable the timeout . The default value can be changed by using the ` page.setDefaultTimeout(timeout) ` method .
* /
timeout? : number ;
} ) : Promise < Request > ;
/ * *
* Returns the matched response .
* ` ` ` js
* const firstResponse = await page . waitForResponse ( 'https://example.com/resource' ) ;
* const finalResponse = await page . waitForResponse ( response = > response . url ( ) === 'https://example.com' && response . status ( ) === 200 ) ;
* return finalResponse . ok ( ) ;
* ` ` `
* @param urlOrPredicate Request URL string , regex or predicate receiving Response object .
* @param options
* /
waitForResponse ( urlOrPredicate : string | RegExp | ( ( response : Response ) = > boolean ) , options ? : {
/ * *
* Maximum wait time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable the timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < Response > ;
/ * *
* Waits for the given ` timeout ` in milliseconds .
* Note that ` page.waitForTimeout() ` should only be used for debugging . Tests using the timer in production are going to be flaky . Use signals such as network events , selectors becoming visible and others instead .
* ` ` ` js
* // wait for 1 second
* await page . waitForTimeout ( 1000 ) ;
* ` ` `
* Shortcut for main frame ' s ` frame.waitForTimeout(timeout) ` .
* @param timeout A timeout to wait for
* /
waitForTimeout ( timeout : number ) : Promise < void > ;
/ * *
* This method returns all of the dedicated WebWorkers associated with the page .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * This does not contain ServiceWorkers
2020-12-27 00:52:05 +03:00
* /
workers ( ) : Array < Worker > ; }
/ * *
* At every point of time , page exposes its current frame tree via the ` page.mainFrame() ` and ` frame.childFrames() ` methods .
* Frame object ' s lifecycle is controlled by three events , dispatched on the page object :
2020-12-27 01:31:41 +03:00
* - ` page.on('frameattached') ` - fired when the frame gets attached to the page . A Frame can be attached to the page only once .
* - ` page.on('framenavigated') ` - fired when the frame commits navigation to a different URL .
* - ` page.on('framedetached') ` - fired when the frame gets detached from the page . A Frame can be detached from the page only once .
2020-12-27 00:52:05 +03:00
* An example of dumping frame tree :
* ` ` ` js
* const { firefox } = require ( 'playwright' ) ; // Or 'chromium' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await firefox . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://www.google.com/chrome/browser/canary.html' ) ;
* dumpFrameTree ( page . mainFrame ( ) , '' ) ;
* await browser . close ( ) ;
*
* function dumpFrameTree ( frame , indent ) {
* console . log ( indent + frame . url ( ) ) ;
* for ( const child of frame . childFrames ( ) ) {
* dumpFrameTree ( child , indent + ' ' ) ;
* }
* }
* } ) ( ) ;
* ` ` `
* An example of getting text from an iframe element :
* ` ` ` js
* const frame = page . frames ( ) . find ( frame = > frame . name ( ) === 'myframe' ) ;
* const text = await frame . $eval ( '.selector' , element = > element . textContent ) ;
* console . log ( text ) ;
* ` ` `
* /
export interface Frame {
/ * *
* Returns the return value of ` pageFunction `
* If the function passed to the ` frame.evaluate ` returns a Promise , then ` frame.evaluate ` would wait for the promise to resolve and return its value .
* If the function passed to the ` frame.evaluate ` returns a non - Serializable value , then ` frame.evaluate ` returns ` undefined ` . DevTools Protocol also supports transferring some additional values that are not serializable by ` JSON ` : ` -0 ` , ` NaN ` , ` Infinity ` , ` -Infinity ` , and bigint literals .
* ` ` ` js
* const result = await frame . evaluate ( ( [ x , y ] ) = > {
* return Promise . resolve ( x * y ) ;
* } , [ 7 , 8 ] ) ;
* console . log ( result ) ; // prints "56"
* ` ` `
* A string can also be passed in instead of a function .
* ` ` ` js
* console . log ( await frame . evaluate ( '1 + 2' ) ) ; // prints "3"
* ` ` `
* ElementHandle instances can be passed as an argument to the ` frame.evaluate ` :
* ` ` ` js
* const bodyHandle = await frame . $ ( 'body' ) ;
* const html = await frame . evaluate ( ( [ body , suffix ] ) = > body . innerHTML + suffix , [ bodyHandle , 'hello' ] ) ;
* await bodyHandle . dispose ( ) ;
* ` ` `
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluate < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < R > ;
evaluate < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns the return value of ` pageFunction ` as in - page object ( JSHandle ) .
* The only difference between ` frame.evaluate ` and ` frame.evaluateHandle ` is that ` frame.evaluateHandle ` returns in - page object ( JSHandle ) .
* If the function , passed to the ` frame.evaluateHandle ` , returns a Promise , then ` frame.evaluateHandle ` would wait for the promise to resolve and return its value .
* ` ` ` js
* const aWindowHandle = await frame . evaluateHandle ( ( ) = > Promise . resolve ( window ) ) ;
* aWindowHandle ; // Handle for the window object.
* ` ` `
* A string can also be passed in instead of a function .
* ` ` ` js
* const aHandle = await frame . evaluateHandle ( 'document' ) ; // Handle for the 'document'.
* ` ` `
* JSHandle instances can be passed as an argument to the ` frame.evaluateHandle ` :
* ` ` ` js
* const aHandle = await frame . evaluateHandle ( ( ) = > document . body ) ;
* const resultHandle = await frame . evaluateHandle ( ( [ body , suffix ] ) = > body . innerHTML + suffix , [ aHandle , 'hello' ] ) ;
* console . log ( await resultHandle . jsonValue ( ) ) ;
* await resultHandle . dispose ( ) ;
* ` ` `
* @param pageFunction Function to be evaluated in the page context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluateHandle < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < SmartHandle < R > > ;
evaluateHandle < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < SmartHandle < R > > ;
/ * *
* Returns the ElementHandle pointing to the frame element .
* The method finds an element matching the specified selector within the frame . See Working with selectors for more details . If no elements match the selector , returns ` null ` .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > | null > ;
$ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > | null > ;
/ * *
* Returns the ElementHandles pointing to the frame elements .
* The method finds all elements matching the specified selector within the frame . See Working with selectors for more details . If no elements match the selector , returns empty array .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ $ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > [ ] > ;
$ $ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > [ ] > ;
/ * *
* Returns the return value of ` pageFunction `
* The method finds an element matching the specified selector within the frame and passes it as a first argument to ` pageFunction ` . See Working with selectors for more details . If no elements match the selector , the method throws an error .
* If ` pageFunction ` returns a Promise , then ` frame. $ eval ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const searchValue = await frame . $eval ( '#search' , el = > el . value ) ;
* const preloadHref = await frame . $eval ( 'link[rel=preload]' , el = > el . href ) ;
* const html = await frame . $eval ( '.main-container' , ( e , suffix ) = > e . outerHTML + suffix , 'hello' ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , void , R > , arg? : any ) : Promise < R > ;
$eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns the return value of ` pageFunction `
* The method finds all elements matching the specified selector within the frame and passes an array of matched elements as a first argument to ` pageFunction ` . See Working with selectors for more details .
* If ` pageFunction ` returns a Promise , then ` frame. $ $ eval ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const divsCounts = await frame . $ $eval ( 'div' , ( divs , min ) = > divs . length >= min , 10 ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$ $eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , void , R > , arg? : any ) : Promise < R > ;
$ $eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns when the ` pageFunction ` returns a truthy value , returns that value .
* The ` waitForFunction ` can be used to observe viewport size change :
* ` ` ` js
* const { firefox } = require ( 'playwright' ) ; // Or 'chromium' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await firefox . launch ( ) ;
* const page = await browser . newPage ( ) ;
* const watchDog = page . mainFrame ( ) . waitForFunction ( 'window.innerWidth < 100' ) ;
* page . setViewportSize ( { width : 50 , height : 50 } ) ;
* await watchDog ;
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* To pass an argument to the predicate of ` frame.waitForFunction ` function :
* ` ` ` js
* const selector = '.foo' ;
* await frame . waitForFunction ( selector = > ! ! document . querySelector ( selector ) , selector ) ;
* ` ` `
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* @param options
* /
waitForFunction < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg , options? : PageWaitForFunctionOptions ) : Promise < SmartHandle < R > > ;
waitForFunction < R > ( pageFunction : PageFunction < void , R > , arg? : any , options? : PageWaitForFunctionOptions ) : Promise < SmartHandle < R > > ;
/ * *
* Returns when element specified by selector satisfies ` state ` option . Returns ` null ` if waiting for ` hidden ` or ` detached ` .
* Wait for the ` selector ` to satisfy ` state ` option ( either appear / disappear from dom , or become visible / hidden ) . If at the moment of calling the method ` selector ` already satisfies the condition , the method will return immediately . If the selector doesn ' t satisfy the condition for the ` timeout ` milliseconds , the function will throw .
* This method works across navigations :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
*
* ( async ( ) = > {
* const browser = await webkit . launch ( ) ;
* const page = await browser . newPage ( ) ;
* let currentURL ;
* page . mainFrame ( )
* . waitForSelector ( 'img' )
* . then ( ( ) = > console . log ( 'First URL with image: ' + currentURL ) ) ;
* for ( currentURL of [ 'https://example.com' , 'https://google.com' , 'https://bbc.com' ] ) {
* await page . goto ( currentURL ) ;
* }
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param options
* /
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options? : PageWaitForSelectorOptionsNotHidden ) : Promise < ElementHandleForTag < K > > ;
waitForSelector ( selector : string , options? : PageWaitForSelectorOptionsNotHidden ) : Promise < ElementHandle < SVGElement | HTMLElement > > ;
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options : PageWaitForSelectorOptions ) : Promise < ElementHandleForTag < K > | null > ;
waitForSelector ( selector : string , options : PageWaitForSelectorOptions ) : Promise < null | ElementHandle < SVGElement | HTMLElement > > ;
/ * *
* Returns the added tag when the script ' s onload fires or when the script content was injected into frame .
* Adds a ` <script> ` tag into the page with the desired url or content .
* @param params
* /
addScriptTag ( params : {
/ * *
* URL of a script to be added .
* /
url? : string ;
/ * *
* Path to the JavaScript file to be injected into frame . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw JavaScript content to be injected into frame .
* /
content? : string ;
/ * *
* Script type . Use 'module' in order to load a Javascript ES6 module . See script for more details .
* /
type ? : string ;
} ) : Promise < ElementHandle > ;
/ * *
* Returns the added tag when the stylesheet ' s onload fires or when the CSS content was injected into frame .
* Adds a ` <link rel="stylesheet"> ` tag into the page with the desired url or a ` <style type="text/css"> ` tag with the content .
* @param params
* /
addStyleTag ( params : {
/ * *
* URL of the ` <link> ` tag .
* /
url? : string ;
/ * *
* Path to the CSS file to be injected into frame . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw CSS content to be injected into frame .
* /
content? : string ;
} ) : Promise < ElementHandle > ;
/ * *
* This method checks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Ensure that matched element is a checkbox or a radio input . If not , this method rejects . If the element is already checked , this method returns immediately .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now checked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
check ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
childFrames ( ) : Array < Frame > ;
/ * *
* This method clicks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
click ( selector : string , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Gets the full HTML contents of the frame , including the doctype .
* /
content ( ) : Promise < string > ;
/ * *
* This method double clicks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to double click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set . Note that if the first click of the ` dblclick() ` triggers a navigation event , this method will reject .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` frame.dblclick() ` dispatches two ` click ` events and a single ` dblclick ` event .
2020-12-27 00:52:05 +03:00
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
dblclick ( selector : string , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* The snippet below dispatches the ` click ` event on the element . Regardless of the visibility state of the elment , ` click ` is dispatched . This is equivalend to calling element . click ( ) .
* ` ` ` js
* await frame . dispatchEvent ( 'button#submit' , 'click' ) ;
* ` ` `
* Under the hood , it creates an instance of an event based on the given ` type ` , initializes it with ` eventInit ` properties and dispatches it on the element . Events are ` composed ` , ` cancelable ` and bubble by default .
* Since ` eventInit ` is event - specific , please refer to the events documentation for the lists of initial properties :
2020-12-27 01:31:41 +03:00
* - DragEvent
* - FocusEvent
* - KeyboardEvent
* - MouseEvent
* - PointerEvent
* - TouchEvent
* - Event
2020-12-27 00:52:05 +03:00
* You can also specify ` JSHandle ` as the property value if you want live objects to be passed into the event :
* ` ` ` js
* // Note you can only create DataTransfer in Chromium and Firefox
* const dataTransfer = await frame . evaluateHandle ( ( ) = > new DataTransfer ( ) ) ;
* await frame . dispatchEvent ( '#source' , 'dragstart' , { dataTransfer } ) ;
* ` ` `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param type DOM event type : ` "click" ` , ` "dragstart" ` , etc .
* @param eventInit Optional event - specific initialization properties .
* @param options
* /
dispatchEvent ( selector : string , type : string , eventInit? : EvaluationArgument , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method waits for an element matching ` selector ` , waits for actionability checks , focuses the element , fills it and triggers an ` input ` event after filling . If the element matching ` selector ` is not an ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element , this method throws an error . Note that you can pass an empty string to clear the input field .
* To send fine - grained keyboard events , use ` frame.type(selector, text[, options]) ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param value Value to fill for the ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element .
* @param options
* /
fill ( selector : string , value : string , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method fetches an element with ` selector ` and focuses it . If there ' s no element matching ` selector ` , the method waits until a matching element appears in the DOM .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
focus ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the ` frame ` or ` iframe ` element handle which corresponds to this frame .
* This is an inverse of ` elementHandle.contentFrame() ` . Note that returned handle actually belongs to the parent frame .
* This method throws an error if the frame has been detached before ` frameElement() ` returns .
* ` ` ` js
* const frameElement = await frame . frameElement ( ) ;
* const contentFrame = await frameElement . contentFrame ( ) ;
* console . log ( frame === contentFrame ) ; // -> true
* ` ` `
* /
frameElement ( ) : Promise < ElementHandle > ;
/ * *
* Returns element attribute value .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param name Attribute name to get the value for .
* @param options
* /
getAttribute ( selector : string , name : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < null | string > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect .
* ` frame.goto ` will throw an error if :
2020-12-27 01:31:41 +03:00
* - there ' s an SSL error ( e . g . in case of self - signed certificates ) .
* - target URL is invalid .
* - the ` timeout ` is exceeded during navigation .
* - the remote server does not respond or is unreachable .
* - the main resource failed to load .
2020-12-27 00:52:05 +03:00
* ` frame.goto ` will not throw an error when any valid HTTP status code is returned by the remote server , including 404 "Not Found" and 500 "Internal Server Error" . The status code for such responses can be retrieved by calling ` response.status() ` .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` frame.goto ` either throws an error or returns a main resource response . The only exceptions are navigation to ` about:blank ` or navigation to the same URL with a different hash , which would succeed and return ` null ` .
*
* > * * NOTE * * Headless mode doesn ' t support navigation to a PDF document . See the upstream issue .
2020-12-27 00:52:05 +03:00
* @param url URL to navigate frame to . The url should include scheme , e . g . ` https:// ` .
* @param options
* /
goto ( url : string , options ? : {
/ * *
* Referer header value . If provided it will take preference over the referer header value set by ` page.setExtraHTTPHeaders(headers) ` .
* /
referer? : string ;
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* This method hovers over an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to hover over the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
hover ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns ` element.innerHTML ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
innerHTML ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < string > ;
/ * *
* Returns ` element.innerText ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
innerText ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < string > ;
/ * *
* Returns ` true ` if the frame has been detached , or ` false ` otherwise .
* /
isDetached ( ) : boolean ;
/ * *
* Returns frame ' s name attribute as specified in the tag .
* If the name is empty , returns the id attribute instead .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * This value is calculated once when the frame is created , and will not update if the attribute is changed later .
2020-12-27 00:52:05 +03:00
* /
name ( ) : string ;
/ * *
* Returns the page containing this frame .
* /
page ( ) : Page ;
/ * *
* Parent frame , if any . Detached frames and main frames return ` null ` .
* /
parentFrame ( ) : null | Frame ;
/ * *
* ` key ` can specify the intended keyboardEvent . key value or a single character to generate the text for . A superset of the ` key ` values can be found here . Examples of the keys are :
* ` F1 ` - ` F12 ` , ` Digit0 ` - ` Digit9 ` , ` KeyA ` - ` KeyZ ` , ` Backquote ` , ` Minus ` , ` Equal ` , ` Backslash ` , ` Backspace ` , ` Tab ` , ` Delete ` , ` Escape ` , ` ArrowDown ` , ` End ` , ` Enter ` , ` Home ` , ` Insert ` , ` PageDown ` , ` PageUp ` , ` ArrowRight ` , ` ArrowUp ` , etc .
2020-12-27 01:31:41 +03:00
* Following modification shortcuts are also supported : ` Shift ` , ` Control ` , ` Alt ` , ` Meta ` , ` ShiftLeft ` .
2020-12-27 00:52:05 +03:00
* Holding down ` Shift ` will type the text that corresponds to the ` key ` in the upper case .
* If ` key ` is a single character , it is case - sensitive , so the values ` a ` and ` A ` will generate different respective texts .
* Shortcuts such as ` key: "Control+o" ` or ` key: "Control+Shift+T" ` are supported as well . When speficied with the modifier , modifier is pressed and being held while the subsequent key is being pressed .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* @param options
* /
press ( selector : string , key : string , options ? : {
/ * *
* Time to wait between ` keydown ` and ` keyup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the array of option values that have been successfully selected .
* Triggers a ` change ` and ` input ` event once all the provided options have been selected . If there ' s no ` <select> ` element matching ` selector ` , the method throws an error .
* ` ` ` js
* // single selection matching the value
* frame . selectOption ( 'select#colors' , 'blue' ) ;
*
* // single selection matching both the value and the label
* frame . selectOption ( 'select#colors' , { label : 'Blue' } ) ;
*
* // multiple selection
* frame . selectOption ( 'select#colors' , 'red' , 'green' , 'blue' ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param values Options to select . If the ` <select> ` has the ` multiple ` attribute , all matching options are selected , otherwise only the first option matching one of the passed options is selected . String values are equivalent to ` {value:'string'} ` . Option is considered matching if all specified properties match .
* @param options
* /
selectOption ( selector : string , values : null | string | ElementHandle | Array < string > | {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} | Array < ElementHandle > | Array < {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < Array < string > > ;
/ * *
* @param html HTML markup to assign to the page .
* @param options
* /
setContent ( html : string , options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < void > ;
/ * *
* This method expects ` selector ` to point to an input element .
* Sets the value of the file input to these file paths or files . If some of the ` filePaths ` are relative paths , then they are resolved relative to the the current working directory . For empty array , clears the selected files .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param files
* @param options
* /
setInputFiles ( selector : string , files : string | Array < string > | {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} | Array < {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method taps an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . touchscreen to tap the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` frame.tap() ` requires that the ` hasTouch ` option of the browser context be set to true .
2020-12-27 00:52:05 +03:00
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
tap ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns ` element.textContent ` .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
textContent ( selector : string , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < null | string > ;
/ * *
* Returns the page title .
* /
title ( ) : Promise < string > ;
/ * *
* Sends a ` keydown ` , ` keypress ` / ` input ` , and ` keyup ` event for each character in the text . ` frame.type ` can be used to send fine - grained keyboard events . To fill values in form fields , use ` frame.fill(selector, value[, options]) ` .
* To press a special key , like ` Control ` or ` ArrowDown ` , use ` keyboard.press(key[, options]) ` .
* ` ` ` js
* await frame . type ( '#mytextarea' , 'Hello' ) ; // Types instantly
* await frame . type ( '#mytextarea' , 'World' , { delay : 100 } ) ; // Types slower, like a user
* ` ` `
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param text A text to type into a focused element .
* @param options
* /
type ( selector : string , text : string , options ? : {
/ * *
* Time to wait between key presses in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method checks an element matching ` selector ` by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Find an element match matching ` selector ` . If there is none , wait until a matching element is attached to the DOM .
* - Ensure that matched element is a checkbox or a radio input . If not , this method rejects . If the element is already unchecked , this method returns immediately .
* - Wait for actionability checks on the matched element , unless ` force ` option is set . If the element is detached during the checks , the whole action is retried .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now unchecked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param selector A selector to search for element . If there are multiple elements satisfying the selector , the first will be used . See working with selectors for more details .
* @param options
* /
uncheck ( selector : string , options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns frame ' s url .
* /
url ( ) : string ;
/ * *
* Waits for the required load state to be reached .
* This returns when the frame reaches a required load state , ` load ` by default . The navigation must have been committed when this method is called . If current document has already reached the required state , resolves immediately .
* ` ` ` js
* await frame . click ( 'button' ) ; // Click triggers navigation.
* await frame . waitForLoadState ( ) ; // Waits for 'load' state by default.
* ` ` `
2020-12-27 01:31:41 +03:00
* @param state Optional load state to wait for , defaults to ` load ` . If the state has been already reached while loading current document , the method returns immediately . Can be one of : - ` 'load' ` - wait for the ` load ` event to be fired .
* - ` 'domcontentloaded' ` - wait for the ` DOMContentLoaded ` event to be fired .
* - ` 'networkidle' ` - wait until there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* @param options
* /
waitForLoadState ( state ? : "domcontentloaded" | "load" | "networkidle" , options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the main resource response . In case of multiple redirects , the navigation will resolve with the response of the last redirect . In case of navigation to a different anchor or navigation due to History API usage , the navigation will resolve with ` null ` .
* This method waits for the frame to navigate to a new URL . It is useful for when you run code which will indirectly cause the frame to navigate . Consider this example :
* ` ` ` js
* const [ response ] = await Promise . all ( [
* frame . waitForNavigation ( ) , // Wait for the navigation to finish
* frame . click ( 'a.my-link' ) , // Clicking the link will indirectly cause a navigation
* ] ) ;
* ` ` `
* * * NOTE * * Usage of the History API to change the URL is considered a navigation .
* @param options
* /
waitForNavigation ( options ? : {
/ * *
* Maximum operation time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultNavigationTimeout(timeout) ` , ` browserContext.setDefaultTimeout(timeout) ` , ` page.setDefaultNavigationTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* URL string , URL regex pattern or predicate receiving URL to match while waiting for the navigation .
* /
url? : string | RegExp | Function ;
/ * *
* When to consider operation succeeded , defaults to ` load ` . Events can be either :
2020-12-27 01:31:41 +03:00
* - ` 'domcontentloaded' ` - consider operation to be finished when the ` DOMContentLoaded ` event is fired .
* - ` 'load' ` - consider operation to be finished when the ` load ` event is fired .
* - ` 'networkidle' ` - consider operation to be finished when there are no network connections for at least ` 500 ` ms .
2020-12-27 00:52:05 +03:00
* /
waitUntil ? : "domcontentloaded" | "load" | "networkidle" ;
} ) : Promise < null | Response > ;
/ * *
* Waits for the given ` timeout ` in milliseconds .
* Note that ` frame.waitForTimeout() ` should only be used for debugging . Tests using the timer in production are going to be flaky . Use signals such as network events , selectors becoming visible and others instead .
* @param timeout A timeout to wait for
* /
waitForTimeout ( timeout : number ) : Promise < void > ; }
/ * *
* BrowserContexts provide a way to operate multiple independent browser sessions .
* If a page opens another page , e . g . with a ` window.open ` call , the popup will belong to the parent page ' s browser context .
* Playwright allows creation of "incognito" browser contexts with ` browser.newContext() ` method . "Incognito" browser contexts don ' t write any browsing data to disk .
* ` ` ` js
* // Create a new incognito browser context
* const context = await browser . newContext ( ) ;
* // Create a new page inside context.
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* // Dispose context once it's no longer needed.
* await context . close ( ) ;
* ` ` `
* /
export interface BrowserContext {
/ * *
* The method adds a function called ` name ` on the ` window ` object of every frame in every page in the context . When called , the function executes ` playwrightBinding ` and returns a Promise which resolves to the return value of ` playwrightBinding ` . If the ` playwrightBinding ` returns a Promise , it will be awaited .
* The first argument of the ` playwrightBinding ` function contains information about the caller : ` { browserContext: BrowserContext, page: Page, frame: Frame } ` .
* See ` page.exposeBinding(name, playwrightBinding[, options]) ` for page - only version .
* An example of exposing page URL to all frames in all pages in the context :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
*
* ( async ( ) = > {
* const browser = await webkit . launch ( { headless : false } ) ;
* const context = await browser . newContext ( ) ;
* await context . exposeBinding ( 'pageURL' , ( { page } ) = > page . url ( ) ) ;
* const page = await context . newPage ( ) ;
* await page . setContent ( `
* < script >
* async function onClick() {
* document . querySelector ( 'div' ) . textContent = await window . pageURL ( ) ;
* }
* < / script >
* < button onclick = "onClick()" > Click me < / button >
* < div > < / div >
* ` );
* await page . click ( 'button' ) ;
* } ) ( ) ;
* ` ` `
* An example of passing an element handle :
* ` ` ` js
* await context . exposeBinding ( 'clicked' , async ( source , element ) = > {
* console . log ( await element . textContent ( ) ) ;
* } , { handle : true } ) ;
* await page . setContent ( `
* < script >
* document . addEventListener ( 'click' , event = > window . clicked ( event . target ) ) ;
* < / script >
* < div > Click me < / div >
* < div > Or click me < / div >
* ` );
* ` ` `
* @param name Name of the function on the window object .
* @param playwrightBinding Callback function that will be called in the Playwright ' s context .
* @param options
* /
exposeBinding ( name : string , playwrightBinding : ( source : BindingSource , arg : JSHandle ) = > any , options : { handle : true } ) : Promise < void > ;
exposeBinding ( name : string , playwrightBinding : ( source : BindingSource , . . . args : any [ ] ) = > any , options ? : { handle? : boolean } ) : Promise < void > ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
on ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
once ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
addListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
removeListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
off ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Adds cookies into this browser context . All pages within this context will have these cookies installed . Cookies can be obtained via ` browserContext.cookies([urls]) ` .
* ` ` ` js
* await browserContext . addCookies ( [ cookieObject1 , cookieObject2 ] ) ;
* ` ` `
* @param cookies
* /
addCookies ( cookies : Array < {
/ * *
* * * required * *
* /
name : string ;
/ * *
* * * required * *
* /
value : string ;
/ * *
2020-12-27 01:31:41 +03:00
* either url or domain / path are required .
2020-12-27 00:52:05 +03:00
* /
url? : string ;
/ * *
2020-12-27 01:31:41 +03:00
* either url or domain / path are required Optional .
2020-12-27 00:52:05 +03:00
* /
domain? : string ;
/ * *
2020-12-27 01:31:41 +03:00
* either url or domain / path are required Optional .
2020-12-27 00:52:05 +03:00
* /
path? : string ;
/ * *
* Unix time in seconds .
* /
expires? : number ;
2020-12-27 01:31:41 +03:00
/ * *
* Optional .
* /
2020-12-27 00:52:05 +03:00
httpOnly? : boolean ;
2020-12-27 01:31:41 +03:00
/ * *
* Optional .
* /
2020-12-27 00:52:05 +03:00
secure? : boolean ;
2020-12-27 01:31:41 +03:00
/ * *
* Optional .
* /
2020-12-27 00:52:05 +03:00
sameSite ? : "Lax" | "None" | "Strict" ;
} > ) : Promise < void > ;
/ * *
* Adds a script which would be evaluated in one of the following scenarios :
2020-12-27 01:31:41 +03:00
* - Whenever a page is created in the browser context or is navigated .
* - Whenever a child frame is attached or navigated in any page in the browser context . In this case , the script is evaluated in the context of the newly attached frame .
2020-12-27 00:52:05 +03:00
* The script is evaluated after the document was created but before any of its scripts were run . This is useful to amend the JavaScript environment , e . g . to seed ` Math.random ` .
* An example of overriding ` Math.random ` before the page loads :
* ` ` ` js
* // preload.js
* Math . random = ( ) = > 42 ;
* ` ` `
* ` ` ` js
* // In your playwright script, assuming the preload.js file is in same directory.
* await browserContext . addInitScript ( {
* path : 'preload.js'
* } ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * The order of evaluation of multiple scripts installed via ` browserContext.addInitScript(script[, arg]) ` and ` page.addInitScript(script[, arg]) ` is not defined .
2020-12-27 00:52:05 +03:00
* @param script Script to be evaluated in all pages in the browser context .
* @param arg Optional argument to pass to ` script ` ( only supported when passing a function ) .
* /
addInitScript ( script : Function | string | {
/ * *
* Path to the JavaScript file . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw script content .
* /
content? : string ;
} , arg? : Serializable ) : Promise < void > ;
/ * *
* Returns the browser instance of the context . If it was launched as a persistent context null gets returned .
* /
browser ( ) : null | Browser ;
/ * *
* Clears context cookies .
* /
clearCookies ( ) : Promise < void > ;
/ * *
* Clears all permission overrides for the browser context .
* ` ` ` js
* const context = await browser . newContext ( ) ;
* await context . grantPermissions ( [ 'clipboard-read' ] ) ;
* // do stuff ..
* context . clearPermissions ( ) ;
* ` ` `
* /
clearPermissions ( ) : Promise < void > ;
/ * *
* Closes the browser context . All the pages that belong to the browser context will be closed .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * the default browser context cannot be closed .
2020-12-27 00:52:05 +03:00
* /
close ( ) : Promise < void > ;
/ * *
* If no URLs are specified , this method returns all cookies . If URLs are specified , only cookies that affect those URLs are returned .
* @param urls Optional list of URLs .
* /
cookies ( urls? : string | Array < string > ) : Promise < Array < Cookie > > ;
/ * *
* The method adds a function called ` name ` on the ` window ` object of every frame in every page in the context . When called , the function executes ` playwrightFunction ` and returns a Promise which resolves to the return value of ` playwrightFunction ` .
* If the ` playwrightFunction ` returns a Promise , it will be awaited .
* See ` page.exposeFunction(name, playwrightFunction) ` for page - only version .
* An example of adding an ` md5 ` function to all pages in the context :
* ` ` ` js
* const { webkit } = require ( 'playwright' ) ; // Or 'chromium' or 'firefox'.
* const crypto = require ( 'crypto' ) ;
*
* ( async ( ) = > {
* const browser = await webkit . launch ( { headless : false } ) ;
* const context = await browser . newContext ( ) ;
* await context . exposeFunction ( 'md5' , text = > crypto . createHash ( 'md5' ) . update ( text ) . digest ( 'hex' ) ) ;
* const page = await context . newPage ( ) ;
* await page . setContent ( `
* < script >
* async function onClick() {
* document . querySelector ( 'div' ) . textContent = await window . md5 ( 'PLAYWRIGHT' ) ;
* }
* < / script >
* < button onclick = "onClick()" > Click me < / button >
* < div > < / div >
* ` );
* await page . click ( 'button' ) ;
* } ) ( ) ;
* ` ` `
* @param name Name of the function on the window object .
* @param playwrightFunction Callback function that will be called in the Playwright ' s context .
* /
exposeFunction ( name : string , playwrightFunction : Function ) : Promise < void > ;
/ * *
* Grants specified permissions to the browser context . Only grants corresponding permissions to the given origin if specified .
2020-12-27 01:31:41 +03:00
* @param permissions A permission or an array of permissions to grant . Permissions can be one of the following values : - ` 'geolocation' `
* - ` 'midi' `
* - ` 'midi-sysex' ` ( system - exclusive midi )
* - ` 'notifications' `
* - ` 'push' `
* - ` 'camera' `
* - ` 'microphone' `
* - ` 'background-sync' `
* - ` 'ambient-light-sensor' `
* - ` 'accelerometer' `
* - ` 'gyroscope' `
* - ` 'magnetometer' `
* - ` 'accessibility-events' `
* - ` 'clipboard-read' `
* - ` 'clipboard-write' `
* - ` 'payment-handler' `
2020-12-27 00:52:05 +03:00
* @param options
* /
grantPermissions ( permissions : Array < string > , options ? : {
/ * *
* The origin to grant permissions to , e . g . "https://example.com" .
* /
origin? : string ;
} ) : Promise < void > ;
/ * *
* Creates a new page in the browser context .
* /
newPage ( ) : Promise < Page > ;
/ * *
* Returns all open pages in the context . Non visible pages , such as ` "background_page" ` , will not be listed here . You can find them using ` chromiumBrowserContext.backgroundPages() ` .
* /
pages ( ) : Array < Page > ;
/ * *
* Routing provides the capability to modify network requests that are made by any page in the browser context . Once route is enabled , every request matching the url pattern will stall unless it ' s continued , fulfilled or aborted .
* An example of a naïve handler that aborts all image requests :
* ` ` ` js
* const context = await browser . newContext ( ) ;
* await context . route ( '**\/*.{png,jpg,jpeg}' , route = > route . abort ( ) ) ;
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* await browser . close ( ) ;
* ` ` `
* or the same snippet using a regex pattern instead :
* ` ` ` js
* const context = await browser . newContext ( ) ;
* await context . route ( /(\.png$)|(\.jpg$)/ , route = > route . abort ( ) ) ;
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* await browser . close ( ) ;
* ` ` `
* Page routes ( set up with ` page.route(url, handler) ` ) take precedence over browser context routes when request matches both handlers .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Enabling routing disables http cache .
2020-12-27 00:52:05 +03:00
* @param url A glob pattern , regex pattern or predicate receiving URL to match while routing .
* @param handler handler function to route the request .
* /
route ( url : string | RegExp | ( ( url : URL ) = > boolean ) , handler : ( ( route : Route , request : Request ) = > void ) ) : Promise < void > ;
/ * *
* This setting will change the default maximum navigation time for the following methods and related shortcuts :
2020-12-27 01:31:41 +03:00
* - ` page.goBack([options]) `
* - ` page.goForward([options]) `
* - ` page.goto(url[, options]) `
* - ` page.reload([options]) `
* - ` page.setContent(html[, options]) `
* - ` page.waitForNavigation([options]) `
*
* > * * NOTE * * ` page.setDefaultNavigationTimeout(timeout) ` and ` page.setDefaultTimeout(timeout) ` take priority over ` browserContext.setDefaultNavigationTimeout(timeout) ` .
2020-12-27 00:52:05 +03:00
* @param timeout Maximum navigation time in milliseconds
* /
setDefaultNavigationTimeout ( timeout : number ) : void ;
/ * *
* This setting will change the default maximum time for all the methods accepting ` timeout ` option .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` page.setDefaultNavigationTimeout(timeout) ` , ` page.setDefaultTimeout(timeout) ` and ` browserContext.setDefaultNavigationTimeout(timeout) ` take priority over ` browserContext.setDefaultTimeout(timeout) ` .
2020-12-27 00:52:05 +03:00
* @param timeout Maximum time in milliseconds
* /
setDefaultTimeout ( timeout : number ) : void ;
/ * *
* The extra HTTP headers will be sent with every request initiated by any page in the context . These headers are merged with page - specific extra HTTP headers set with ` page.setExtraHTTPHeaders(headers) ` . If page overrides a particular header , page - specific header value will be used instead of the browser context header value .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` browserContext.setExtraHTTPHeaders ` does not guarantee the order of headers in the outgoing requests .
2020-12-27 00:52:05 +03:00
* @param headers An object containing additional HTTP headers to be sent with every request . All header values must be strings .
* /
setExtraHTTPHeaders ( headers : { [ key : string ] : string ; } ) : Promise < void > ;
/ * *
* Sets the context ' s geolocation . Passing ` null ` or ` undefined ` emulates position unavailable .
* ` ` ` js
* await browserContext . setGeolocation ( { latitude : 59.95 , longitude : 30.31667 } ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Consider using ` browserContext.grantPermissions(permissions[, options]) ` to grant permissions for the browser context pages to read its geolocation .
2020-12-27 00:52:05 +03:00
* @param geolocation
* /
setGeolocation ( geolocation : null | {
/ * *
* Latitude between - 90 and 90 . * * required * *
* /
latitude : number ;
/ * *
* Longitude between - 180 and 180 . * * required * *
* /
longitude : number ;
/ * *
* Non - negative accuracy value . Defaults to ` 0 ` .
* /
accuracy? : number ;
} ) : Promise < void > ;
/ * *
* Provide credentials for HTTP authentication .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browsers may cache credentials after successful authentication . Passing different credentials or passing ` null ` to disable authentication will be unreliable . To remove or replace credentials , create a new browser context instead .
2020-12-27 00:52:05 +03:00
* @param httpCredentials
* /
setHTTPCredentials ( httpCredentials : null | {
/ * *
* * * required * *
* /
username : string ;
/ * *
* * * required * *
* /
password : string ;
} ) : Promise < void > ;
/ * *
* @param offline Whether to emulate network being offline for the browser context .
* /
setOffline ( offline : boolean ) : Promise < void > ;
/ * *
* Returns storage state for this browser context , contains current cookies and local storage snapshot .
* @param options
* /
storageState ( options ? : {
/ * *
* The file path to save the storage state to . If ` path ` is a relative path , then it is resolved relative to current working directory . If no path is provided , storage state is still returned , but won ' t be saved to the disk .
* /
path? : string ;
} ) : Promise < {
cookies : Array < {
name : string ;
value : string ;
domain : string ;
path : string ;
/ * *
* Unix time in seconds .
* /
expires : number ;
httpOnly : boolean ;
secure : boolean ;
sameSite : "Lax" | "None" | "Strict" ;
} > ;
origins : Array < {
origin : string ;
localStorage : Array < {
name : string ;
value : string ;
} > ;
} > ;
} > ;
/ * *
* Removes a route created with ` browserContext.route(url, handler) ` . When ` handler ` is not specified , removes all routes for the ` url ` .
* @param url A glob pattern , regex pattern or predicate receiving URL used to register a routing with ` browserContext.route(url, handler) ` .
* @param handler Optional handler function used to register a routing with ` browserContext.route(url, handler) ` .
* /
unroute ( url : string | RegExp | ( ( url : URL ) = > boolean ) , handler ? : ( ( route : Route , request : Request ) = > void ) ) : Promise < void > ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
waitForEvent ( event : 'close' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'page' , optionsOrPredicate ? : { predicate ? : ( page : Page ) = > boolean , timeout? : number } | ( ( page : Page ) = > boolean ) ) : Promise < Page > ;
}
/ * *
* The Worker class represents a WebWorker . ` worker ` event is emitted on the page object to signal a worker creation . ` close ` event is emitted on the worker object when the worker is gone .
* ` ` ` js
* page . on ( 'worker' , worker = > {
* console . log ( 'Worker created: ' + worker . url ( ) ) ;
* worker . on ( 'close' , worker = > console . log ( 'Worker destroyed: ' + worker . url ( ) ) ) ;
* } ) ;
*
* console . log ( 'Current workers:' ) ;
* for ( const worker of page . workers ( ) )
* console . log ( ' ' + worker . url ( ) ) ;
* ` ` `
* /
export interface Worker {
/ * *
* Returns the return value of ` pageFunction `
* If the function passed to the ` worker.evaluate ` returns a Promise , then ` worker.evaluate ` would wait for the promise to resolve and return its value .
* If the function passed to the ` worker.evaluate ` returns a non - Serializable value , then ` worker.evaluate ` returns ` undefined ` . DevTools Protocol also supports transferring some additional values that are not serializable by ` JSON ` : ` -0 ` , ` NaN ` , ` Infinity ` , ` -Infinity ` , and bigint literals .
* @param pageFunction Function to be evaluated in the worker context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluate < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < R > ;
evaluate < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns the return value of ` pageFunction ` as in - page object ( JSHandle ) .
* The only difference between ` worker.evaluate ` and ` worker.evaluateHandle ` is that ` worker.evaluateHandle ` returns in - page object ( JSHandle ) .
* If the function passed to the ` worker.evaluateHandle ` returns a Promise , then ` worker.evaluateHandle ` would wait for the promise to resolve and return its value .
* @param pageFunction Function to be evaluated in the page context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluateHandle < R , Arg > ( pageFunction : PageFunction < Arg , R > , arg : Arg ) : Promise < SmartHandle < R > > ;
evaluateHandle < R > ( pageFunction : PageFunction < void , R > , arg? : any ) : Promise < SmartHandle < R > > ;
/ * *
* Emitted when this dedicated WebWorker is terminated .
* /
on ( event : 'close' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when this dedicated WebWorker is terminated .
* /
once ( event : 'close' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when this dedicated WebWorker is terminated .
* /
addListener ( event : 'close' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when this dedicated WebWorker is terminated .
* /
removeListener ( event : 'close' , listener : ( worker : Worker ) = > void ) : this ;
/ * *
* Emitted when this dedicated WebWorker is terminated .
* /
off ( event : 'close' , listener : ( worker : Worker ) = > void ) : this ;
url ( ) : string ; }
/ * *
* JSHandle represents an in - page JavaScript object . JSHandles can be created with the ` page.evaluateHandle(pageFunction[, arg]) ` method .
* ` ` ` js
* const windowHandle = await page . evaluateHandle ( ( ) = > window ) ;
* // ...
* ` ` `
* JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with ` jsHandle.dispose() ` . JSHandles are auto - disposed when their origin frame gets navigated or the parent context gets destroyed .
* JSHandle instances can be used as an argument in ` page. $ eval(selector, pageFunction[, arg]) ` , ` page.evaluate(pageFunction[, arg]) ` and ` page.evaluateHandle(pageFunction[, arg]) ` methods .
* /
export interface JSHandle < T = any > {
/ * *
* Returns the return value of ` pageFunction `
* This method passes this handle as the first argument to ` pageFunction ` .
* If ` pageFunction ` returns a Promise , then ` handle.evaluate ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const tweetHandle = await page . $ ( '.tweet .retweets' ) ;
* expect ( await tweetHandle . evaluate ( ( node , suffix ) = > node . innerText , ' retweets' ) ) . toBe ( '10 retweets' ) ;
* ` ` `
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluate < R , Arg , O extends T = T > ( pageFunction : PageFunctionOn < O , Arg , R > , arg : Arg ) : Promise < R > ;
evaluate < R , O extends T = T > ( pageFunction : PageFunctionOn < O , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns the return value of ` pageFunction ` as in - page object ( JSHandle ) .
* This method passes this handle as the first argument to ` pageFunction ` .
* The only difference between ` jsHandle.evaluate ` and ` jsHandle.evaluateHandle ` is that ` jsHandle.evaluateHandle ` returns in - page object ( JSHandle ) .
* If the function passed to the ` jsHandle.evaluateHandle ` returns a Promise , then ` jsHandle.evaluateHandle ` would wait for the promise to resolve and return its value .
* See ` page.evaluateHandle(pageFunction[, arg]) ` for more details .
* @param pageFunction Function to be evaluated
* @param arg Optional argument to pass to ` pageFunction `
* /
evaluateHandle < R , Arg , O extends T = T > ( pageFunction : PageFunctionOn < O , Arg , R > , arg : Arg ) : Promise < SmartHandle < R > > ;
evaluateHandle < R , O extends T = T > ( pageFunction : PageFunctionOn < O , void , R > , arg? : any ) : Promise < SmartHandle < R > > ;
/ * *
* Returns a JSON representation of the object . If the object has a ` toJSON ` function , it * * will not be called * * .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * The method will return an empty JSON object if the referenced object is not stringifiable . It will throw an error if the object has circular references .
2020-12-27 00:52:05 +03:00
* /
jsonValue ( ) : Promise < T > ;
/ * *
* Returns either ` null ` or the object handle itself , if the object handle is an instance of ElementHandle .
* /
asElement ( ) : T extends Node ? ElementHandle < T > : null ;
/ * *
* The ` jsHandle.dispose ` method stops referencing the element handle .
* /
dispose ( ) : Promise < void > ;
/ * *
* The method returns a map with * * own property names * * as keys and JSHandle instances for the property values .
* ` ` ` js
* const handle = await page . evaluateHandle ( ( ) = > ( { window , document } ) ) ;
* const properties = await handle . getProperties ( ) ;
* const windowHandle = properties . get ( 'window' ) ;
* const documentHandle = properties . get ( 'document' ) ;
* await handle . dispose ( ) ;
* ` ` `
* /
getProperties ( ) : Promise < Map < string , JSHandle > > ;
/ * *
* Fetches a single property from the referenced object .
* @param propertyName property to get
* /
getProperty ( propertyName : string ) : Promise < JSHandle > ; }
/ * *
* ElementHandle represents an in - page DOM element . ElementHandles can be created with the ` page. $ (selector) ` method .
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* const hrefElement = await page . $ ( 'a' ) ;
* await hrefElement . click ( ) ;
* // ...
* } ) ( ) ;
* ` ` `
* ElementHandle prevents DOM element from garbage collection unless the handle is disposed with ` jsHandle.dispose() ` . ElementHandles are auto - disposed when their origin frame gets navigated .
* ElementHandle instances can be used as an argument in ` page. $ eval(selector, pageFunction[, arg]) ` and ` page.evaluate(pageFunction[, arg]) ` methods .
* /
export interface ElementHandle < T = Node > extends JSHandle < T > {
/ * *
* The method finds an element matching the specified selector in the ` ElementHandle ` ' s subtree . See Working with selectors for more details . If no elements match the selector , returns ` null ` .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > | null > ;
$ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > | null > ;
/ * *
* The method finds all elements matching the specified selector in the ` ElementHandle ` s subtree . See Working with selectors for more details . If no elements match the selector , returns empty array .
* @param selector A selector to query for . See working with selectors for more details .
* /
$ $ < K extends keyof HTMLElementTagNameMap > ( selector : K ) : Promise < ElementHandleForTag < K > [ ] > ;
$ $ ( selector : string ) : Promise < ElementHandle < SVGElement | HTMLElement > [ ] > ;
/ * *
* Returns the return value of ` pageFunction `
* The method finds an element matching the specified selector in the ` ElementHandle ` s subtree and passes it as a first argument to ` pageFunction ` . See Working with selectors for more details . If no elements match the selector , the method throws an error .
* If ` pageFunction ` returns a Promise , then ` frame. $ eval ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` js
* const tweetHandle = await page . $ ( '.tweet' ) ;
* expect ( await tweetHandle . $eval ( '.like' , node = > node . innerText ) ) . toBe ( '100' ) ;
* expect ( await tweetHandle . $eval ( '.retweets' , node = > node . innerText ) ) . toBe ( '10' ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , Arg , R > , arg : Arg ) : Promise < R > ;
$eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] , void , R > , arg? : any ) : Promise < R > ;
$eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns the return value of ` pageFunction `
* The method finds all elements matching the specified selector in the ` ElementHandle ` ' s subtree and passes an array of matched elements as a first argument to ` pageFunction ` . See Working with selectors for more details .
* If ` pageFunction ` returns a Promise , then ` frame. $ $ eval ` would wait for the promise to resolve and return its value .
* Examples :
* ` ` ` html
* < div class = "feed" >
* < div class = "tweet" > Hello ! < / div >
* < div class = "tweet" > Hi ! < / div >
* < / div >
* ` ` `
* ` ` ` js
* const feedHandle = await page . $ ( '.feed' ) ;
* expect ( await feedHandle . $ $eval ( '.tweet' , nodes = > nodes . map ( n = > n . innerText ) ) ) . toEqual ( [ 'Hello!' , 'Hi!' ] ) ;
* ` ` `
* @param selector A selector to query for . See working with selectors for more details .
* @param pageFunction Function to be evaluated in browser context
* @param arg Optional argument to pass to ` pageFunction `
* /
$ $eval < K extends keyof HTMLElementTagNameMap , R , Arg > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < R , Arg , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , Arg , R > , arg : Arg ) : Promise < R > ;
$ $eval < K extends keyof HTMLElementTagNameMap , R > ( selector : K , pageFunction : PageFunctionOn < HTMLElementTagNameMap [ K ] [ ] , void , R > , arg? : any ) : Promise < R > ;
$ $eval < R , E extends SVGElement | HTMLElement = SVGElement | HTMLElement > ( selector : string , pageFunction : PageFunctionOn < E [ ] , void , R > , arg? : any ) : Promise < R > ;
/ * *
* Returns element specified by selector satisfies ` state ` option . Returns ` null ` if waiting for ` hidden ` or ` detached ` .
* Wait for the ` selector ` relative to the element handle to satisfy ` state ` option ( either appear / disappear from dom , or become visible / hidden ) . If at the moment of calling the method ` selector ` already satisfies the condition , the method will return immediately . If the selector doesn ' t satisfy the condition for the ` timeout ` milliseconds , the function will throw .
* ` ` ` js
* await page . setContent ( ` <div><span></span></div> ` ) ;
* const div = await page . $ ( 'div' ) ;
* // Waiting for the 'span' selector relative to the div.
* const span = await div . waitForSelector ( 'span' , { state : 'attached' } ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * This method does not work across navigations , use ` page.waitForSelector(selector[, options]) ` instead .
2020-12-27 00:52:05 +03:00
* @param selector A selector to query for . See working with selectors for more details .
* @param options
* /
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options? : ElementHandleWaitForSelectorOptionsNotHidden ) : Promise < ElementHandleForTag < K > > ;
waitForSelector ( selector : string , options? : ElementHandleWaitForSelectorOptionsNotHidden ) : Promise < ElementHandle < SVGElement | HTMLElement > > ;
waitForSelector < K extends keyof HTMLElementTagNameMap > ( selector : K , options : ElementHandleWaitForSelectorOptions ) : Promise < ElementHandleForTag < K > | null > ;
waitForSelector ( selector : string , options : ElementHandleWaitForSelectorOptions ) : Promise < null | ElementHandle < SVGElement | HTMLElement > > ;
/ * *
* This method returns the bounding box of the element , or ` null ` if the element is not visible . The bounding box is calculated relative to the main frame viewport - which is usually the same as the browser window .
* Scrolling affects the returned bonding box , similarly to Element . getBoundingClientRect . That means ` x ` and / or ` y ` may be negative .
* Elements from child frames return the bounding box relative to the main frame , unlike the Element . getBoundingClientRect .
* Assuming the page is static , it is safe to use bounding box coordinates to perform input . For example , the following snippet should click the center of the element .
* ` ` ` js
* const box = await elementHandle . boundingBox ( ) ;
* await page . mouse . click ( box . x + box . width / 2 , box . y + box . height / 2 ) ;
* ` ` `
* /
boundingBox ( ) : Promise < null | {
/ * *
* the x coordinate of the element in pixels .
* /
x : number ;
/ * *
* the y coordinate of the element in pixels .
* /
y : number ;
/ * *
* the width of the element in pixels .
* /
width : number ;
/ * *
* the height of the element in pixels .
* /
height : number ;
} > ;
/ * *
* This method checks the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Ensure that element is a checkbox or a radio input . If not , this method rejects . If the element is already checked , this method returns immediately .
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now checked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param options
* /
check ( options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method clicks the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param options
* /
click ( options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the content frame for element handles referencing iframe nodes , or ` null ` otherwise
* /
contentFrame ( ) : Promise < null | Frame > ;
/ * *
* This method double clicks the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . mouse to double click in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set . Note that if the first click of the ` dblclick() ` triggers a navigation event , this method will reject .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` elementHandle.dblclick() ` dispatches two ` click ` events and a single ` dblclick ` event .
2020-12-27 00:52:05 +03:00
* @param options
* /
dblclick ( options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* The snippet below dispatches the ` click ` event on the element . Regardless of the visibility state of the elment , ` click ` is dispatched . This is equivalend to calling element . click ( ) .
* ` ` ` js
* await elementHandle . dispatchEvent ( 'click' ) ;
* ` ` `
* Under the hood , it creates an instance of an event based on the given ` type ` , initializes it with ` eventInit ` properties and dispatches it on the element . Events are ` composed ` , ` cancelable ` and bubble by default .
* Since ` eventInit ` is event - specific , please refer to the events documentation for the lists of initial properties :
2020-12-27 01:31:41 +03:00
* - DragEvent
* - FocusEvent
* - KeyboardEvent
* - MouseEvent
* - PointerEvent
* - TouchEvent
* - Event
2020-12-27 00:52:05 +03:00
* You can also specify ` JSHandle ` as the property value if you want live objects to be passed into the event :
* ` ` ` js
* // Note you can only create DataTransfer in Chromium and Firefox
* const dataTransfer = await page . evaluateHandle ( ( ) = > new DataTransfer ( ) ) ;
* await elementHandle . dispatchEvent ( 'dragstart' , { dataTransfer } ) ;
* ` ` `
* @param type DOM event type : ` "click" ` , ` "dragstart" ` , etc .
* @param eventInit Optional event - specific initialization properties .
* /
dispatchEvent ( type : string , eventInit? : EvaluationArgument ) : Promise < void > ;
/ * *
* This method waits for actionability checks , focuses the element , fills it and triggers an ` input ` event after filling . If the element is not an ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element , this method throws an error . Note that you can pass an empty string to clear the input field .
* @param value Value to set for the ` <input> ` , ` <textarea> ` or ` [contenteditable] ` element .
* @param options
* /
fill ( value : string , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Calls focus on the element .
* /
focus ( ) : Promise < void > ;
/ * *
* Returns element attribute value .
* @param name Attribute name to get the value for .
* /
getAttribute ( name : string ) : Promise < null | string > ;
/ * *
* This method hovers over the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . mouse to hover over the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param options
* /
hover ( options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the ` element.innerHTML ` .
* /
innerHTML ( ) : Promise < string > ;
/ * *
* Returns the ` element.innerText ` .
* /
innerText ( ) : Promise < string > ;
/ * *
* Returns the frame containing the given element .
* /
ownerFrame ( ) : Promise < null | Frame > ;
/ * *
* Focuses the element , and then uses ` keyboard.down(key) ` and ` keyboard.up(key) ` .
* ` key ` can specify the intended keyboardEvent . key value or a single character to generate the text for . A superset of the ` key ` values can be found here . Examples of the keys are :
* ` F1 ` - ` F12 ` , ` Digit0 ` - ` Digit9 ` , ` KeyA ` - ` KeyZ ` , ` Backquote ` , ` Minus ` , ` Equal ` , ` Backslash ` , ` Backspace ` , ` Tab ` , ` Delete ` , ` Escape ` , ` ArrowDown ` , ` End ` , ` Enter ` , ` Home ` , ` Insert ` , ` PageDown ` , ` PageUp ` , ` ArrowRight ` , ` ArrowUp ` , etc .
2020-12-27 01:31:41 +03:00
* Following modification shortcuts are also supported : ` Shift ` , ` Control ` , ` Alt ` , ` Meta ` , ` ShiftLeft ` .
2020-12-27 00:52:05 +03:00
* Holding down ` Shift ` will type the text that corresponds to the ` key ` in the upper case .
* If ` key ` is a single character , it is case - sensitive , so the values ` a ` and ` A ` will generate different respective texts .
* Shortcuts such as ` key: "Control+o" ` or ` key: "Control+Shift+T" ` are supported as well . When speficied with the modifier , modifier is pressed and being held while the subsequent key is being pressed .
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* @param options
* /
press ( key : string , options ? : {
/ * *
* Time to wait between ` keydown ` and ` keyup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the buffer with the captured screenshot .
* This method waits for the actionability checks , then scrolls element into view before taking a screenshot . If the element is detached from DOM , the method throws an error .
* @param options
* /
screenshot ( options ? : {
/ * *
* Hides default white background and allows capturing screenshots with transparency . Not applicable to ` jpeg ` images . Defaults to ` false ` .
* /
omitBackground? : boolean ;
/ * *
* The file path to save the image to . The screenshot type will be inferred from file extension . If ` path ` is a relative path , then it is resolved relative to the current working directory . If no path is provided , the image won ' t be saved to the disk .
* /
path? : string ;
/ * *
* The quality of the image , between 0 - 100 . Not applicable to ` png ` images .
* /
quality? : number ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
/ * *
* Specify screenshot type , defaults to ` png ` .
* /
type ? : "jpeg" | "png" ;
} ) : Promise < Buffer > ;
/ * *
2020-12-27 01:31:41 +03:00
* This method waits for actionability checks , then tries to scroll element into view , unless it is completely visible as defined by IntersectionObserver ' s ` ` ` ratio ` ` ` .
2020-12-27 00:52:05 +03:00
* Throws when ` elementHandle ` does not point to an element connected to a Document or a ShadowRoot .
* @param options
* /
scrollIntoViewIfNeeded ( options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the array of option values that have been successfully selected .
* Triggers a ` change ` and ` input ` event once all the provided options have been selected . If element is not a ` <select> ` element , the method throws an error .
* ` ` ` js
* // single selection matching the value
* handle . selectOption ( 'blue' ) ;
*
* // single selection matching both the value and the label
* handle . selectOption ( { label : 'Blue' } ) ;
*
* // multiple selection
* handle . selectOption ( 'red' , 'green' , 'blue' ) ;
*
* // multiple selection for blue, red and second option
* handle . selectOption ( { value : 'blue' } , { index : 2 } , 'red' ) ;
* ` ` `
* @param values Options to select . If the ` <select> ` has the ` multiple ` attribute , all matching options are selected , otherwise only the first option matching one of the passed options is selected . String values are equivalent to ` {value:'string'} ` . Option is considered matching if all specified properties match .
* @param options
* /
selectOption ( values : null | string | ElementHandle | Array < string > | {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} | Array < ElementHandle > | Array < {
/ * *
* Matches by ` option.value ` .
* /
value? : string ;
/ * *
* Matches by ` option.label ` .
* /
label? : string ;
/ * *
* Matches by the index .
* /
index? : number ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < Array < string > > ;
/ * *
* This method waits for actionability checks , then focuses the element and selects all its text content .
* @param options
* /
selectText ( options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method expects ` elementHandle ` to point to an input element .
* Sets the value of the file input to these file paths or files . If some of the ` filePaths ` are relative paths , then they are resolved relative to the the current working directory . For empty array , clears the selected files .
* @param files
* @param options
* /
setInputFiles ( files : string | Array < string > | {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} | Array < {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method taps the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . touchscreen to tap in the center of the element , or the specified ` position ` .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * ` elementHandle.tap() ` requires that the ` hasTouch ` option of the browser context be set to true .
2020-12-27 00:52:05 +03:00
* @param options
* /
tap ( options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Modifier keys to press . Ensures that only these modifiers are pressed during the operation , and then restores current modifiers back . If not specified , currently pressed modifiers are used .
* /
modifiers? : Array < "Alt" | "Control" | "Meta" | "Shift" > ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* A point to use relative to the top - left corner of element padding box . If not specified , uses some visible point of the element .
* /
position ? : {
x : number ;
y : number ;
} ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the ` node.textContent ` .
* /
textContent ( ) : Promise < null | string > ;
toString ( ) : string ;
/ * *
* Focuses the element , and then sends a ` keydown ` , ` keypress ` / ` input ` , and ` keyup ` event for each character in the text .
* To press a special key , like ` Control ` or ` ArrowDown ` , use ` elementHandle.press(key[, options]) ` .
* ` ` ` js
* await elementHandle . type ( 'Hello' ) ; // Types instantly
* await elementHandle . type ( 'World' , { delay : 100 } ) ; // Types slower, like a user
* ` ` `
* An example of typing into a text field and then submitting the form :
* ` ` ` js
* const elementHandle = await page . $ ( 'input' ) ;
* await elementHandle . type ( 'some text' ) ;
* await elementHandle . press ( 'Enter' ) ;
* ` ` `
* @param text A text to type into a focused element .
* @param options
* /
type ( text : string , options ? : {
/ * *
* Time to wait between key presses in milliseconds . Defaults to 0 .
* /
delay? : number ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* This method checks the element by performing the following steps :
2020-12-27 01:31:41 +03:00
* - Ensure that element is a checkbox or a radio input . If not , this method rejects . If the element is already unchecked , this method returns immediately .
* - Wait for actionability checks on the element , unless ` force ` option is set .
* - Scroll the element into view if needed .
* - Use page . mouse to click in the center of the element .
* - Wait for initiated navigations to either succeed or fail , unless ` noWaitAfter ` option is set .
* - Ensure that the element is now unchecked . If not , this method rejects .
2020-12-27 00:52:05 +03:00
* If the element is detached from the DOM at any moment during the action , this method rejects .
* When all steps combined have not finished during the specified ` timeout ` , this method rejects with a TimeoutError . Passing zero timeout disables this .
* @param options
* /
uncheck ( options ? : {
/ * *
* Whether to bypass the actionability checks . Defaults to ` false ` .
* /
force? : boolean ;
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
/ * *
* Returns the element satisfies the ` state ` .
* Depending on the ` state ` parameter , this method waits for one of the actionability checks to pass . This method throws when the element is detached while waiting , unless waiting for the ` "hidden" ` state .
2020-12-27 01:31:41 +03:00
* - ` "visible" ` Wait until the element is visible .
* - ` "hidden" ` Wait until the element is not visible or not attached . Note that waiting for hidden does not throw when the element detaches .
* - ` "stable" ` Wait until the element is both visible and stable .
* - ` "enabled" ` Wait until the element is enabled .
* - ` "disabled" ` Wait until the element is not enabled .
2020-12-27 00:52:05 +03:00
* If the element does not satisfy the condition for the ` timeout ` milliseconds , this method will throw .
* @param state A state to wait for , see below for more details .
* @param options
* /
waitForElementState ( state : "disabled" | "enabled" | "hidden" | "stable" | "visible" , options ? : {
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ; }
/ * *
* BrowserType provides methods to launch a specific browser instance or connect to an existing one . The following is a typical example of using Playwright to drive automation :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* // other actions...
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* /
export interface BrowserType < Browser > {
/ * *
* This methods attaches Playwright to an existing browser instance .
* @param params
* /
connect ( params : ConnectOptions ) : Promise < Browser > ;
/ * *
* A path where Playwright expects to find a bundled browser executable .
* /
executablePath ( ) : string ;
/ * *
* Returns the browser instance .
* You can use ` ignoreDefaultArgs ` to filter out ` --mute-audio ` from default arguments :
* ` ` ` js
* const browser = await chromium . launch ( { // Or 'firefox' or 'webkit'.
* ignoreDefaultArgs : [ '--mute-audio' ]
* } ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * Chromium - only * * Playwright can also be used to control the Chrome browser , but it works best with the version of Chromium it is bundled with . There is no guarantee it will work with any other version . Use ` executablePath ` option with extreme caution .
* >
*
* > If Google Chrome ( rather than Chromium ) is preferred , a Chrome Canary or Dev Channel build is suggested .
* >
*
* > In ` browserType.launch([options]) ` above , any mention of Chromium also applies to Chrome .
* >
*
* > See ` this article ` for a description of the differences between Chromium and Chrome . ` This article ` describes some differences for Linux users .
2020-12-27 00:52:05 +03:00
* @param options
* /
launch ( options? : LaunchOptions ) : Promise < Browser > ;
/ * *
* Returns the persistent browser context instance .
* Launches browser that uses persistent storage located at ` userDataDir ` and returns the only context . Closing this context will automatically close the browser .
* @param userDataDir Path to a User Data Directory , which stores browser session data like cookies and local storage . More details for Chromium and Firefox .
* @param options
* /
launchPersistentContext ( userDataDir : string , options ? : {
/ * *
* Whether to automatically download all the attachments . Defaults to ` false ` where all the downloads are canceled .
* /
acceptDownloads? : boolean ;
/ * *
* Additional arguments to pass to the browser instance . The list of Chromium flags can be found here .
* /
args? : Array < string > ;
/ * *
* Toggles bypassing page ' s Content - Security - Policy .
* /
bypassCSP? : boolean ;
/ * *
* Enable Chromium sandboxing . Defaults to ` true ` .
* /
chromiumSandbox? : boolean ;
/ * *
* Emulates ` 'prefers-colors-scheme' ` media feature , supported values are ` 'light' ` , ` 'dark' ` , ` 'no-preference' ` . See ` page.emulateMedia(params) ` for more details . Defaults to '`light`' .
* /
colorScheme ? : "dark" | "light" | "no-preference" ;
/ * *
* Specify device scale factor ( can be thought of as dpr ) . Defaults to ` 1 ` .
* /
deviceScaleFactor? : number ;
/ * *
* * * Chromium - only * * Whether to auto - open a Developer Tools panel for each tab . If this option is ` true ` , the ` headless ` option will be set ` false ` .
* /
devtools? : boolean ;
/ * *
* If specified , accepted downloads are downloaded into this directory . Otherwise , temporary directory is created and is deleted when browser is closed .
* /
downloadsPath? : string ;
/ * *
* Specify environment variables that will be visible to the browser . Defaults to ` process.env ` .
* /
env ? : { [ key : string ] : string | number | boolean ; } ;
/ * *
* Path to a browser executable to run instead of the bundled one . If ` executablePath ` is a relative path , then it is resolved relative to the current working directory . * * BEWARE * * : Playwright is only guaranteed to work with the bundled Chromium , Firefox or WebKit , use at your own risk .
* /
executablePath? : string ;
/ * *
* An object containing additional HTTP headers to be sent with every request . All header values must be strings .
* /
extraHTTPHeaders ? : { [ key : string ] : string ; } ;
geolocation ? : {
/ * *
* Latitude between - 90 and 90 .
* /
latitude : number ;
/ * *
* Longitude between - 180 and 180 .
* /
longitude : number ;
/ * *
* Non - negative accuracy value . Defaults to ` 0 ` .
* /
accuracy? : number ;
} ;
/ * *
* Close the browser process on SIGHUP . Defaults to ` true ` .
* /
handleSIGHUP? : boolean ;
/ * *
* Close the browser process on Ctrl - C . Defaults to ` true ` .
* /
handleSIGINT? : boolean ;
/ * *
* Close the browser process on SIGTERM . Defaults to ` true ` .
* /
handleSIGTERM? : boolean ;
/ * *
* Specifies if viewport supports touch events . Defaults to false .
* /
hasTouch? : boolean ;
/ * *
* Whether to run browser in headless mode . More details for Chromium and Firefox . Defaults to ` true ` unless the ` devtools ` option is ` true ` .
* /
headless? : boolean ;
/ * *
* Credentials for HTTP authentication .
* /
httpCredentials ? : {
username : string ;
password : string ;
} ;
/ * *
* If ` true ` , then do not use any of the default arguments . If an array is given , then filter out the given default arguments . Dangerous option ; use with care . Defaults to ` false ` .
* /
ignoreDefaultArgs? : boolean | Array < string > ;
/ * *
* Whether to ignore HTTPS errors during navigation . Defaults to ` false ` .
* /
ignoreHTTPSErrors? : boolean ;
/ * *
* Whether the ` meta viewport ` tag is taken into account and touch events are enabled . Defaults to ` false ` . Not supported in Firefox .
* /
isMobile? : boolean ;
/ * *
* Whether or not to enable JavaScript in the context . Defaults to ` true ` .
* /
javaScriptEnabled? : boolean ;
/ * *
* Specify user locale , for example ` en-GB ` , ` de-DE ` , etc . Locale will affect ` navigator.language ` value , ` Accept-Language ` request header value as well as number and date formatting rules .
* /
locale? : string ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Whether to emulate network being offline . Defaults to ` false ` .
* /
offline? : boolean ;
/ * *
* A list of permissions to grant to all pages in this context . See ` browserContext.grantPermissions(permissions[, options]) ` for more details .
* /
permissions? : Array < string > ;
/ * *
* Network proxy settings .
* /
proxy ? : {
/ * *
* Proxy to be used for all requests . HTTP and SOCKS proxies are supported , for example ` http://myproxy.com:3128 ` or ` socks5://myproxy.com:3128 ` . Short form ` myproxy.com:3128 ` is considered an HTTP proxy .
* /
server : string ;
/ * *
* Optional coma - separated domains to bypass proxy , for example ` ".com, chromium.org, .domain.com" ` .
* /
bypass? : string ;
/ * *
* Optional username to use if HTTP proxy requires authentication .
* /
username? : string ;
/ * *
* Optional password to use if HTTP proxy requires authentication .
* /
password? : string ;
} ;
/ * *
* Enables HAR recording for all pages into ` recordHar.path ` file . If not specified , the HAR is not recorded . Make sure to await ` browserContext.close() ` for the HAR to be saved .
* /
recordHar ? : {
/ * *
* Optional setting to control whether to omit request content from the HAR . Defaults to ` false ` .
* /
omitContent? : boolean ;
/ * *
* Path on the filesystem to write the HAR file to .
* /
path : string ;
} ;
/ * *
* Enables video recording for all pages into ` recordVideo.dir ` directory . If not specified videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
recordVideo ? : {
/ * *
* Path to the directory to put videos into .
* /
dir : string ;
/ * *
* Optional dimensions of the recorded videos . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of each page will be scaled down if necessary to fit the specified size .
* /
size ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
} ;
/ * *
* Slows down Playwright operations by the specified amount of milliseconds . Useful so that you can see what is going on . Defaults to 0 .
* /
slowMo? : number ;
/ * *
* Maximum time in milliseconds to wait for the browser instance to start . Defaults to ` 30000 ` ( 30 seconds ) . Pass ` 0 ` to disable timeout .
* /
timeout? : number ;
/ * *
* Changes the timezone of the context . See ICU ’ s ` metaZones.txt ` for a list of supported timezone IDs .
* /
timezoneId? : string ;
/ * *
* Specific user agent to use in this context .
* /
userAgent? : string ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videoSize ` . Specifies dimensions of the automatically recorded video . Can only be used if ` videosPath ` is set . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of the page will be scaled down if necessary to fit specified size .
* /
videoSize ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videosPath ` . Enables video recording for all pages to ` videosPath ` directory . If not specified , videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
videosPath? : string ;
/ * *
* Sets a consistent viewport for each page . Defaults to an 1280 x720 viewport . ` null ` disables the default viewport .
* /
viewport? : null | {
/ * *
* page width in pixels .
* /
width : number ;
/ * *
* page height in pixels .
* /
height : number ;
} ;
} ) : Promise < BrowserContext > ;
/ * *
* Returns the browser app instance .
* Launches browser server that client can connect to . An example of launching a browser executable and connecting to it later :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'webkit' or 'firefox'.
*
* ( async ( ) = > {
* const browserServer = await chromium . launchServer ( ) ;
* const wsEndpoint = browserServer . wsEndpoint ( ) ;
* // Use web socket endpoint later to establish a connection.
* const browser = await chromium . connect ( { wsEndpoint } ) ;
* // Close browser instance.
* await browserServer . close ( ) ;
* } ) ( ) ;
* ` ` `
* @param options
* /
launchServer ( options ? : {
/ * *
* Additional arguments to pass to the browser instance . The list of Chromium flags can be found here .
* /
args? : Array < string > ;
/ * *
* Enable Chromium sandboxing . Defaults to ` true ` .
* /
chromiumSandbox? : boolean ;
/ * *
* * * Chromium - only * * Whether to auto - open a Developer Tools panel for each tab . If this option is ` true ` , the ` headless ` option will be set ` false ` .
* /
devtools? : boolean ;
/ * *
* If specified , accepted downloads are downloaded into this directory . Otherwise , temporary directory is created and is deleted when browser is closed .
* /
downloadsPath? : string ;
/ * *
* Specify environment variables that will be visible to the browser . Defaults to ` process.env ` .
* /
env ? : { [ key : string ] : string | number | boolean ; } ;
/ * *
* Path to a browser executable to run instead of the bundled one . If ` executablePath ` is a relative path , then it is resolved relative to the current working directory . * * BEWARE * * : Playwright is only guaranteed to work with the bundled Chromium , Firefox or WebKit , use at your own risk .
* /
executablePath? : string ;
/ * *
* Firefox user preferences . Learn more about the Firefox user preferences at ` about:config ` .
* /
firefoxUserPrefs ? : { [ key : string ] : string | number | boolean ; } ;
/ * *
* Close the browser process on SIGHUP . Defaults to ` true ` .
* /
handleSIGHUP? : boolean ;
/ * *
* Close the browser process on Ctrl - C . Defaults to ` true ` .
* /
handleSIGINT? : boolean ;
/ * *
* Close the browser process on SIGTERM . Defaults to ` true ` .
* /
handleSIGTERM? : boolean ;
/ * *
* Whether to run browser in headless mode . More details for Chromium and Firefox . Defaults to ` true ` unless the ` devtools ` option is ` true ` .
* /
headless? : boolean ;
/ * *
* If ` true ` , then do not use any of the default arguments . If an array is given , then filter out the given default arguments . Dangerous option ; use with care . Defaults to ` false ` .
* /
ignoreDefaultArgs? : boolean | Array < string > ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Port to use for the web socket . Defaults to 0 that picks any available port .
* /
port? : number ;
/ * *
* Network proxy settings .
* /
proxy ? : {
/ * *
* Proxy to be used for all requests . HTTP and SOCKS proxies are supported , for example ` http://myproxy.com:3128 ` or ` socks5://myproxy.com:3128 ` . Short form ` myproxy.com:3128 ` is considered an HTTP proxy .
* /
server : string ;
/ * *
* Optional coma - separated domains to bypass proxy , for example ` ".com, chromium.org, .domain.com" ` .
* /
bypass? : string ;
/ * *
* Optional username to use if HTTP proxy requires authentication .
* /
username? : string ;
/ * *
* Optional password to use if HTTP proxy requires authentication .
* /
password? : string ;
} ;
/ * *
* Maximum time in milliseconds to wait for the browser instance to start . Defaults to ` 30000 ` ( 30 seconds ) . Pass ` 0 ` to disable timeout .
* /
timeout? : number ;
} ) : Promise < BrowserServer > ;
/ * *
* Returns browser name . For example : ` 'chromium' ` , ` 'webkit' ` or ` 'firefox' ` .
* /
name ( ) : string ; }
/ * *
* Chromium - specific features including Tracing , service worker support , etc . You can use ` chromiumBrowser.startTracing([page, options]) ` and ` chromiumBrowser.stopTracing() ` to create a trace file which can be opened in Chrome DevTools or timeline viewer .
* ` ` ` js
* await browser . startTracing ( page , { path : 'trace.json' } ) ;
* await page . goto ( 'https://www.google.com' ) ;
* await browser . stopTracing ( ) ;
* ` ` `
* /
export interface ChromiumBrowser extends Browser {
/ * *
* Returns an array of all open browser contexts . In a newly created browser , this will return zero browser contexts .
* ` ` ` js
* const browser = await pw . webkit . launch ( ) ;
* console . log ( browser . contexts ( ) . length ) ; // prints `0`
*
* const context = await browser . newContext ( ) ;
* console . log ( browser . contexts ( ) . length ) ; // prints `1`
* ` ` `
* /
contexts ( ) : Array < ChromiumBrowserContext > ;
/ * *
* Creates a new browser context . It won ' t share cookies / cache with other browser contexts .
* ` ` ` js
* ( async ( ) = > {
* const browser = await playwright . firefox . launch ( ) ; // Or 'chromium' or 'webkit'.
* // Create a new incognito browser context.
* const context = await browser . newContext ( ) ;
* // Create a new page in a pristine context.
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* } ) ( ) ;
* ` ` `
* @param options
* /
newContext ( options? : BrowserContextOptions ) : Promise < ChromiumBrowserContext > ;
/ * *
* Returns the newly created browser session .
* /
newBrowserCDPSession ( ) : Promise < CDPSession > ;
/ * *
* Only one trace can be active at a time per browser .
* @param page Optional , if specified , tracing includes screenshots of the given page .
* @param options
* /
startTracing ( page? : Page , options ? : {
/ * *
* specify custom categories to use instead of default .
* /
categories? : Array < string > ;
/ * *
* A path to write the trace file to .
* /
path? : string ;
/ * *
* captures screenshots in the trace .
* /
screenshots? : boolean ;
} ) : Promise < void > ;
/ * *
* Returns the buffer with trace data .
* /
stopTracing ( ) : Promise < Buffer > ; }
/ * *
* The ` CDPSession ` instances are used to talk raw Chrome Devtools Protocol :
2020-12-27 01:31:41 +03:00
* - protocol methods can be called with ` session.send ` method .
* - protocol events can be subscribed to with ` session.on ` method .
2020-12-27 00:52:05 +03:00
* Useful links :
2020-12-27 01:31:41 +03:00
* - Documentation on DevTools Protocol can be found here : DevTools Protocol Viewer .
* - Getting Started with DevTools Protocol : https : //github.com/aslushnikov/getting-started-with-cdp/blob/master/README.md
2020-12-27 00:52:05 +03:00
* ` ` ` js
* const client = await page . context ( ) . newCDPSession ( page ) ;
* await client . send ( 'Animation.enable' ) ;
* client . on ( 'Animation.animationCreated' , ( ) = > console . log ( 'Animation created!' ) ) ;
* const response = await client . send ( 'Animation.getPlaybackRate' ) ;
* console . log ( 'playback rate is ' + response . playbackRate ) ;
* await client . send ( 'Animation.setPlaybackRate' , {
* playbackRate : response.playbackRate / 2
* } ) ;
* ` ` `
* /
export interface CDPSession {
on : < T extends keyof Protocol.Events | symbol > ( event : T , listener : ( payload : T extends symbol ? any : Protocol . Events [ T extends keyof Protocol . Events ? T : never ] ) = > void ) = > this ;
addListener : < T extends keyof Protocol.Events | symbol > ( event : T , listener : ( payload : T extends symbol ? any : Protocol . Events [ T extends keyof Protocol . Events ? T : never ] ) = > void ) = > this ;
off : < T extends keyof Protocol.Events | symbol > ( event : T , listener : ( payload : T extends symbol ? any : Protocol . Events [ T extends keyof Protocol . Events ? T : never ] ) = > void ) = > this ;
removeListener : < T extends keyof Protocol.Events | symbol > ( event : T , listener : ( payload : T extends symbol ? any : Protocol . Events [ T extends keyof Protocol . Events ? T : never ] ) = > void ) = > this ;
once : < T extends keyof Protocol.Events | symbol > ( event : T , listener : ( payload : T extends symbol ? any : Protocol . Events [ T extends keyof Protocol . Events ? T : never ] ) = > void ) = > this ;
/ * *
* @param method protocol method name
* @param params Optional method parameters
* /
send < T extends keyof Protocol.CommandParameters > (
method : T ,
params? : Protocol.CommandParameters [ T ]
) : Promise < Protocol.CommandReturnValues [ T ] > ;
/ * *
* Detaches the CDPSession from the target . Once detached , the CDPSession object won 't emit any events and can' t be used to send messages .
* /
detach ( ) : Promise < void > ; }
type DeviceDescriptor = {
viewport : ViewportSize ;
userAgent : string ;
deviceScaleFactor : number ;
isMobile : boolean ;
hasTouch : boolean ;
defaultBrowserType : 'chromium' | 'firefox' | 'webkit' ;
} ;
export namespace errors {
/ * *
* TimeoutError is emitted whenever certain operations are terminated due to timeout , e . g . ` page.waitForSelector(selector[, options]) ` or ` browserType.launch([options]) ` .
* /
class TimeoutError extends Error { }
}
/ * *
* The Accessibility class provides methods for inspecting Chromium ' s accessibility tree . The accessibility tree is used by assistive technology such as screen readers or switches .
* Accessibility is a very platform - specific thing . On different platforms , there are different screen readers that might have wildly different output .
* Blink - Chromium ' s rendering engine - has a concept of "accessibility tree" , which is then translated into different platform - specific APIs . Accessibility namespace gives users access to the Blink Accessibility Tree .
* Most of the accessibility tree gets filtered out when converting from Blink AX Tree to Platform - specific AX - Tree or by assistive technologies themselves . By default , Playwright tries to approximate this filtering , exposing only the "interesting" nodes of the tree .
* /
export interface Accessibility {
/ * *
* Captures the current state of the accessibility tree . The returned object represents the root accessible node of the page .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers . Playwright will discard them as well for an easier to process tree , unless ` interestingOnly ` is set to ` false ` .
2020-12-27 00:52:05 +03:00
* An example of dumping the entire accessibility tree :
* ` ` ` js
* const snapshot = await page . accessibility . snapshot ( ) ;
* console . log ( snapshot ) ;
* ` ` `
* An example of logging the focused node ' s name :
* ` ` ` js
* const snapshot = await page . accessibility . snapshot ( ) ;
* const node = findFocusedNode ( snapshot ) ;
* console . log ( node && node . name ) ;
*
* function findFocusedNode ( node ) {
* if ( node . focused )
* return node ;
* for ( const child of node . children || [ ] ) {
* const foundNode = findFocusedNode ( child ) ;
* return foundNode ;
* }
* return null ;
* }
* ` ` `
* @param options
* /
snapshot ( options ? : {
/ * *
* Prune uninteresting nodes from the tree . Defaults to ` true ` .
* /
interestingOnly? : boolean ;
/ * *
* The root DOM element for the snapshot . Defaults to the whole page .
* /
root? : ElementHandle ;
} ) : Promise < null | AccessibilityNode > ;
}
type AccessibilityNode = {
role : string ;
name : string ;
value? : string | number ;
description? : string ;
keyshortcuts? : string ;
roledescription? : string ;
valuetext? : string ;
disabled? : boolean ;
expanded? : boolean ;
focused? : boolean ;
modal? : boolean ;
multiline? : boolean ;
multiselectable? : boolean ;
readonly ? : boolean ;
required? : boolean ;
selected? : boolean ;
checked? : boolean | "mixed" ;
pressed? : boolean | "mixed" ;
level? : number ;
valuemin? : number ;
valuemax? : number ;
autocomplete? : string ;
haspopup? : string ;
invalid? : string ;
orientation? : string ;
children? : AccessibilityNode [ ] ;
}
export const selectors : Selectors ;
export const devices : Devices & DeviceDescriptor [ ] ;
// This is required to not export everything by default. See https://github.com/Microsoft/TypeScript/issues/19545#issuecomment-340490459
export { } ;
/ * *
* A Browser is created when Playwright connects to a browser instance , either through ` browserType.launch([options]) ` or ` browserType.connect(params) ` .
* An example of using a Browser to create a Page :
* ` ` ` js
* const { firefox } = require ( 'playwright' ) ; // Or 'chromium' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await firefox . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* See ChromiumBrowser , FirefoxBrowser and WebKitBrowser for browser - specific features . Note that ` browserType.connect(params) ` and ` browserType.launch([options]) ` always return a specific browser instance , based on the browser being connected to or launched .
* /
export interface Browser extends EventEmitter {
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser gets disconnected from the browser application . This might happen because of one of the following :
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
on ( event : 'disconnected' , listener : ( ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser gets disconnected from the browser application . This might happen because of one of the following :
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
once ( event : 'disconnected' , listener : ( ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser gets disconnected from the browser application . This might happen because of one of the following :
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
addListener ( event : 'disconnected' , listener : ( ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser gets disconnected from the browser application . This might happen because of one of the following :
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
removeListener ( event : 'disconnected' , listener : ( ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser gets disconnected from the browser application . This might happen because of one of the following :
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
off ( event : 'disconnected' , listener : ( ) = > void ) : this ;
/ * *
* In case this browser is obtained using ` browserType.launch([options]) ` , closes the browser and all of its pages ( if any were opened ) .
* In case this browser is obtained using ` browserType.connect(params) ` , clears all created contexts belonging to this browser and disconnects from the browser server .
* The Browser object itself is considered to be disposed and cannot be used anymore .
* /
close ( ) : Promise < void > ;
/ * *
* Returns an array of all open browser contexts . In a newly created browser , this will return zero browser contexts .
* ` ` ` js
* const browser = await pw . webkit . launch ( ) ;
* console . log ( browser . contexts ( ) . length ) ; // prints `0`
*
* const context = await browser . newContext ( ) ;
* console . log ( browser . contexts ( ) . length ) ; // prints `1`
* ` ` `
* /
contexts ( ) : Array < BrowserContext > ;
/ * *
* Indicates that the browser is connected .
* /
isConnected ( ) : boolean ;
/ * *
* Creates a new browser context . It won ' t share cookies / cache with other browser contexts .
* ` ` ` js
* ( async ( ) = > {
* const browser = await playwright . firefox . launch ( ) ; // Or 'chromium' or 'webkit'.
* // Create a new incognito browser context.
* const context = await browser . newContext ( ) ;
* // Create a new page in a pristine context.
* const page = await context . newPage ( ) ;
* await page . goto ( 'https://example.com' ) ;
* } ) ( ) ;
* ` ` `
* @param options
* /
newContext ( options? : BrowserContextOptions ) : Promise < BrowserContext > ;
/ * *
* Creates a new page in a new browser context . Closing this page will close the context as well .
* This is a convenience API that should only be used for the single - page scenarios and short snippets . Production code and testing frameworks should explicitly create ` browser.newContext([options]) ` followed by the ` browserContext.newPage() ` to control their exact life times .
* @param options
* /
newPage ( options ? : {
/ * *
* Whether to automatically download all the attachments . Defaults to ` false ` where all the downloads are canceled .
* /
acceptDownloads? : boolean ;
/ * *
* Toggles bypassing page ' s Content - Security - Policy .
* /
bypassCSP? : boolean ;
/ * *
* Emulates ` 'prefers-colors-scheme' ` media feature , supported values are ` 'light' ` , ` 'dark' ` , ` 'no-preference' ` . See ` page.emulateMedia(params) ` for more details . Defaults to '`light`' .
* /
colorScheme ? : "dark" | "light" | "no-preference" ;
/ * *
* Specify device scale factor ( can be thought of as dpr ) . Defaults to ` 1 ` .
* /
deviceScaleFactor? : number ;
/ * *
* An object containing additional HTTP headers to be sent with every request . All header values must be strings .
* /
extraHTTPHeaders ? : { [ key : string ] : string ; } ;
geolocation ? : {
/ * *
* Latitude between - 90 and 90 .
* /
latitude : number ;
/ * *
* Longitude between - 180 and 180 .
* /
longitude : number ;
/ * *
* Non - negative accuracy value . Defaults to ` 0 ` .
* /
accuracy? : number ;
} ;
/ * *
* Specifies if viewport supports touch events . Defaults to false .
* /
hasTouch? : boolean ;
/ * *
* Credentials for HTTP authentication .
* /
httpCredentials ? : {
username : string ;
password : string ;
} ;
/ * *
* Whether to ignore HTTPS errors during navigation . Defaults to ` false ` .
* /
ignoreHTTPSErrors? : boolean ;
/ * *
* Whether the ` meta viewport ` tag is taken into account and touch events are enabled . Defaults to ` false ` . Not supported in Firefox .
* /
isMobile? : boolean ;
/ * *
* Whether or not to enable JavaScript in the context . Defaults to ` true ` .
* /
javaScriptEnabled? : boolean ;
/ * *
* Specify user locale , for example ` en-GB ` , ` de-DE ` , etc . Locale will affect ` navigator.language ` value , ` Accept-Language ` request header value as well as number and date formatting rules .
* /
locale? : string ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Whether to emulate network being offline . Defaults to ` false ` .
* /
offline? : boolean ;
/ * *
* A list of permissions to grant to all pages in this context . See ` browserContext.grantPermissions(permissions[, options]) ` for more details .
* /
permissions? : Array < string > ;
/ * *
* Network proxy settings to use with this context . Note that browser needs to be launched with the global proxy for this option to work . If all contexts override the proxy , global proxy will be never used and can be any string , for example ` launch({ proxy: { server: 'per-context' } }) ` .
* /
proxy ? : {
/ * *
* Proxy to be used for all requests . HTTP and SOCKS proxies are supported , for example ` http://myproxy.com:3128 ` or ` socks5://myproxy.com:3128 ` . Short form ` myproxy.com:3128 ` is considered an HTTP proxy .
* /
server : string ;
/ * *
* Optional coma - separated domains to bypass proxy , for example ` ".com, chromium.org, .domain.com" ` .
* /
bypass? : string ;
/ * *
* Optional username to use if HTTP proxy requires authentication .
* /
username? : string ;
/ * *
* Optional password to use if HTTP proxy requires authentication .
* /
password? : string ;
} ;
/ * *
* Enables HAR recording for all pages into ` recordHar.path ` file . If not specified , the HAR is not recorded . Make sure to await ` browserContext.close() ` for the HAR to be saved .
* /
recordHar ? : {
/ * *
* Optional setting to control whether to omit request content from the HAR . Defaults to ` false ` .
* /
omitContent? : boolean ;
/ * *
* Path on the filesystem to write the HAR file to .
* /
path : string ;
} ;
/ * *
* Enables video recording for all pages into ` recordVideo.dir ` directory . If not specified videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
recordVideo ? : {
/ * *
* Path to the directory to put videos into .
* /
dir : string ;
/ * *
* Optional dimensions of the recorded videos . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of each page will be scaled down if necessary to fit the specified size .
* /
size ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
} ;
/ * *
* Populates context with given storage state . This method can be used to initialize context with logged - in information obtained via ` browserContext.storageState([options]) ` . Either a path to the file with saved storage , or an object with the following fields :
* /
storageState? : string | {
/ * *
* Optional cookies to set for context
* /
cookies? : Array < {
/ * *
* * * required * *
* /
name : string ;
/ * *
* * * required * *
* /
value : string ;
/ * *
* Optional either url or domain / path are required
* /
url? : string ;
/ * *
* Optional either url or domain / path are required
* /
domain? : string ;
/ * *
* Optional either url or domain / path are required
* /
path? : string ;
/ * *
* Optional Unix time in seconds .
* /
expires? : number ;
/ * *
* Optional httpOnly flag
* /
httpOnly? : boolean ;
/ * *
* Optional secure flag
* /
secure? : boolean ;
/ * *
* Optional sameSite flag
* /
sameSite ? : "Lax" | "None" | "Strict" ;
} > ;
/ * *
* Optional localStorage to set for context
* /
origins? : Array < {
origin : string ;
localStorage : Array < {
name : string ;
value : string ;
} > ;
} > ;
} ;
/ * *
* Changes the timezone of the context . See ICU ’ s ` metaZones.txt ` for a list of supported timezone IDs .
* /
timezoneId? : string ;
/ * *
* Specific user agent to use in this context .
* /
userAgent? : string ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videoSize ` . Specifies dimensions of the automatically recorded video . Can only be used if ` videosPath ` is set . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of the page will be scaled down if necessary to fit specified size .
* /
videoSize ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videosPath ` . Enables video recording for all pages to ` videosPath ` directory . If not specified , videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
videosPath? : string ;
/ * *
* Sets a consistent viewport for each page . Defaults to an 1280 x720 viewport . ` null ` disables the default viewport .
* /
viewport? : null | {
/ * *
* page width in pixels .
* /
width : number ;
/ * *
* page height in pixels .
* /
height : number ;
} ;
} ) : Promise < Page > ;
/ * *
* Returns the browser version .
* /
version ( ) : string ;
}
/ * *
2020-12-27 01:31:41 +03:00
* ConsoleMessage objects are dispatched by page via the ` page.on('console') ` event .
2020-12-27 00:52:05 +03:00
* /
export interface ConsoleMessage {
args ( ) : Array < JSHandle > ;
location ( ) : {
/ * *
2020-12-27 01:31:41 +03:00
* URL of the resource .
2020-12-27 00:52:05 +03:00
* /
url : string ;
/ * *
* 0 - based line number in the resource .
* /
lineNumber : number ;
/ * *
* 0 - based column number in the resource .
* /
columnNumber : number ;
} ;
text ( ) : string ;
/ * *
* One of the following values : ` 'log' ` , ` 'debug' ` , ` 'info' ` , ` 'error' ` , ` 'warning' ` , ` 'dir' ` , ` 'dirxml' ` , ` 'table' ` , ` 'trace' ` , ` 'clear' ` , ` 'startGroup' ` , ` 'startGroupCollapsed' ` , ` 'endGroup' ` , ` 'assert' ` , ` 'profile' ` , ` 'profileEnd' ` , ` 'count' ` , ` 'timeEnd' ` .
* /
type ( ) : string ;
}
/ * *
2020-12-27 01:31:41 +03:00
* Dialog objects are dispatched by page via the ` page.on('dialog') ` event .
2020-12-27 00:52:05 +03:00
* An example of using ` Dialog ` class :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* page . on ( 'dialog' , async dialog = > {
* console . log ( dialog . message ( ) ) ;
* await dialog . dismiss ( ) ;
* await browser . close ( ) ;
* } ) ;
* page . evaluate ( ( ) = > alert ( '1' ) ) ;
* } ) ( ) ;
* ` ` `
* /
export interface Dialog {
/ * *
* Returns when the dialog has been accepted .
* @param promptText A text to enter in prompt . Does not cause any effects if the dialog ' s ` type ` is not prompt . Optional .
* /
accept ( promptText? : string ) : Promise < void > ;
/ * *
* If dialog is prompt , returns default prompt value . Otherwise , returns empty string .
* /
defaultValue ( ) : string ;
/ * *
* Returns when the dialog has been dismissed .
* /
dismiss ( ) : Promise < void > ;
/ * *
* A message displayed in the dialog .
* /
message ( ) : string ;
/ * *
* Returns dialog ' s type , can be one of ` alert ` , ` beforeunload ` , ` confirm ` or ` prompt ` .
* /
type ( ) : string ;
}
/ * *
2020-12-27 01:31:41 +03:00
* Download objects are dispatched by page via the ` page.on('download') ` event .
2020-12-27 00:52:05 +03:00
* All the downloaded files belonging to the browser context are deleted when the browser context is closed . All downloaded files are deleted when the browser closes .
* Download event is emitted once the download starts . Download path becomes available once download completes :
* ` ` ` js
* const [ download ] = await Promise . all ( [
* page . waitForEvent ( 'download' ) , // wait for download to start
* page . click ( 'a' )
* ] ) ;
* // wait for download to complete
* const path = await download . path ( ) ;
* . . .
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Browser context * * must * * be created with the ` acceptDownloads ` set to ` true ` when user needs access to the downloaded content . If ` acceptDownloads ` is not set or set to ` false ` , download events are emitted , but the actual download is not performed and user has no access to the downloaded files .
2020-12-27 00:52:05 +03:00
* /
export interface Download {
/ * *
* Returns readable stream for current download or ` null ` if download failed .
* /
createReadStream ( ) : Promise < null | Readable > ;
/ * *
* Deletes the downloaded file .
* /
delete ( ) : Promise < void > ;
/ * *
* Returns download error if any .
* /
failure ( ) : Promise < null | string > ;
/ * *
* Returns path to the downloaded file in case of successful download .
* /
path ( ) : Promise < null | string > ;
/ * *
* Saves the download to a user - specified path .
* @param path Path where the download should be saved .
* /
saveAs ( path : string ) : Promise < void > ;
/ * *
* Returns suggested filename for this download . It is typically computed by the browser from the ` Content-Disposition ` response header or the ` download ` attribute . See the spec on whatwg . Different browsers can use different logic for computing it .
* /
suggestedFilename ( ) : string ;
/ * *
* Returns downloaded url .
* /
url ( ) : string ;
}
/ * *
* When browser context is created with the ` videosPath ` option , each page has a video object associated with it .
* ` ` ` js
* console . log ( await page . video ( ) . path ( ) ) ;
* ` ` `
* /
export interface Video {
/ * *
* Returns the file system path this video will be recorded to . The video is guaranteed to be written to the filesystem upon closing the browser context .
* /
path ( ) : Promise < string > ;
}
/ * *
2020-12-27 01:31:41 +03:00
* FileChooser objects are dispatched by the page in the ` page.on('filechooser') ` event .
2020-12-27 00:52:05 +03:00
* ` ` ` js
* page . on ( 'filechooser' , async ( fileChooser ) = > {
* await fileChooser . setFiles ( '/tmp/myfile.pdf' ) ;
* } ) ;
* ` ` `
* /
export interface FileChooser {
/ * *
* Returns input element associated with this file chooser .
* /
element ( ) : ElementHandle ;
/ * *
* Returns whether this file chooser accepts multiple files .
* /
isMultiple ( ) : boolean ;
/ * *
* Returns page this file chooser belongs to .
* /
page ( ) : Page ;
/ * *
* Sets the value of the file input this chooser is associated with . If some of the ` filePaths ` are relative paths , then they are resolved relative to the the current working directory . For empty array , clears the selected files .
* @param files
* @param options
* /
setFiles ( files : string | Array < string > | {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} | Array < {
/ * *
* File name * * required * *
* /
name : string ;
/ * *
* File type * * required * *
* /
mimeType : string ;
/ * *
* File content * * required * *
* /
buffer : Buffer ;
} > , options ? : {
/ * *
* Actions that initiate navigations are waiting for these navigations to happen and for pages to start loading . You can opt out of waiting via setting this flag . You would only need this option in the exceptional cases such as navigating to inaccessible pages . Defaults to ` false ` .
* /
noWaitAfter? : boolean ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
} ) : Promise < void > ;
}
/ * *
* Keyboard provides an api for managing a virtual keyboard . The high level api is ` keyboard.type(text[, options]) ` , which takes raw characters and generates proper keydown , keypress / input , and keyup events on your page .
* For finer control , you can use ` keyboard.down(key) ` , ` keyboard.up(key) ` , and ` keyboard.insertText(text) ` to manually fire events as if they were generated from a real keyboard .
* An example of holding down ` Shift ` in order to select and delete some text :
* ` ` ` js
* await page . keyboard . type ( 'Hello World!' ) ;
* await page . keyboard . press ( 'ArrowLeft' ) ;
*
* await page . keyboard . down ( 'Shift' ) ;
* for ( let i = 0 ; i < ' World' . length ; i ++ )
* await page . keyboard . press ( 'ArrowLeft' ) ;
* await page . keyboard . up ( 'Shift' ) ;
*
* await page . keyboard . press ( 'Backspace' ) ;
* // Result text will end up saying 'Hello!'
* ` ` `
* An example of pressing uppercase ` A `
* ` ` ` js
* await page . keyboard . press ( 'Shift+KeyA' ) ;
* // or
* await page . keyboard . press ( 'Shift+A' ) ;
* ` ` `
* An example to trigger select - all with the keyboard
* ` ` ` js
* // on Windows and Linux
* await page . keyboard . press ( 'Control+A' ) ;
* // on macOS
* await page . keyboard . press ( 'Meta+A' ) ;
* ` ` `
* /
export interface Keyboard {
/ * *
* Dispatches a ` keydown ` event .
* ` key ` can specify the intended keyboardEvent . key value or a single character to generate the text for . A superset of the ` key ` values can be found here . Examples of the keys are :
* ` F1 ` - ` F12 ` , ` Digit0 ` - ` Digit9 ` , ` KeyA ` - ` KeyZ ` , ` Backquote ` , ` Minus ` , ` Equal ` , ` Backslash ` , ` Backspace ` , ` Tab ` , ` Delete ` , ` Escape ` , ` ArrowDown ` , ` End ` , ` Enter ` , ` Home ` , ` Insert ` , ` PageDown ` , ` PageUp ` , ` ArrowRight ` , ` ArrowUp ` , etc .
2020-12-27 01:31:41 +03:00
* Following modification shortcuts are also supported : ` Shift ` , ` Control ` , ` Alt ` , ` Meta ` , ` ShiftLeft ` .
2020-12-27 00:52:05 +03:00
* Holding down ` Shift ` will type the text that corresponds to the ` key ` in the upper case .
* If ` key ` is a single character , it is case - sensitive , so the values ` a ` and ` A ` will generate different respective texts .
* If ` key ` is a modifier key , ` Shift ` , ` Meta ` , ` Control ` , or ` Alt ` , subsequent key presses will be sent with that modifier active . To release the modifier key , use ` keyboard.up(key) ` .
* After the key is pressed once , subsequent calls to ` keyboard.down(key) ` will have repeat set to true . To release the key , use ` keyboard.up(key) ` .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Modifier keys DO influence ` keyboard.down ` . Holding down ` Shift ` will type the text in upper case .
2020-12-27 00:52:05 +03:00
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* /
down ( key : string ) : Promise < void > ;
/ * *
* Dispatches only ` input ` event , does not emit the ` keydown ` , ` keyup ` or ` keypress ` events .
* ` ` ` js
* page . keyboard . insertText ( '嗨' ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Modifier keys DO NOT effect ` keyboard.insertText ` . Holding down ` Shift ` will not type the text in upper case .
2020-12-27 00:52:05 +03:00
* @param text Sets input to the specified text value .
* /
insertText ( text : string ) : Promise < void > ;
/ * *
* ` key ` can specify the intended keyboardEvent . key value or a single character to generate the text for . A superset of the ` key ` values can be found here . Examples of the keys are :
* ` F1 ` - ` F12 ` , ` Digit0 ` - ` Digit9 ` , ` KeyA ` - ` KeyZ ` , ` Backquote ` , ` Minus ` , ` Equal ` , ` Backslash ` , ` Backspace ` , ` Tab ` , ` Delete ` , ` Escape ` , ` ArrowDown ` , ` End ` , ` Enter ` , ` Home ` , ` Insert ` , ` PageDown ` , ` PageUp ` , ` ArrowRight ` , ` ArrowUp ` , etc .
2020-12-27 01:31:41 +03:00
* Following modification shortcuts are also supported : ` Shift ` , ` Control ` , ` Alt ` , ` Meta ` , ` ShiftLeft ` .
2020-12-27 00:52:05 +03:00
* Holding down ` Shift ` will type the text that corresponds to the ` key ` in the upper case .
* If ` key ` is a single character , it is case - sensitive , so the values ` a ` and ` A ` will generate different respective texts .
* Shortcuts such as ` key: "Control+o" ` or ` key: "Control+Shift+T" ` are supported as well . When speficied with the modifier , modifier is pressed and being held while the subsequent key is being pressed .
* ` ` ` js
* const page = await browser . newPage ( ) ;
* await page . goto ( 'https://keycode.info' ) ;
* await page . keyboard . press ( 'A' ) ;
* await page . screenshot ( { path : 'A.png' } ) ;
* await page . keyboard . press ( 'ArrowLeft' ) ;
* await page . screenshot ( { path : 'ArrowLeft.png' } ) ;
* await page . keyboard . press ( 'Shift+O' ) ;
* await page . screenshot ( { path : 'O.png' } ) ;
* await browser . close ( ) ;
* ` ` `
* Shortcut for ` keyboard.down(key) ` and ` keyboard.up(key) ` .
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* @param options
* /
press ( key : string , options ? : {
/ * *
* Time to wait between ` keydown ` and ` keyup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
} ) : Promise < void > ;
/ * *
* Sends a ` keydown ` , ` keypress ` / ` input ` , and ` keyup ` event for each character in the text .
* To press a special key , like ` Control ` or ` ArrowDown ` , use ` keyboard.press(key[, options]) ` .
* ` ` ` js
* await page . keyboard . type ( 'Hello' ) ; // Types instantly
* await page . keyboard . type ( 'World' , { delay : 100 } ) ; // Types slower, like a user
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Modifier keys DO NOT effect ` keyboard.type ` . Holding down ` Shift ` will not type the text in upper case .
2020-12-27 00:52:05 +03:00
* @param text A text to type into a focused element .
* @param options
* /
type ( text : string , options ? : {
/ * *
* Time to wait between key presses in milliseconds . Defaults to 0 .
* /
delay? : number ;
} ) : Promise < void > ;
/ * *
* Dispatches a ` keyup ` event .
* @param key Name of the key to press or a character to generate , such as ` ArrowLeft ` or ` a ` .
* /
up ( key : string ) : Promise < void > ;
}
/ * *
* The Mouse class operates in main - frame CSS pixels relative to the top - left corner of the viewport .
* Every ` page ` object has its own Mouse , accessible with page . mouse .
* ` ` ` js
* // Using ‘ page.mouse’ to trace a 100x100 square.
* await page . mouse . move ( 0 , 0 ) ;
* await page . mouse . down ( ) ;
* await page . mouse . move ( 0 , 100 ) ;
* await page . mouse . move ( 100 , 100 ) ;
* await page . mouse . move ( 100 , 0 ) ;
* await page . mouse . move ( 0 , 0 ) ;
* await page . mouse . up ( ) ;
* ` ` `
* /
export interface Mouse {
/ * *
* Shortcut for ` mouse.move(x, y[, options]) ` , ` mouse.down([options]) ` , ` mouse.up([options]) ` .
* @param x
* @param y
* @param options
* /
click ( x : number , y : number , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
} ) : Promise < void > ;
/ * *
* Shortcut for ` mouse.move(x, y[, options]) ` , ` mouse.down([options]) ` , ` mouse.up([options]) ` , ` mouse.down([options]) ` and ` mouse.up([options]) ` .
* @param x
* @param y
* @param options
* /
dblclick ( x : number , y : number , options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* Time to wait between ` mousedown ` and ` mouseup ` in milliseconds . Defaults to 0 .
* /
delay? : number ;
} ) : Promise < void > ;
/ * *
* Dispatches a ` mousedown ` event .
* @param options
* /
down ( options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
} ) : Promise < void > ;
/ * *
* Dispatches a ` mousemove ` event .
* @param x
* @param y
* @param options
* /
move ( x : number , y : number , options ? : {
/ * *
* defaults to 1 . Sends intermediate ` mousemove ` events .
* /
steps? : number ;
} ) : Promise < void > ;
/ * *
* Dispatches a ` mouseup ` event .
* @param options
* /
up ( options ? : {
/ * *
* Defaults to ` left ` .
* /
button ? : "left" | "middle" | "right" ;
/ * *
* defaults to 1 . See UIEvent . detail .
* /
clickCount? : number ;
} ) : Promise < void > ;
}
/ * *
* The Touchscreen class operates in main - frame CSS pixels relative to the top - left corner of the viewport . Methods on the touchscreen can only be used in browser contexts that have been intialized with ` hasTouch ` set to true .
* /
export interface Touchscreen {
/ * *
* Dispatches a ` touchstart ` and ` touchend ` event with a single touch at the position ( ` x ` , ` y ` ) .
* @param x
* @param y
* /
tap ( x : number , y : number ) : Promise < void > ;
}
/ * *
* Whenever the page sends a request for a network resource the following sequence of events are emitted by Page :
2020-12-27 01:31:41 +03:00
* - ` page.on('request') ` emitted when the request is issued by the page .
* - ` page.on('response') ` emitted when / if the response status and headers are received for the request .
* - ` page.on('requestfinished') ` emitted when the response body is downloaded and the request is complete .
* If request fails at some point , then instead of ` 'requestfinished' ` event ( and possibly instead of 'response' event ) , the ` page.on('requestfailed') ` event is emitted .
2020-12-27 00:52:05 +03:00
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * HTTP Error responses , such as 404 or 503 , are still successful responses from HTTP standpoint , so request will complete with ` 'requestfinished' ` event .
2020-12-27 00:52:05 +03:00
* If request gets a 'redirect' response , the request is successfully finished with the 'requestfinished' event , and a new request is issued to a redirected url .
* /
export interface Request {
/ * *
* The method returns ` null ` unless this request has failed , as reported by ` requestfailed ` event .
* Example of logging of all the failed requests :
* ` ` ` js
* page . on ( 'requestfailed' , request = > {
* console . log ( request . url ( ) + ' ' + request . failure ( ) . errorText ) ;
* } ) ;
* ` ` `
* /
failure ( ) : null | {
/ * *
* Human - readable error message , e . g . ` 'net::ERR_FAILED' ` .
* /
errorText : string ;
} ;
/ * *
* Returns the Frame that initiated this request .
* /
frame ( ) : Frame ;
/ * *
* An object with HTTP headers associated with the request . All header names are lower - case .
* /
headers ( ) : { [ key : string ] : string ; } ;
/ * *
* Whether this request is driving frame ' s navigation .
* /
isNavigationRequest ( ) : boolean ;
/ * *
* Request ' s method ( GET , POST , etc . )
* /
method ( ) : string ;
/ * *
* Request ' s post body , if any .
* /
postData ( ) : null | string ;
/ * *
* Request ' s post body in a binary form , if any .
* /
postDataBuffer ( ) : null | Buffer ;
/ * *
* Returns parsed request ' s body for ` form-urlencoded ` and JSON as a fallback if any .
* When the response is ` application/x-www-form-urlencoded ` then a key / value object of the values will be returned . Otherwise it will be parsed as JSON .
* /
postDataJSON ( ) : null | Object ;
/ * *
* Request that was redirected by the server to this one , if any .
* When the server responds with a redirect , Playwright creates a new Request object . The two requests are connected by ` redirectedFrom() ` and ` redirectedTo() ` methods . When multiple server redirects has happened , it is possible to construct the whole redirect chain by repeatedly calling ` redirectedFrom() ` .
* For example , if the website ` http://example.com ` redirects to ` https://example.com ` :
* ` ` ` js
* const response = await page . goto ( 'http://example.com' ) ;
* console . log ( response . request ( ) . redirectedFrom ( ) . url ( ) ) ; // 'http://example.com'
* ` ` `
* If the website ` https://google.com ` has no redirects :
* ` ` ` js
* const response = await page . goto ( 'https://google.com' ) ;
* console . log ( response . request ( ) . redirectedFrom ( ) ) ; // null
* ` ` `
* /
redirectedFrom ( ) : null | Request ;
/ * *
* New request issued by the browser if the server responded with redirect .
* This method is the opposite of ` request.redirectedFrom() ` :
* ` ` ` js
* console . log ( request . redirectedFrom ( ) . redirectedTo ( ) === request ) ; // true
* ` ` `
* /
redirectedTo ( ) : null | Request ;
/ * *
* Contains the request ' s resource type as it was perceived by the rendering engine . ResourceType will be one of the following : ` document ` , ` stylesheet ` , ` image ` , ` media ` , ` font ` , ` script ` , ` texttrack ` , ` xhr ` , ` fetch ` , ` eventsource ` , ` websocket ` , ` manifest ` , ` other ` .
* /
resourceType ( ) : string ;
/ * *
* Returns the matching Response object , or ` null ` if the response was not received due to error .
* /
response ( ) : Promise < null | Response > ;
/ * *
* Returns resource timing information for given request . Most of the timing values become available upon the response , ` responseEnd ` becomes available when request finishes . Find more information at Resource Timing API .
* ` ` ` js
* const [ request ] = await Promise . all ( [
* page . waitForEvent ( 'requestfinished' ) ,
* page . goto ( httpsServer . EMPTY_PAGE )
* ] ) ;
* console . log ( request . timing ( ) ) ;
* ` ` `
* /
timing ( ) : {
/ * *
* Request start time in milliseconds elapsed since January 1 , 1970 00 :00 : 00 UTC
* /
startTime : number ;
/ * *
* Time immediately before the browser starts the domain name lookup for the resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
domainLookupStart : number ;
/ * *
* Time immediately after the browser starts the domain name lookup for the resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
domainLookupEnd : number ;
/ * *
* Time immediately before the user agent starts establishing the connection to the server to retrieve the resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
connectStart : number ;
/ * *
* Time immediately before the browser starts the handshake process to secure the current connection . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
secureConnectionStart : number ;
/ * *
* Time immediately before the user agent starts establishing the connection to the server to retrieve the resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
connectEnd : number ;
/ * *
* Time immediately before the browser starts requesting the resource from the server , cache , or local resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
requestStart : number ;
/ * *
* Time immediately after the browser starts requesting the resource from the server , cache , or local resource . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
responseStart : number ;
/ * *
* Time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed , whichever comes first . The value is given in milliseconds relative to ` startTime ` , - 1 if not available .
* /
responseEnd : number ;
} ;
/ * *
* URL of the request .
* /
url ( ) : string ;
}
/ * *
* Response class represents responses which are received by page .
* /
export interface Response {
/ * *
* Returns the buffer with response body .
* /
body ( ) : Promise < Buffer > ;
/ * *
* Waits for this response to finish , returns failure error if request failed .
* /
finished ( ) : Promise < null | Error > ;
/ * *
* Returns the Frame that initiated this response .
* /
frame ( ) : Frame ;
/ * *
* Returns the object with HTTP headers associated with the response . All header names are lower - case .
* /
headers ( ) : { [ key : string ] : string ; } ;
/ * *
* Returns the JSON representation of response body .
* This method will throw if the response body is not parsable via ` JSON.parse ` .
* /
json ( ) : Promise < Serializable > ;
/ * *
* Contains a boolean stating whether the response was successful ( status in the range 200 - 299 ) or not .
* /
ok ( ) : boolean ;
/ * *
* Returns the matching Request object .
* /
request ( ) : Request ;
/ * *
* Contains the status code of the response ( e . g . , 200 for a success ) .
* /
status ( ) : number ;
/ * *
* Contains the status text of the response ( e . g . usually an "OK" for a success ) .
* /
statusText ( ) : string ;
/ * *
* Returns the text representation of response body .
* /
text ( ) : Promise < string > ;
/ * *
* Contains the URL of the response .
* /
url ( ) : string ;
}
/ * *
* Selectors can be used to install custom selector engines . See Working with selectors for more information .
* /
export interface Selectors {
/ * *
* An example of registering selector engine that queries elements based on a tag name :
* ` ` ` js
* const { selectors , firefox } = require ( 'playwright' ) ; // Or 'chromium' or 'webkit'.
*
* ( async ( ) = > {
* // Must be a function that evaluates to a selector engine instance.
* const createTagNameEngine = ( ) = > ( {
* // Returns the first element matching given selector in the root's subtree.
* query ( root , selector ) {
* return root . querySelector ( selector ) ;
* } ,
*
* // Returns all elements matching given selector in the root's subtree.
* queryAll ( root , selector ) {
* return Array . from ( root . querySelectorAll ( selector ) ) ;
* }
* } ) ;
*
* // Register the engine. Selectors will be prefixed with "tag=".
* await selectors . register ( 'tag' , createTagNameEngine ) ;
*
* const browser = await firefox . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . setContent ( ` <div><button>Click me</button></div> ` ) ;
*
* // Use the selector prefixed with its name.
* const button = await page . $ ( 'tag=button' ) ;
* // Combine it with other selector engines.
* await page . click ( 'tag=div >> text="Click me"' ) ;
* // Can use it in any methods supporting selectors.
* const buttonCount = await page . $ $eval ( 'tag=button' , buttons = > buttons . length ) ;
*
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* @param name Name that is used in selectors as a prefix , e . g . ` {name: 'foo'} ` enables ` foo=myselectorbody ` selectors . May only contain ` [a-zA-Z0-9_] ` characters .
* @param script Script that evaluates to a selector engine instance .
* @param options
* /
register ( name : string , script : Function | string | {
/ * *
* Path to the JavaScript file . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
/ * *
* Raw script content .
* /
content? : string ;
} , options ? : {
/ * *
* Whether to run this selector engine in isolated JavaScript environment . This environment has access to the same DOM , but not any JavaScript objects from the frame ' s scripts . Defaults to ` false ` . Note that running as a content script is not guaranteed when this engine is used together with other registered engines .
* /
contentScript? : boolean ;
} ) : Promise < void > ;
}
/ * *
* Whenever a network route is set up with ` page.route(url, handler) ` or ` browserContext.route(url, handler) ` , the ` Route ` object allows to handle the route .
* /
export interface Route {
/ * *
* Aborts the route ' s request .
2020-12-27 01:31:41 +03:00
* @param errorCode Optional error code . Defaults to ` failed ` , could be one of the following : - ` 'aborted' ` - An operation was aborted ( due to user action )
* - ` 'accessdenied' ` - Permission to access a resource , other than the network , was denied
* - ` 'addressunreachable' ` - The IP address is unreachable . This usually means that there is no route to the specified host or network .
* - ` 'blockedbyclient' ` - The client chose to block the request .
* - ` 'blockedbyresponse' ` - The request failed because the response was delivered along with requirements which are not met ( 'X-Frame-Options' and 'Content-Security-Policy' ancestor checks , for instance ) .
* - ` 'connectionaborted' ` - A connection timed out as a result of not receiving an ACK for data sent .
* - ` 'connectionclosed' ` - A connection was closed ( corresponding to a TCP FIN ) .
* - ` 'connectionfailed' ` - A connection attempt failed .
* - ` 'connectionrefused' ` - A connection attempt was refused .
* - ` 'connectionreset' ` - A connection was reset ( corresponding to a TCP RST ) .
* - ` 'internetdisconnected' ` - The Internet connection has been lost .
* - ` 'namenotresolved' ` - The host name could not be resolved .
* - ` 'timedout' ` - An operation timed out .
* - ` 'failed' ` - A generic failure occurred .
2020-12-27 00:52:05 +03:00
* /
abort ( errorCode? : string ) : Promise < void > ;
/ * *
* Continues route ' s request with optional overrides .
* ` ` ` js
* await page . route ( '**\/*' , ( route , request ) = > {
* // Override headers
* const headers = {
* . . . request . headers ( ) ,
* foo : 'bar' , // set "foo" header
* origin : undefined , // remove "origin" header
* } ;
* route . continue ( { headers } ) ;
* } ) ;
* ` ` `
* @param overrides Optional request overrides , can override following properties :
* /
continue ( overrides ? : {
/ * *
* If set changes the request URL . New URL must have same protocol as original one .
* /
url? : string ;
/ * *
* If set changes the request method ( e . g . GET or POST )
* /
method? : string ;
/ * *
* If set changes the post data of request
* /
postData? : string | Buffer ;
/ * *
* If set changes the request HTTP headers . Header values will be converted to a string .
* /
headers ? : { [ key : string ] : string ; } ;
} ) : Promise < void > ;
/ * *
* Fulfills route ' s request with given response .
* An example of fulfilling all requests with 404 responses :
* ` ` ` js
* await page . route ( '**\/*' , route = > {
* route . fulfill ( {
* status : 404 ,
* contentType : 'text/plain' ,
* body : 'Not Found!'
* } ) ;
* } ) ;
* ` ` `
* An example of serving static file :
* ` ` ` js
* await page . route ( '**\/xhr_endpoint' , route = > route . fulfill ( { path : 'mock_data.json' } ) ) ;
* ` ` `
* @param response Response that will fulfill this route ' s request .
* /
fulfill ( response : {
/ * *
* Response status code , defaults to ` 200 ` .
* /
status? : number ;
/ * *
* Optional response headers . Header values will be converted to a string .
* /
headers ? : { [ key : string ] : string ; } ;
/ * *
* If set , equals to setting ` Content-Type ` response header .
* /
contentType? : string ;
/ * *
* Optional response body .
* /
body? : string | Buffer ;
/ * *
* Optional file path to respond with . The content type will be inferred from file extension . If ` path ` is a relative path , then it is resolved relative to the current working directory .
* /
path? : string ;
} ) : Promise < void > ;
/ * *
* A request to be routed .
* /
request ( ) : Request ;
}
/ * *
* The WebSocket class represents websocket connections in the page .
* /
export interface WebSocket {
/ * *
* Fired when the websocket closes .
* /
on ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Fired when the websocket recieves a frame .
* /
on ( event : 'framereceived' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket sends a frame .
* /
on ( event : 'framesent' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket has an error .
* /
on ( event : 'socketerror' , listener : ( string : String ) = > void ) : this ;
/ * *
* Fired when the websocket closes .
* /
once ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Fired when the websocket recieves a frame .
* /
once ( event : 'framereceived' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket sends a frame .
* /
once ( event : 'framesent' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket has an error .
* /
once ( event : 'socketerror' , listener : ( string : String ) = > void ) : this ;
/ * *
* Fired when the websocket closes .
* /
addListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Fired when the websocket recieves a frame .
* /
addListener ( event : 'framereceived' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket sends a frame .
* /
addListener ( event : 'framesent' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket has an error .
* /
addListener ( event : 'socketerror' , listener : ( string : String ) = > void ) : this ;
/ * *
* Fired when the websocket closes .
* /
removeListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Fired when the websocket recieves a frame .
* /
removeListener ( event : 'framereceived' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket sends a frame .
* /
removeListener ( event : 'framesent' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket has an error .
* /
removeListener ( event : 'socketerror' , listener : ( string : String ) = > void ) : this ;
/ * *
* Fired when the websocket closes .
* /
off ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Fired when the websocket recieves a frame .
* /
off ( event : 'framereceived' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket sends a frame .
* /
off ( event : 'framesent' , listener : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > void ) : this ;
/ * *
* Fired when the websocket has an error .
* /
off ( event : 'socketerror' , listener : ( string : String ) = > void ) : this ;
/ * *
* Indicates that the web socket has been closed .
* /
isClosed ( ) : boolean ;
/ * *
* Contains the URL of the WebSocket .
* /
url ( ) : string ;
/ * *
* Fired when the websocket closes .
* /
waitForEvent ( event : 'close' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
* Fired when the websocket recieves a frame .
* /
waitForEvent ( event : 'framereceived' , optionsOrPredicate ? : { predicate ? : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > boolean , timeout? : number } | ( ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > boolean ) ) : Promise < {
/ * *
* frame payload
* /
payload : string | Buffer ;
} > ;
/ * *
* Fired when the websocket sends a frame .
* /
waitForEvent ( event : 'framesent' , optionsOrPredicate ? : { predicate ? : ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > boolean , timeout? : number } | ( ( data : {
/ * *
* frame payload
* /
payload : string | Buffer ;
} ) = > boolean ) ) : Promise < {
/ * *
* frame payload
* /
payload : string | Buffer ;
} > ;
/ * *
* Fired when the websocket has an error .
* /
waitForEvent ( event : 'socketerror' , optionsOrPredicate ? : { predicate ? : ( string : String ) = > boolean , timeout? : number } | ( ( string : String ) = > boolean ) ) : Promise < String > ;
}
export interface BrowserServer {
/ * *
* Emitted when the browser server closes .
* /
on ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when the browser server closes .
* /
once ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when the browser server closes .
* /
addListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when the browser server closes .
* /
removeListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Emitted when the browser server closes .
* /
off ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
* Closes the browser gracefully and makes sure the process is terminated .
* /
close ( ) : Promise < void > ;
/ * *
* Kills the browser process and waits for the process to exit .
* /
kill ( ) : Promise < void > ;
/ * *
* Spawned browser application process .
* /
process ( ) : ChildProcess ;
/ * *
* Browser websocket url .
* Browser websocket endpoint which can be used as an argument to ` browserType.connect(params) ` to establish connection to the browser .
* /
wsEndpoint ( ) : string ;
}
/ * *
* Playwright generates a lot of logs and they are accessible via the pluggable logger sink .
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ; // Or 'firefox' or 'webkit'.
*
* ( async ( ) = > {
* const browser = await chromium . launch ( {
* logger : {
* isEnabled : ( name , severity ) = > name === 'browser' ,
* log : ( name , severity , message , args ) = > console . log ( ` ${ name } ${ message } ` )
* }
* } ) ;
* . . .
* } ) ( ) ;
* ` ` `
* /
export interface Logger {
/ * *
* Determines whether sink is interested in the logger with the given name and severity .
* @param name logger name
* @param severity
* /
isEnabled ( name : string , severity : "error" | "info" | "verbose" | "warning" ) : boolean ;
/ * *
* @param name logger name
* @param severity
* @param message log message format
* @param args message arguments
* @param hints optional formatting hints
* /
log ( name : string , severity : "error" | "info" | "verbose" | "warning" , message : string | Error , args : Array < Object > , hints : {
/ * *
2020-12-27 01:31:41 +03:00
* Optional preferred logger color .
2020-12-27 00:52:05 +03:00
* /
color? : string ;
} ) : void ;
}
/ * *
* Chromium - specific features including background pages , service worker support , etc .
* ` ` ` js
* const backgroundPage = await context . waitForEvent ( 'backgroundpage' ) ;
* ` ` `
* /
export interface ChromiumBrowserContext extends BrowserContext {
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'backgroundpage' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new service worker is created in the context .
* /
on ( event : 'serviceworker' , listener : ( worker : Worker ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
on ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
on ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'backgroundpage' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new service worker is created in the context .
* /
once ( event : 'serviceworker' , listener : ( worker : Worker ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
once ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
once ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'backgroundpage' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new service worker is created in the context .
* /
addListener ( event : 'serviceworker' , listener : ( worker : Worker ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
addListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
addListener ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'backgroundpage' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new service worker is created in the context .
* /
removeListener ( event : 'serviceworker' , listener : ( worker : Worker ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
removeListener ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
removeListener ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'backgroundpage' , listener : ( page : Page ) = > void ) : this ;
/ * *
* Emitted when new service worker is created in the context .
* /
off ( event : 'serviceworker' , listener : ( worker : Worker ) = > void ) : this ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
off ( event : 'close' , listener : ( ) = > void ) : this ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
off ( event : 'page' , listener : ( page : Page ) = > void ) : this ;
/ * *
* All existing background pages in the context .
* /
backgroundPages ( ) : Array < Page > ;
/ * *
* Returns the newly created session .
* @param page Page to create new session for .
* /
newCDPSession ( page : Page ) : Promise < CDPSession > ;
/ * *
* All existing service workers in the context .
* /
serviceWorkers ( ) : Array < Worker > ;
/ * *
* Emitted when new background page is created in the context .
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Only works with persistent context .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'backgroundpage' , optionsOrPredicate ? : { predicate ? : ( page : Page ) = > boolean , timeout? : number } | ( ( page : Page ) = > boolean ) ) : Promise < Page > ;
/ * *
* Emitted when new service worker is created in the context .
* /
waitForEvent ( event : 'serviceworker' , optionsOrPredicate ? : { predicate ? : ( worker : Worker ) = > boolean , timeout? : number } | ( ( worker : Worker ) = > boolean ) ) : Promise < Worker > ;
2020-12-27 01:31:41 +03:00
/ * *
* Emitted when Browser context gets closed . This might happen because of one of the following :
* - Browser context is closed .
* - Browser application is closed or crashed .
* - The ` browser.close() ` method was called .
* /
2020-12-27 00:52:05 +03:00
waitForEvent ( event : 'close' , optionsOrPredicate ? : { predicate ? : ( ) = > boolean , timeout? : number } | ( ( ) = > boolean ) ) : Promise < void > ;
/ * *
2020-12-27 01:31:41 +03:00
* The event is emitted when a new Page is created in the BrowserContext . The page may still be loading . The event will also fire for popup pages . See also ` page.on('popup') ` to receive events about popups relevant to a specific page .
2020-12-27 00:52:05 +03:00
* The earliest moment that page is available is when it has navigated to the initial url . For example , when opening a popup with ` window.open('http://example.com') ` , this event will fire when the network request to "http://example.com" is done and its response has started loading in the popup .
* ` ` ` js
* const [ page ] = await Promise . all ( [
* context . waitForEvent ( 'page' ) ,
* page . click ( 'a[target=_blank]' ) ,
* ] ) ;
* console . log ( await page . evaluate ( 'location.href' ) ) ;
* ` ` `
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Use ` page.waitForLoadState([state, options]) ` to wait until the page gets to a particular state ( you should not need it in most cases ) .
2020-12-27 00:52:05 +03:00
* /
waitForEvent ( event : 'page' , optionsOrPredicate ? : { predicate ? : ( page : Page ) = > boolean , timeout? : number } | ( ( page : Page ) = > boolean ) ) : Promise < Page > ;
}
/ * *
* Coverage gathers information about parts of JavaScript and CSS that were used by the page .
* An example of using JavaScript coverage to produce Istambul report for page load :
* ` ` ` js
* const { chromium } = require ( 'playwright' ) ;
* const v8toIstanbul = require ( 'v8-to-istanbul' ) ;
*
* ( async ( ) = > {
* const browser = await chromium . launch ( ) ;
* const page = await browser . newPage ( ) ;
* await page . coverage . startJSCoverage ( ) ;
* await page . goto ( 'https://chromium.org' ) ;
* const coverage = await page . coverage . stopJSCoverage ( ) ;
* for ( const entry of coverage ) {
* const converter = new v8toIstanbul ( '' , 0 , { source : entry.source } ) ;
* await converter . load ( ) ;
* converter . applyCoverage ( entry . functions ) ;
* console . log ( JSON . stringify ( converter . toIstanbul ( ) ) ) ;
* }
* await browser . close ( ) ;
* } ) ( ) ;
* ` ` `
* /
export interface ChromiumCoverage {
/ * *
* Returns coverage is started
* @param options
* /
startCSSCoverage ( options ? : {
/ * *
* Whether to reset coverage on every navigation . Defaults to ` true ` .
* /
resetOnNavigation? : boolean ;
} ) : Promise < void > ;
/ * *
* Returns coverage is started
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * Anonymous scripts are ones that don ' t have an associated url . These are scripts that are dynamically created on the page using ` eval ` or ` new Function ` . If ` reportAnonymousScripts ` is set to ` true ` , anonymous scripts will have ` __playwright_evaluation_script__ ` as their URL .
2020-12-27 00:52:05 +03:00
* @param options
* /
startJSCoverage ( options ? : {
/ * *
* Whether anonymous scripts generated by the page should be reported . Defaults to ` false ` .
* /
reportAnonymousScripts? : boolean ;
/ * *
* Whether to reset coverage on every navigation . Defaults to ` true ` .
* /
resetOnNavigation? : boolean ;
} ) : Promise < void > ;
/ * *
* Returns the array of coverage reports for all stylesheets
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * CSS Coverage doesn ' t include dynamically injected style tags without sourceURLs .
2020-12-27 00:52:05 +03:00
* /
stopCSSCoverage ( ) : Promise < Array < {
/ * *
* StyleSheet URL
* /
url : string ;
/ * *
* StyleSheet content , if available .
* /
text? : string ;
/ * *
* StyleSheet ranges that were used . Ranges are sorted and non - overlapping .
* /
ranges : Array < {
/ * *
* A start offset in text , inclusive
* /
start : number ;
/ * *
* An end offset in text , exclusive
* /
end : number ;
} > ;
} >> ;
/ * *
* Returns the array of coverage reports for all scripts
*
2020-12-27 01:31:41 +03:00
* > * * NOTE * * JavaScript Coverage doesn ' t include anonymous scripts by default . However , scripts with sourceURLs are reported .
2020-12-27 00:52:05 +03:00
* /
stopJSCoverage ( ) : Promise < Array < {
/ * *
* Script URL
* /
url : string ;
/ * *
* Script ID
* /
scriptId : string ;
/ * *
* Script content , if applicable .
* /
source? : string ;
/ * *
* V8 - specific coverage format .
* /
functions : Array < {
functionName : string ;
isBlockCoverage : boolean ;
ranges : Array < {
count : number ;
startOffset : number ;
endOffset : number ;
} > ;
} > ;
} >> ;
}
/ * *
* Firefox browser instance does not expose Firefox - specific features .
* /
export interface FirefoxBrowser extends Browser {
}
/ * *
* WebKit browser instance does not expose WebKit - specific features .
* /
export interface WebKitBrowser extends Browser {
}
export interface BrowserContextOptions {
/ * *
* Whether to automatically download all the attachments . Defaults to ` false ` where all the downloads are canceled .
* /
acceptDownloads? : boolean ;
/ * *
* Toggles bypassing page ' s Content - Security - Policy .
* /
bypassCSP? : boolean ;
/ * *
* Emulates ` 'prefers-colors-scheme' ` media feature , supported values are ` 'light' ` , ` 'dark' ` , ` 'no-preference' ` . See ` page.emulateMedia(params) ` for more details . Defaults to '`light`' .
* /
colorScheme ? : "dark" | "light" | "no-preference" ;
/ * *
* Specify device scale factor ( can be thought of as dpr ) . Defaults to ` 1 ` .
* /
deviceScaleFactor? : number ;
/ * *
* An object containing additional HTTP headers to be sent with every request . All header values must be strings .
* /
extraHTTPHeaders ? : { [ key : string ] : string ; } ;
geolocation? : Geolocation ;
/ * *
* Specifies if viewport supports touch events . Defaults to false .
* /
hasTouch? : boolean ;
/ * *
* Credentials for HTTP authentication .
* /
httpCredentials? : HTTPCredentials ;
/ * *
* Whether to ignore HTTPS errors during navigation . Defaults to ` false ` .
* /
ignoreHTTPSErrors? : boolean ;
/ * *
* Whether the ` meta viewport ` tag is taken into account and touch events are enabled . Defaults to ` false ` . Not supported in Firefox .
* /
isMobile? : boolean ;
/ * *
* Whether or not to enable JavaScript in the context . Defaults to ` true ` .
* /
javaScriptEnabled? : boolean ;
/ * *
* Specify user locale , for example ` en-GB ` , ` de-DE ` , etc . Locale will affect ` navigator.language ` value , ` Accept-Language ` request header value as well as number and date formatting rules .
* /
locale? : string ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Whether to emulate network being offline . Defaults to ` false ` .
* /
offline? : boolean ;
/ * *
* A list of permissions to grant to all pages in this context . See ` browserContext.grantPermissions(permissions[, options]) ` for more details .
* /
permissions? : Array < string > ;
/ * *
* Network proxy settings to use with this context . Note that browser needs to be launched with the global proxy for this option to work . If all contexts override the proxy , global proxy will be never used and can be any string , for example ` launch({ proxy: { server: 'per-context' } }) ` .
* /
proxy ? : {
/ * *
* Proxy to be used for all requests . HTTP and SOCKS proxies are supported , for example ` http://myproxy.com:3128 ` or ` socks5://myproxy.com:3128 ` . Short form ` myproxy.com:3128 ` is considered an HTTP proxy .
* /
server : string ;
/ * *
* Optional coma - separated domains to bypass proxy , for example ` ".com, chromium.org, .domain.com" ` .
* /
bypass? : string ;
/ * *
* Optional username to use if HTTP proxy requires authentication .
* /
username? : string ;
/ * *
* Optional password to use if HTTP proxy requires authentication .
* /
password? : string ;
} ;
/ * *
* Enables HAR recording for all pages into ` recordHar.path ` file . If not specified , the HAR is not recorded . Make sure to await ` browserContext.close() ` for the HAR to be saved .
* /
recordHar ? : {
/ * *
* Optional setting to control whether to omit request content from the HAR . Defaults to ` false ` .
* /
omitContent? : boolean ;
/ * *
* Path on the filesystem to write the HAR file to .
* /
path : string ;
} ;
/ * *
* Enables video recording for all pages into ` recordVideo.dir ` directory . If not specified videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
recordVideo ? : {
/ * *
* Path to the directory to put videos into .
* /
dir : string ;
/ * *
* Optional dimensions of the recorded videos . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of each page will be scaled down if necessary to fit the specified size .
* /
size ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
} ;
/ * *
* Populates context with given storage state . This method can be used to initialize context with logged - in information obtained via ` browserContext.storageState([options]) ` . Either a path to the file with saved storage , or an object with the following fields :
* /
storageState? : string | {
/ * *
* Optional cookies to set for context
* /
cookies? : Array < {
/ * *
* * * required * *
* /
name : string ;
/ * *
* * * required * *
* /
value : string ;
/ * *
* Optional either url or domain / path are required
* /
url? : string ;
/ * *
* Optional either url or domain / path are required
* /
domain? : string ;
/ * *
* Optional either url or domain / path are required
* /
path? : string ;
/ * *
* Optional Unix time in seconds .
* /
expires? : number ;
/ * *
* Optional httpOnly flag
* /
httpOnly? : boolean ;
/ * *
* Optional secure flag
* /
secure? : boolean ;
/ * *
* Optional sameSite flag
* /
sameSite ? : "Lax" | "None" | "Strict" ;
} > ;
/ * *
* Optional localStorage to set for context
* /
origins? : Array < {
origin : string ;
localStorage : Array < {
name : string ;
value : string ;
} > ;
} > ;
} ;
/ * *
* Changes the timezone of the context . See ICU ’ s ` metaZones.txt ` for a list of supported timezone IDs .
* /
timezoneId? : string ;
/ * *
* Specific user agent to use in this context .
* /
userAgent? : string ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videoSize ` . Specifies dimensions of the automatically recorded video . Can only be used if ` videosPath ` is set . If not specified the size will be equal to ` viewport ` . If ` viewport ` is not configured explicitly the video size defaults to 1280 x720 . Actual picture of the page will be scaled down if necessary to fit specified size .
* /
videoSize ? : {
/ * *
* Video frame width .
* /
width : number ;
/ * *
* Video frame height .
* /
height : number ;
} ;
/ * *
* * * NOTE * * Use ` recordVideo ` instead , it takes precedence over ` videosPath ` . Enables video recording for all pages to ` videosPath ` directory . If not specified , videos are not recorded . Make sure to await ` browserContext.close() ` for videos to be saved .
* /
videosPath? : string ;
/ * *
* Sets a consistent viewport for each page . Defaults to an 1280 x720 viewport . ` null ` disables the default viewport .
* /
viewport? : null | ViewportSize ;
}
export interface ViewportSize {
/ * *
* page width in pixels .
* /
width : number ;
/ * *
* page height in pixels .
* /
height : number ;
}
export interface HTTPCredentials {
username : string ;
password : string ;
}
export interface Geolocation {
/ * *
* Latitude between - 90 and 90 .
* /
latitude : number ;
/ * *
* Longitude between - 180 and 180 .
* /
longitude : number ;
/ * *
* Non - negative accuracy value . Defaults to ` 0 ` .
* /
accuracy? : number ;
}
export interface LaunchOptions {
/ * *
* Additional arguments to pass to the browser instance . The list of Chromium flags can be found here .
* /
args? : Array < string > ;
/ * *
* Enable Chromium sandboxing . Defaults to ` false ` .
* /
chromiumSandbox? : boolean ;
/ * *
* * * Chromium - only * * Whether to auto - open a Developer Tools panel for each tab . If this option is ` true ` , the ` headless ` option will be set ` false ` .
* /
devtools? : boolean ;
/ * *
* If specified , accepted downloads are downloaded into this directory . Otherwise , temporary directory is created and is deleted when browser is closed .
* /
downloadsPath? : string ;
/ * *
* Specify environment variables that will be visible to the browser . Defaults to ` process.env ` .
* /
env ? : { [ key : string ] : string | number | boolean ; } ;
/ * *
* Path to a browser executable to run instead of the bundled one . If ` executablePath ` is a relative path , then it is resolved relative to the current working directory . Note that Playwright only works with the bundled Chromium , Firefox or WebKit , use at your own risk .
* /
executablePath? : string ;
/ * *
* Firefox user preferences . Learn more about the Firefox user preferences at ` about:config ` .
* /
firefoxUserPrefs ? : { [ key : string ] : string | number | boolean ; } ;
/ * *
* Close the browser process on SIGHUP . Defaults to ` true ` .
* /
handleSIGHUP? : boolean ;
/ * *
* Close the browser process on Ctrl - C . Defaults to ` true ` .
* /
handleSIGINT? : boolean ;
/ * *
* Close the browser process on SIGTERM . Defaults to ` true ` .
* /
handleSIGTERM? : boolean ;
/ * *
* Whether to run browser in headless mode . More details for Chromium and Firefox . Defaults to ` true ` unless the ` devtools ` option is ` true ` .
* /
headless? : boolean ;
/ * *
* If ` true ` , Playwright does not pass its own configurations args and only uses the ones from ` args ` . If an array is given , then filters out the given default arguments . Dangerous option ; use with care . Defaults to ` false ` .
* /
ignoreDefaultArgs? : boolean | Array < string > ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Network proxy settings .
* /
proxy ? : {
/ * *
* Proxy to be used for all requests . HTTP and SOCKS proxies are supported , for example ` http://myproxy.com:3128 ` or ` socks5://myproxy.com:3128 ` . Short form ` myproxy.com:3128 ` is considered an HTTP proxy .
* /
server : string ;
/ * *
* Optional coma - separated domains to bypass proxy , for example ` ".com, chromium.org, .domain.com" ` .
* /
bypass? : string ;
/ * *
* Optional username to use if HTTP proxy requires authentication .
* /
username? : string ;
/ * *
* Optional password to use if HTTP proxy requires authentication .
* /
password? : string ;
} ;
/ * *
* Slows down Playwright operations by the specified amount of milliseconds . Useful so that you can see what is going on .
* /
slowMo? : number ;
/ * *
* Maximum time in milliseconds to wait for the browser instance to start . Defaults to ` 30000 ` ( 30 seconds ) . Pass ` 0 ` to disable timeout .
* /
timeout? : number ;
}
export interface ConnectOptions {
/ * *
* A browser websocket endpoint to connect to . * * required * *
* /
wsEndpoint : string ;
/ * *
* Slows down Playwright operations by the specified amount of milliseconds . Useful so that you can see what is going on . Defaults to 0 .
* /
slowMo? : number ;
/ * *
* Logger sink for Playwright logging .
* /
logger? : Logger ;
/ * *
* Maximum time in milliseconds to wait for the connection to be established . Defaults to ` 30000 ` ( 30 seconds ) . Pass ` 0 ` to disable timeout .
* /
timeout? : number ;
}
interface ElementHandleWaitForSelectorOptions {
/ * *
* Defaults to ` 'visible' ` . Can be either :
2020-12-27 01:31:41 +03:00
* - ` 'attached' ` - wait for element to be present in DOM .
* - ` 'detached' ` - wait for element to not be present in DOM .
* - ` 'visible' ` - wait for element to have non - empty bounding box and no ` visibility:hidden ` . Note that element without any content or with ` display:none ` has an empty bounding box and is not considered visible .
* - ` 'hidden' ` - wait for element to be either detached from DOM , or have an empty bounding box or ` visibility:hidden ` . This is opposite to the ` 'visible' ` option .
2020-12-27 00:52:05 +03:00
* /
state ? : "attached" | "detached" | "hidden" | "visible" ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
}
export interface Cookie {
name : string ;
value : string ;
domain : string ;
path : string ;
/ * *
* Unix time in seconds .
* /
expires : number ;
httpOnly : boolean ;
secure : boolean ;
sameSite : "Lax" | "None" | "Strict" ;
}
interface PageWaitForSelectorOptions {
/ * *
* Defaults to ` 'visible' ` . Can be either :
2020-12-27 01:31:41 +03:00
* - ` 'attached' ` - wait for element to be present in DOM .
* - ` 'detached' ` - wait for element to not be present in DOM .
* - ` 'visible' ` - wait for element to have non - empty bounding box and no ` visibility:hidden ` . Note that element without any content or with ` display:none ` has an empty bounding box and is not considered visible .
* - ` 'hidden' ` - wait for element to be either detached from DOM , or have an empty bounding box or ` visibility:hidden ` . This is opposite to the ` 'visible' ` option .
2020-12-27 00:52:05 +03:00
* /
state ? : "attached" | "detached" | "hidden" | "visible" ;
/ * *
* Maximum time in milliseconds , defaults to 30 seconds , pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` or ` page.setDefaultTimeout(timeout) ` methods .
* /
timeout? : number ;
}
interface PageWaitForFunctionOptions {
/ * *
* If ` polling ` is ` 'raf' ` , then ` pageFunction ` is constantly executed in ` requestAnimationFrame ` callback . If ` polling ` is a number , then it is treated as an interval in milliseconds at which the function would be executed . Defaults to ` raf ` .
* /
polling? : number | "raf" ;
/ * *
* maximum time to wait for in milliseconds . Defaults to ` 30000 ` ( 30 seconds ) . Pass ` 0 ` to disable timeout . The default value can be changed by using the ` browserContext.setDefaultTimeout(timeout) ` .
* /
timeout? : number ;
}
type Devices = {
"Blackberry PlayBook" : DeviceDescriptor ;
"Blackberry PlayBook landscape" : DeviceDescriptor ;
"BlackBerry Z30" : DeviceDescriptor ;
"BlackBerry Z30 landscape" : DeviceDescriptor ;
"Galaxy Note 3" : DeviceDescriptor ;
"Galaxy Note 3 landscape" : DeviceDescriptor ;
"Galaxy Note II" : DeviceDescriptor ;
"Galaxy Note II landscape" : DeviceDescriptor ;
"Galaxy S III" : DeviceDescriptor ;
"Galaxy S III landscape" : DeviceDescriptor ;
"Galaxy S5" : DeviceDescriptor ;
"Galaxy S5 landscape" : DeviceDescriptor ;
"iPad (gen 6)" : DeviceDescriptor ;
"iPad (gen 6) landscape" : DeviceDescriptor ;
"iPad (gen 7)" : DeviceDescriptor ;
"iPad (gen 7) landscape" : DeviceDescriptor ;
"iPad Mini" : DeviceDescriptor ;
"iPad Mini landscape" : DeviceDescriptor ;
"iPad Pro 11" : DeviceDescriptor ;
"iPad Pro 11 landscape" : DeviceDescriptor ;
"iPhone 6" : DeviceDescriptor ;
"iPhone 6 landscape" : DeviceDescriptor ;
"iPhone 6 Plus" : DeviceDescriptor ;
"iPhone 6 Plus landscape" : DeviceDescriptor ;
"iPhone 7" : DeviceDescriptor ;
"iPhone 7 landscape" : DeviceDescriptor ;
"iPhone 7 Plus" : DeviceDescriptor ;
"iPhone 7 Plus landscape" : DeviceDescriptor ;
"iPhone 8" : DeviceDescriptor ;
"iPhone 8 landscape" : DeviceDescriptor ;
"iPhone 8 Plus" : DeviceDescriptor ;
"iPhone 8 Plus landscape" : DeviceDescriptor ;
"iPhone SE" : DeviceDescriptor ;
"iPhone SE landscape" : DeviceDescriptor ;
"iPhone X" : DeviceDescriptor ;
"iPhone X landscape" : DeviceDescriptor ;
"iPhone XR" : DeviceDescriptor ;
"iPhone XR landscape" : DeviceDescriptor ;
"iPhone 11" : DeviceDescriptor ;
"iPhone 11 landscape" : DeviceDescriptor ;
"iPhone 11 Pro" : DeviceDescriptor ;
"iPhone 11 Pro landscape" : DeviceDescriptor ;
"iPhone 11 Pro Max" : DeviceDescriptor ;
"iPhone 11 Pro Max landscape" : DeviceDescriptor ;
"JioPhone 2" : DeviceDescriptor ;
"JioPhone 2 landscape" : DeviceDescriptor ;
"Kindle Fire HDX" : DeviceDescriptor ;
"Kindle Fire HDX landscape" : DeviceDescriptor ;
"LG Optimus L70" : DeviceDescriptor ;
"LG Optimus L70 landscape" : DeviceDescriptor ;
"Microsoft Lumia 550" : DeviceDescriptor ;
"Microsoft Lumia 550 landscape" : DeviceDescriptor ;
"Microsoft Lumia 950" : DeviceDescriptor ;
"Microsoft Lumia 950 landscape" : DeviceDescriptor ;
"Nexus 10" : DeviceDescriptor ;
"Nexus 10 landscape" : DeviceDescriptor ;
"Nexus 4" : DeviceDescriptor ;
"Nexus 4 landscape" : DeviceDescriptor ;
"Nexus 5" : DeviceDescriptor ;
"Nexus 5 landscape" : DeviceDescriptor ;
"Nexus 5X" : DeviceDescriptor ;
"Nexus 5X landscape" : DeviceDescriptor ;
"Nexus 6" : DeviceDescriptor ;
"Nexus 6 landscape" : DeviceDescriptor ;
"Nexus 6P" : DeviceDescriptor ;
"Nexus 6P landscape" : DeviceDescriptor ;
"Nexus 7" : DeviceDescriptor ;
"Nexus 7 landscape" : DeviceDescriptor ;
"Nokia Lumia 520" : DeviceDescriptor ;
"Nokia Lumia 520 landscape" : DeviceDescriptor ;
"Nokia N9" : DeviceDescriptor ;
"Nokia N9 landscape" : DeviceDescriptor ;
"Pixel 2" : DeviceDescriptor ;
"Pixel 2 landscape" : DeviceDescriptor ;
"Pixel 2 XL" : DeviceDescriptor ;
"Pixel 2 XL landscape" : DeviceDescriptor ;
[ key : string ] : DeviceDescriptor ;
}