docs: create a single top-level TOC for api.md (#561)

This patch:
- creates a single top-level TOC for api.md
- adds a TOC for each class in the api.md
This commit is contained in:
Andrey Lushnikov 2020-01-22 12:21:45 -08:00 committed by Pavel Feldman
parent f887797327
commit eab8f92ac8
3 changed files with 386 additions and 262 deletions

View File

@ -4,282 +4,35 @@
##### Table of Contents ##### Table of Contents
<!-- GEN:toc --> <!-- GEN:toc-top-level -->
- [class: Playwright](#class-playwright) - [class: Playwright](#class-playwright)
* [playwright.devices](#playwrightdevices)
* [playwright.errors](#playwrighterrors)
* [playwright.executablePath()](#playwrightexecutablepath)
- [class: Browser](#class-browser) - [class: Browser](#class-browser)
* [event: 'disconnected'](#event-disconnected)
* [browser.browserContexts()](#browserbrowsercontexts)
* [browser.close()](#browserclose)
* [browser.defaultContext()](#browserdefaultcontext)
* [browser.disconnect()](#browserdisconnect)
* [browser.isConnected()](#browserisconnected)
* [browser.newContext(options)](#browsernewcontextoptions)
- [class: BrowserContext](#class-browsercontext) - [class: BrowserContext](#class-browsercontext)
* [browserContext.clearCookies()](#browsercontextclearcookies)
* [browserContext.clearPermissions()](#browsercontextclearpermissions)
* [browserContext.close()](#browsercontextclose)
* [browserContext.cookies([...urls])](#browsercontextcookiesurls)
* [browserContext.newPage(url)](#browsercontextnewpageurl)
* [browserContext.pages()](#browsercontextpages)
* [browserContext.setCookies(cookies)](#browsercontextsetcookiescookies)
* [browserContext.setGeolocation(geolocation)](#browsercontextsetgeolocationgeolocation)
* [browserContext.setPermissions(origin, permissions[])](#browsercontextsetpermissionsorigin-permissions)
- [class: ConsoleMessage](#class-consolemessage) - [class: ConsoleMessage](#class-consolemessage)
* [consoleMessage.args()](#consolemessageargs)
* [consoleMessage.location()](#consolemessagelocation)
* [consoleMessage.text()](#consolemessagetext)
* [consoleMessage.type()](#consolemessagetype)
- [class: Dialog](#class-dialog) - [class: Dialog](#class-dialog)
* [dialog.accept([promptText])](#dialogacceptprompttext)
* [dialog.defaultValue()](#dialogdefaultvalue)
* [dialog.dismiss()](#dialogdismiss)
* [dialog.message()](#dialogmessage)
* [dialog.type()](#dialogtype)
- [class: ElementHandle](#class-elementhandle) - [class: ElementHandle](#class-elementhandle)
* [elementHandle.$(selector)](#elementhandleselector)
* [elementHandle.$$(selector)](#elementhandleselector-1)
* [elementHandle.$$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args)
* [elementHandle.$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args-1)
* [elementHandle.boundingBox()](#elementhandleboundingbox)
* [elementHandle.click([options])](#elementhandleclickoptions)
* [elementHandle.contentFrame()](#elementhandlecontentframe)
* [elementHandle.dblclick([options])](#elementhandledblclickoptions)
* [elementHandle.fill(value)](#elementhandlefillvalue)
* [elementHandle.focus()](#elementhandlefocus)
* [elementHandle.hover([options])](#elementhandlehoveroptions)
* [elementHandle.ownerFrame()](#elementhandleownerframe)
* [elementHandle.press(key[, options])](#elementhandlepresskey-options)
* [elementHandle.screenshot([options])](#elementhandlescreenshotoptions)
* [elementHandle.scrollIntoViewIfNeeded()](#elementhandlescrollintoviewifneeded)
* [elementHandle.select(...values)](#elementhandleselectvalues)
* [elementHandle.setInputFiles(...files)](#elementhandlesetinputfilesfiles)
* [elementHandle.toString()](#elementhandletostring)
* [elementHandle.tripleclick([options])](#elementhandletripleclickoptions)
* [elementHandle.type(text[, options])](#elementhandletypetext-options)
* [elementHandle.visibleRatio()](#elementhandlevisibleratio)
- [class: Frame](#class-frame) - [class: Frame](#class-frame)
* [frame.$(selector)](#frameselector)
* [frame.$$(selector)](#frameselector-1)
* [frame.$$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args)
* [frame.$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args-1)
* [frame.$wait(selector, pageFunction[, options[, ...args]])](#framewaitselector-pagefunction-options-args)
* [frame.addScriptTag(options)](#frameaddscripttagoptions)
* [frame.addStyleTag(options)](#frameaddstyletagoptions)
* [frame.childFrames()](#framechildframes)
* [frame.click(selector[, options])](#frameclickselector-options)
* [frame.content()](#framecontent)
* [frame.dblclick(selector[, options])](#framedblclickselector-options)
* [frame.evaluate(pageFunction[, ...args])](#frameevaluatepagefunction-args)
* [frame.evaluateHandle(pageFunction[, ...args])](#frameevaluatehandlepagefunction-args)
* [frame.fill(selector, value, options)](#framefillselector-value-options)
* [frame.focus(selector, options)](#framefocusselector-options)
* [frame.goto(url[, options])](#framegotourl-options)
* [frame.hover(selector[, options])](#framehoverselector-options)
* [frame.isDetached()](#frameisdetached)
* [frame.name()](#framename)
* [frame.parentFrame()](#frameparentframe)
* [frame.select(selector, value, options)](#frameselectselector-value-options)
* [frame.setContent(html[, options])](#framesetcontenthtml-options)
* [frame.title()](#frametitle)
* [frame.tripleclick(selector[, options])](#frametripleclickselector-options)
* [frame.type(selector, text[, options])](#frametypeselector-text-options)
* [frame.url()](#frameurl)
* [frame.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#framewaitforselectororfunctionortimeout-options-args)
* [frame.waitForFunction(pageFunction[, options[, ...args]])](#framewaitforfunctionpagefunction-options-args)
* [frame.waitForLoadState([options])](#framewaitforloadstateoptions)
* [frame.waitForNavigation([options])](#framewaitfornavigationoptions)
* [frame.waitForSelector(selector[, options])](#framewaitforselectorselector-options)
- [class: JSHandle](#class-jshandle) - [class: JSHandle](#class-jshandle)
* [jsHandle.asElement()](#jshandleaselement)
* [jsHandle.dispose()](#jshandledispose)
* [jsHandle.evaluate(pageFunction[, ...args])](#jshandleevaluatepagefunction-args)
* [jsHandle.evaluateHandle(pageFunction[, ...args])](#jshandleevaluatehandlepagefunction-args)
* [jsHandle.getProperties()](#jshandlegetproperties)
* [jsHandle.getProperty(propertyName)](#jshandlegetpropertypropertyname)
* [jsHandle.jsonValue()](#jshandlejsonvalue)
- [class: Keyboard](#class-keyboard) - [class: Keyboard](#class-keyboard)
* [keyboard.down(key[, options])](#keyboarddownkey-options)
* [keyboard.press(key[, options])](#keyboardpresskey-options)
* [keyboard.sendCharacters(text)](#keyboardsendcharacterstext)
* [keyboard.type(text[, options])](#keyboardtypetext-options)
* [keyboard.up(key)](#keyboardupkey)
- [class: Mouse](#class-mouse) - [class: Mouse](#class-mouse)
* [mouse.click(x, y[, options])](#mouseclickx-y-options)
* [mouse.dblclick(x, y[, options])](#mousedblclickx-y-options)
* [mouse.down([options])](#mousedownoptions)
* [mouse.move(x, y[, options])](#mousemovex-y-options)
* [mouse.tripleclick(x, y[, options])](#mousetripleclickx-y-options)
* [mouse.up([options])](#mouseupoptions)
- [class: Page](#class-page) - [class: Page](#class-page)
* [event: 'close'](#event-close)
* [event: 'console'](#event-console)
* [event: 'dialog'](#event-dialog)
* [event: 'domcontentloaded'](#event-domcontentloaded)
* [event: 'filechooser'](#event-filechooser)
* [event: 'frameattached'](#event-frameattached)
* [event: 'framedetached'](#event-framedetached)
* [event: 'framenavigated'](#event-framenavigated)
* [event: 'load'](#event-load)
* [event: 'pageerror'](#event-pageerror)
* [event: 'popup'](#event-popup)
* [event: 'request'](#event-request)
* [event: 'requestfailed'](#event-requestfailed)
* [event: 'requestfinished'](#event-requestfinished)
* [event: 'response'](#event-response)
* [event: 'workercreated'](#event-workercreated)
* [event: 'workerdestroyed'](#event-workerdestroyed)
* [page.$(selector)](#pageselector)
* [page.$$(selector)](#pageselector-1)
* [page.$$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args)
* [page.$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args-1)
* [page.$wait(selector, pageFunction[, options[, ...args]])](#pagewaitselector-pagefunction-options-args)
* [page.accessibility](#pageaccessibility)
* [page.addScriptTag(options)](#pageaddscripttagoptions)
* [page.addStyleTag(options)](#pageaddstyletagoptions)
* [page.authenticate(credentials)](#pageauthenticatecredentials)
* [page.browserContext()](#pagebrowsercontext)
* [page.click(selector[, options])](#pageclickselector-options)
* [page.close([options])](#pagecloseoptions)
* [page.content()](#pagecontent)
* [page.coverage](#pagecoverage)
* [page.dblclick(selector[, options])](#pagedblclickselector-options)
* [page.emulateMedia(options)](#pageemulatemediaoptions)
* [page.evaluate(pageFunction[, ...args])](#pageevaluatepagefunction-args)
* [page.evaluateHandle(pageFunction[, ...args])](#pageevaluatehandlepagefunction-args)
* [page.evaluateOnNewDocument(pageFunction[, ...args])](#pageevaluateonnewdocumentpagefunction-args)
* [page.exposeFunction(name, playwrightFunction)](#pageexposefunctionname-playwrightfunction)
* [page.fill(selector, value, options)](#pagefillselector-value-options)
* [page.focus(selector, options)](#pagefocusselector-options)
* [page.frames()](#pageframes)
* [page.goBack([options])](#pagegobackoptions)
* [page.goForward([options])](#pagegoforwardoptions)
* [page.goto(url[, options])](#pagegotourl-options)
* [page.hover(selector[, options])](#pagehoverselector-options)
* [page.isClosed()](#pageisclosed)
* [page.keyboard](#pagekeyboard)
* [page.mainFrame()](#pagemainframe)
* [page.mouse](#pagemouse)
* [page.pdf([options])](#pagepdfoptions)
* [page.reload([options])](#pagereloadoptions)
* [page.screenshot([options])](#pagescreenshotoptions)
* [page.select(selector, value, options)](#pageselectselector-value-options)
* [page.setCacheEnabled([enabled])](#pagesetcacheenabledenabled)
* [page.setContent(html[, options])](#pagesetcontenthtml-options)
* [page.setDefaultNavigationTimeout(timeout)](#pagesetdefaultnavigationtimeouttimeout)
* [page.setDefaultTimeout(timeout)](#pagesetdefaulttimeouttimeout)
* [page.setExtraHTTPHeaders(headers)](#pagesetextrahttpheadersheaders)
* [page.setOfflineMode(enabled)](#pagesetofflinemodeenabled)
* [page.setRequestInterception(enabled)](#pagesetrequestinterceptionenabled)
* [page.setViewport(viewport)](#pagesetviewportviewport)
* [page.title()](#pagetitle)
* [page.tripleclick(selector[, options])](#pagetripleclickselector-options)
* [page.type(selector, text[, options])](#pagetypeselector-text-options)
* [page.url()](#pageurl)
* [page.viewport()](#pageviewport)
* [page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#pagewaitforselectororfunctionortimeout-options-args)
* [page.waitForEvent(event[, optionsOrPredicate])](#pagewaitforeventevent-optionsorpredicate)
* [page.waitForFunction(pageFunction[, options[, ...args]])](#pagewaitforfunctionpagefunction-options-args)
* [page.waitForLoadState([options])](#pagewaitforloadstateoptions)
* [page.waitForNavigation([options])](#pagewaitfornavigationoptions)
* [page.waitForRequest(urlOrPredicate[, options])](#pagewaitforrequesturlorpredicate-options)
* [page.waitForResponse(urlOrPredicate[, options])](#pagewaitforresponseurlorpredicate-options)
* [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options)
* [page.workers()](#pageworkers)
- [class: Request](#class-request) - [class: Request](#class-request)
* [request.abort([errorCode])](#requestaborterrorcode)
* [request.continue([overrides])](#requestcontinueoverrides)
* [request.failure()](#requestfailure)
* [request.frame()](#requestframe)
* [request.fulfill(response)](#requestfulfillresponse)
* [request.headers()](#requestheaders)
* [request.isNavigationRequest()](#requestisnavigationrequest)
* [request.method()](#requestmethod)
* [request.postData()](#requestpostdata)
* [request.redirectChain()](#requestredirectchain)
* [request.resourceType()](#requestresourcetype)
* [request.response()](#requestresponse)
* [request.url()](#requesturl)
- [class: Response](#class-response) - [class: Response](#class-response)
* [response.buffer()](#responsebuffer)
* [response.frame()](#responseframe)
* [response.headers()](#responseheaders)
* [response.json()](#responsejson)
* [response.ok()](#responseok)
* [response.remoteAddress()](#responseremoteaddress)
* [response.request()](#responserequest)
* [response.status()](#responsestatus)
* [response.statusText()](#responsestatustext)
* [response.text()](#responsetext)
* [response.url()](#responseurl)
- [class: TimeoutError](#class-timeouterror) - [class: TimeoutError](#class-timeouterror)
- [class: Accessibility](#class-accessibility) - [class: Accessibility](#class-accessibility)
* [accessibility.snapshot([options])](#accessibilitysnapshotoptions)
- [class: Coverage](#class-coverage) - [class: Coverage](#class-coverage)
* [coverage.startCSSCoverage([options])](#coveragestartcsscoverageoptions)
* [coverage.startJSCoverage([options])](#coveragestartjscoverageoptions)
* [coverage.stopCSSCoverage()](#coveragestopcsscoverage)
* [coverage.stopJSCoverage()](#coveragestopjscoverage)
- [class: Worker](#class-worker) - [class: Worker](#class-worker)
* [worker.evaluate(pageFunction[, ...args])](#workerevaluatepagefunction-args)
* [worker.evaluateHandle(pageFunction[, ...args])](#workerevaluatehandlepagefunction-args)
* [worker.url()](#workerurl)
- [class: ChromiumPlaywright](#class-chromiumplaywright) - [class: ChromiumPlaywright](#class-chromiumplaywright)
* [chromiumPlaywright.connect(options)](#chromiumplaywrightconnectoptions)
* [chromiumPlaywright.defaultArgs([options])](#chromiumplaywrightdefaultargsoptions)
* [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions)
* [chromiumPlaywright.launchServer([options])](#chromiumplaywrightlaunchserveroptions)
- [class: ChromiumBrowser](#class-chromiumbrowser) - [class: ChromiumBrowser](#class-chromiumbrowser)
* [event: 'targetchanged'](#event-targetchanged)
* [event: 'targetcreated'](#event-targetcreated)
* [event: 'targetdestroyed'](#event-targetdestroyed)
* [chromiumBrowser.browserTarget()](#chromiumbrowserbrowsertarget)
* [chromiumBrowser.pageTarget(page)](#chromiumbrowserpagetargetpage)
* [chromiumBrowser.serviceWorker(target)](#chromiumbrowserserviceworkertarget)
* [chromiumBrowser.startTracing(page, [options])](#chromiumbrowserstarttracingpage-options)
* [chromiumBrowser.stopTracing()](#chromiumbrowserstoptracing)
* [chromiumBrowser.targets(context)](#chromiumbrowsertargetscontext)
* [chromiumBrowser.waitForTarget(predicate[, options])](#chromiumbrowserwaitfortargetpredicate-options)
- [class: ChromiumBrowserServer](#class-chromiumbrowserserver) - [class: ChromiumBrowserServer](#class-chromiumbrowserserver)
* [chromiumBrowserServer.close()](#chromiumbrowserserverclose)
* [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect)
* [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions)
* [chromiumBrowserServer.process()](#chromiumbrowserserverprocess)
* [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint)
- [class: ChromiumSession](#class-chromiumsession) - [class: ChromiumSession](#class-chromiumsession)
* [chromiumSession.detach()](#chromiumsessiondetach)
* [chromiumSession.send(method[, params])](#chromiumsessionsendmethod-params)
- [class: ChromiumTarget](#class-chromiumtarget) - [class: ChromiumTarget](#class-chromiumtarget)
* [chromiumTarget.browserContext()](#chromiumtargetbrowsercontext)
* [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession)
* [chromiumTarget.opener()](#chromiumtargetopener)
* [chromiumTarget.page()](#chromiumtargetpage)
* [chromiumTarget.type()](#chromiumtargettype)
* [chromiumTarget.url()](#chromiumtargeturl)
- [class: FirefoxPlaywright](#class-firefoxplaywright) - [class: FirefoxPlaywright](#class-firefoxplaywright)
* [firefoxPlaywright.connect(options)](#firefoxplaywrightconnectoptions)
* [firefoxPlaywright.defaultArgs([options])](#firefoxplaywrightdefaultargsoptions)
* [firefoxPlaywright.launch([options])](#firefoxplaywrightlaunchoptions)
* [firefoxPlaywright.launchServer([options])](#firefoxplaywrightlaunchserveroptions)
- [class: FirefoxBrowser](#class-firefoxbrowser) - [class: FirefoxBrowser](#class-firefoxbrowser)
- [class: FirefoxBrowserServer](#class-firefoxbrowserserver) - [class: FirefoxBrowserServer](#class-firefoxbrowserserver)
* [firefoxBrowserServer.close()](#firefoxbrowserserverclose)
* [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect)
* [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions)
* [firefoxBrowserServer.process()](#firefoxbrowserserverprocess)
* [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint)
- [class: WebKitPlaywright](#class-webkitplaywright) - [class: WebKitPlaywright](#class-webkitplaywright)
* [webkitPlaywright.defaultArgs([options])](#webkitplaywrightdefaultargsoptions)
* [webkitPlaywright.launch([options])](#webkitplaywrightlaunchoptions)
* [webkitPlaywright.launchServer([options])](#webkitplaywrightlaunchserveroptions)
- [class: WebKitBrowser](#class-webkitbrowser) - [class: WebKitBrowser](#class-webkitbrowser)
- [class: WebKitBrowserServer](#class-webkitbrowserserver) - [class: WebKitBrowserServer](#class-webkitbrowserserver)
* [webKitBrowserServer.close()](#webkitbrowserserverclose)
* [webKitBrowserServer.connect()](#webkitbrowserserverconnect)
* [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions)
* [webKitBrowserServer.process()](#webkitbrowserserverprocess)
- [Working with selectors](#working-with-selectors) - [Working with selectors](#working-with-selectors)
- [Working with Chrome Extensions](#working-with-chrome-extensions) - [Working with Chrome Extensions](#working-with-chrome-extensions)
- [Downloaded browsers](#downloaded-browsers) - [Downloaded browsers](#downloaded-browsers)
@ -305,6 +58,12 @@ See [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions), [f
Playwright automatically downloads browser executables during installation, see [Downloaded browsers](#downloaded-browsers) for more information. Playwright automatically downloads browser executables during installation, see [Downloaded browsers](#downloaded-browsers) for more information.
<!-- GEN:toc -->
- [playwright.devices](#playwrightdevices)
- [playwright.errors](#playwrighterrors)
- [playwright.executablePath()](#playwrightexecutablepath)
<!-- GEN:stop -->
#### playwright.devices #### playwright.devices
- returns: <[Object]> - returns: <[Object]>
@ -382,6 +141,15 @@ const playwright = require('playwright').webkit; // Or 'chromium' or 'firefox'.
await browser.close(); await browser.close();
})(); })();
``` ```
<!-- GEN:toc -->
- [event: 'disconnected'](#event-disconnected)
- [browser.browserContexts()](#browserbrowsercontexts)
- [browser.close()](#browserclose)
- [browser.defaultContext()](#browserdefaultcontext)
- [browser.disconnect()](#browserdisconnect)
- [browser.isConnected()](#browserisconnected)
- [browser.newContext(options)](#browsernewcontextoptions)
<!-- GEN:stop -->
#### event: 'disconnected' #### event: 'disconnected'
Emitted when Playwright gets disconnected from the browser instance. This might happen because of one of the following: Emitted when Playwright gets disconnected from the browser instance. This might happen because of one of the following:
@ -466,6 +234,18 @@ const page = await context.newPage('https://example.com');
await context.close(); await context.close();
``` ```
<!-- GEN:toc -->
- [browserContext.clearCookies()](#browsercontextclearcookies)
- [browserContext.clearPermissions()](#browsercontextclearpermissions)
- [browserContext.close()](#browsercontextclose)
- [browserContext.cookies([...urls])](#browsercontextcookiesurls)
- [browserContext.newPage(url)](#browsercontextnewpageurl)
- [browserContext.pages()](#browsercontextpages)
- [browserContext.setCookies(cookies)](#browsercontextsetcookiescookies)
- [browserContext.setGeolocation(geolocation)](#browsercontextsetgeolocationgeolocation)
- [browserContext.setPermissions(origin, permissions[])](#browsercontextsetpermissionsorigin-permissions)
<!-- GEN:stop -->
#### browserContext.clearCookies() #### browserContext.clearCookies()
- returns: <[Promise]> - returns: <[Promise]>
@ -584,6 +364,13 @@ await context.setPermissions('https://html5demos.com', ['geolocation']);
[ConsoleMessage] objects are dispatched by page via the ['console'](#event-console) event. [ConsoleMessage] objects are dispatched by page via the ['console'](#event-console) event.
<!-- GEN:toc -->
- [consoleMessage.args()](#consolemessageargs)
- [consoleMessage.location()](#consolemessagelocation)
- [consoleMessage.text()](#consolemessagetext)
- [consoleMessage.type()](#consolemessagetype)
<!-- GEN:stop -->
#### consoleMessage.args() #### consoleMessage.args()
- returns: <[Array]<[JSHandle]>> - returns: <[Array]<[JSHandle]>>
@ -622,6 +409,14 @@ const playwright = require('playwright').chromium; // Or 'firefox' or 'webkit'.
})(); })();
``` ```
<!-- GEN:toc -->
- [dialog.accept([promptText])](#dialogacceptprompttext)
- [dialog.defaultValue()](#dialogdefaultvalue)
- [dialog.dismiss()](#dialogdismiss)
- [dialog.message()](#dialogmessage)
- [dialog.type()](#dialogtype)
<!-- GEN:stop -->
#### dialog.accept([promptText]) #### dialog.accept([promptText])
- `promptText` <[string]> A text to enter in prompt. Does not cause any effects if the dialog's `type` is not prompt. - `promptText` <[string]> A text to enter in prompt. Does not cause any effects if the dialog's `type` is not prompt.
- returns: <[Promise]> Promise which resolves when the dialog has been accepted. - returns: <[Promise]> Promise which resolves when the dialog has been accepted.
@ -660,6 +455,30 @@ ElementHandle prevents DOM element from garbage collection unless the handle is
ElementHandle instances can be used as arguments in [`page.$eval()`](#pageevalselector-pagefunction-args) and [`page.evaluate()`](#pageevaluatepagefunction-args) methods. ElementHandle instances can be used as arguments in [`page.$eval()`](#pageevalselector-pagefunction-args) and [`page.evaluate()`](#pageevaluatepagefunction-args) methods.
<!-- GEN:toc -->
- [elementHandle.$(selector)](#elementhandleselector)
- [elementHandle.$$(selector)](#elementhandleselector-1)
- [elementHandle.$$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args)
- [elementHandle.$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args-1)
- [elementHandle.boundingBox()](#elementhandleboundingbox)
- [elementHandle.click([options])](#elementhandleclickoptions)
- [elementHandle.contentFrame()](#elementhandlecontentframe)
- [elementHandle.dblclick([options])](#elementhandledblclickoptions)
- [elementHandle.fill(value)](#elementhandlefillvalue)
- [elementHandle.focus()](#elementhandlefocus)
- [elementHandle.hover([options])](#elementhandlehoveroptions)
- [elementHandle.ownerFrame()](#elementhandleownerframe)
- [elementHandle.press(key[, options])](#elementhandlepresskey-options)
- [elementHandle.screenshot([options])](#elementhandlescreenshotoptions)
- [elementHandle.scrollIntoViewIfNeeded()](#elementhandlescrollintoviewifneeded)
- [elementHandle.select(...values)](#elementhandleselectvalues)
- [elementHandle.setInputFiles(...files)](#elementhandlesetinputfilesfiles)
- [elementHandle.toString()](#elementhandletostring)
- [elementHandle.tripleclick([options])](#elementhandletripleclickoptions)
- [elementHandle.type(text[, options])](#elementhandletypetext-options)
- [elementHandle.visibleRatio()](#elementhandlevisibleratio)
<!-- GEN:stop -->
#### elementHandle.$(selector) #### elementHandle.$(selector)
- `selector` <[string]> A selector to query element for - `selector` <[string]> A selector to query element for
- returns: <[Promise]<?[ElementHandle]>> - returns: <[Promise]<?[ElementHandle]>>
@ -931,6 +750,40 @@ An example of getting text from an iframe element:
console.log(text); console.log(text);
``` ```
<!-- GEN:toc -->
- [frame.$(selector)](#frameselector)
- [frame.$$(selector)](#frameselector-1)
- [frame.$$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args)
- [frame.$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args-1)
- [frame.$wait(selector, pageFunction[, options[, ...args]])](#framewaitselector-pagefunction-options-args)
- [frame.addScriptTag(options)](#frameaddscripttagoptions)
- [frame.addStyleTag(options)](#frameaddstyletagoptions)
- [frame.childFrames()](#framechildframes)
- [frame.click(selector[, options])](#frameclickselector-options)
- [frame.content()](#framecontent)
- [frame.dblclick(selector[, options])](#framedblclickselector-options)
- [frame.evaluate(pageFunction[, ...args])](#frameevaluatepagefunction-args)
- [frame.evaluateHandle(pageFunction[, ...args])](#frameevaluatehandlepagefunction-args)
- [frame.fill(selector, value, options)](#framefillselector-value-options)
- [frame.focus(selector, options)](#framefocusselector-options)
- [frame.goto(url[, options])](#framegotourl-options)
- [frame.hover(selector[, options])](#framehoverselector-options)
- [frame.isDetached()](#frameisdetached)
- [frame.name()](#framename)
- [frame.parentFrame()](#frameparentframe)
- [frame.select(selector, value, options)](#frameselectselector-value-options)
- [frame.setContent(html[, options])](#framesetcontenthtml-options)
- [frame.title()](#frametitle)
- [frame.tripleclick(selector[, options])](#frametripleclickselector-options)
- [frame.type(selector, text[, options])](#frametypeselector-text-options)
- [frame.url()](#frameurl)
- [frame.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#framewaitforselectororfunctionortimeout-options-args)
- [frame.waitForFunction(pageFunction[, options[, ...args]])](#framewaitforfunctionpagefunction-options-args)
- [frame.waitForLoadState([options])](#framewaitforloadstateoptions)
- [frame.waitForNavigation([options])](#framewaitfornavigationoptions)
- [frame.waitForSelector(selector[, options])](#framewaitforselectorselector-options)
<!-- GEN:stop -->
#### frame.$(selector) #### frame.$(selector)
- `selector` <[string]> A selector to query frame for - `selector` <[string]> A selector to query frame for
- returns: <[Promise]<?[ElementHandle]>> Promise which resolves to ElementHandle pointing to the frame element. - returns: <[Promise]<?[ElementHandle]>> Promise which resolves to ElementHandle pointing to the frame element.
@ -1435,6 +1288,16 @@ JSHandle prevents the referenced JavaScript object being garbage collected unles
JSHandle instances can be used as arguments in [`page.$eval()`](#pageevalselector-pagefunction-args), [`page.evaluate()`](#pageevaluatepagefunction-args) and [`page.evaluateHandle`](#pageevaluatehandlepagefunction-args) methods. JSHandle instances can be used as arguments in [`page.$eval()`](#pageevalselector-pagefunction-args), [`page.evaluate()`](#pageevaluatepagefunction-args) and [`page.evaluateHandle`](#pageevaluatehandlepagefunction-args) methods.
<!-- GEN:toc -->
- [jsHandle.asElement()](#jshandleaselement)
- [jsHandle.dispose()](#jshandledispose)
- [jsHandle.evaluate(pageFunction[, ...args])](#jshandleevaluatepagefunction-args)
- [jsHandle.evaluateHandle(pageFunction[, ...args])](#jshandleevaluatehandlepagefunction-args)
- [jsHandle.getProperties()](#jshandlegetproperties)
- [jsHandle.getProperty(propertyName)](#jshandlegetpropertypropertyname)
- [jsHandle.jsonValue()](#jshandlejsonvalue)
<!-- GEN:stop -->
#### jsHandle.asElement() #### jsHandle.asElement()
- returns: <?[ElementHandle]> - returns: <?[ElementHandle]>
@ -1530,6 +1393,14 @@ await page.keyboard.up('Shift');
> **NOTE** On MacOS, keyboard shortcuts like `⌘ A` -> Select All do not work. See [#1313](https://github.com/GoogleChrome/puppeteer/issues/1313) > **NOTE** On MacOS, keyboard shortcuts like `⌘ A` -> Select All do not work. See [#1313](https://github.com/GoogleChrome/puppeteer/issues/1313)
<!-- GEN:toc -->
- [keyboard.down(key[, options])](#keyboarddownkey-options)
- [keyboard.press(key[, options])](#keyboardpresskey-options)
- [keyboard.sendCharacters(text)](#keyboardsendcharacterstext)
- [keyboard.type(text[, options])](#keyboardtypetext-options)
- [keyboard.up(key)](#keyboardupkey)
<!-- GEN:stop -->
#### keyboard.down(key[, options]) #### keyboard.down(key[, options])
- `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names. - `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names.
- `options` <[Object]> - `options` <[Object]>
@ -1611,6 +1482,15 @@ await page.mouse.move(0, 0);
await page.mouse.up(); await page.mouse.up();
``` ```
<!-- GEN:toc -->
- [mouse.click(x, y[, options])](#mouseclickx-y-options)
- [mouse.dblclick(x, y[, options])](#mousedblclickx-y-options)
- [mouse.down([options])](#mousedownoptions)
- [mouse.move(x, y[, options])](#mousemovex-y-options)
- [mouse.tripleclick(x, y[, options])](#mousetripleclickx-y-options)
- [mouse.up([options])](#mouseupoptions)
<!-- GEN:stop -->
#### mouse.click(x, y[, options]) #### mouse.click(x, y[, options])
- `x` <[number]> - `x` <[number]>
- `y` <[number]> - `y` <[number]>
@ -1716,6 +1596,83 @@ page.on('request', logRequest);
page.removeListener('request', logRequest); page.removeListener('request', logRequest);
``` ```
<!-- GEN:toc -->
- [event: 'close'](#event-close)
- [event: 'console'](#event-console)
- [event: 'dialog'](#event-dialog)
- [event: 'domcontentloaded'](#event-domcontentloaded)
- [event: 'filechooser'](#event-filechooser)
- [event: 'frameattached'](#event-frameattached)
- [event: 'framedetached'](#event-framedetached)
- [event: 'framenavigated'](#event-framenavigated)
- [event: 'load'](#event-load)
- [event: 'pageerror'](#event-pageerror)
- [event: 'popup'](#event-popup)
- [event: 'request'](#event-request)
- [event: 'requestfailed'](#event-requestfailed)
- [event: 'requestfinished'](#event-requestfinished)
- [event: 'response'](#event-response)
- [event: 'workercreated'](#event-workercreated)
- [event: 'workerdestroyed'](#event-workerdestroyed)
- [page.$(selector)](#pageselector)
- [page.$$(selector)](#pageselector-1)
- [page.$$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args)
- [page.$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args-1)
- [page.$wait(selector, pageFunction[, options[, ...args]])](#pagewaitselector-pagefunction-options-args)
- [page.accessibility](#pageaccessibility)
- [page.addScriptTag(options)](#pageaddscripttagoptions)
- [page.addStyleTag(options)](#pageaddstyletagoptions)
- [page.authenticate(credentials)](#pageauthenticatecredentials)
- [page.browserContext()](#pagebrowsercontext)
- [page.click(selector[, options])](#pageclickselector-options)
- [page.close([options])](#pagecloseoptions)
- [page.content()](#pagecontent)
- [page.coverage](#pagecoverage)
- [page.dblclick(selector[, options])](#pagedblclickselector-options)
- [page.emulateMedia(options)](#pageemulatemediaoptions)
- [page.evaluate(pageFunction[, ...args])](#pageevaluatepagefunction-args)
- [page.evaluateHandle(pageFunction[, ...args])](#pageevaluatehandlepagefunction-args)
- [page.evaluateOnNewDocument(pageFunction[, ...args])](#pageevaluateonnewdocumentpagefunction-args)
- [page.exposeFunction(name, playwrightFunction)](#pageexposefunctionname-playwrightfunction)
- [page.fill(selector, value, options)](#pagefillselector-value-options)
- [page.focus(selector, options)](#pagefocusselector-options)
- [page.frames()](#pageframes)
- [page.goBack([options])](#pagegobackoptions)
- [page.goForward([options])](#pagegoforwardoptions)
- [page.goto(url[, options])](#pagegotourl-options)
- [page.hover(selector[, options])](#pagehoverselector-options)
- [page.isClosed()](#pageisclosed)
- [page.keyboard](#pagekeyboard)
- [page.mainFrame()](#pagemainframe)
- [page.mouse](#pagemouse)
- [page.pdf([options])](#pagepdfoptions)
- [page.reload([options])](#pagereloadoptions)
- [page.screenshot([options])](#pagescreenshotoptions)
- [page.select(selector, value, options)](#pageselectselector-value-options)
- [page.setCacheEnabled([enabled])](#pagesetcacheenabledenabled)
- [page.setContent(html[, options])](#pagesetcontenthtml-options)
- [page.setDefaultNavigationTimeout(timeout)](#pagesetdefaultnavigationtimeouttimeout)
- [page.setDefaultTimeout(timeout)](#pagesetdefaulttimeouttimeout)
- [page.setExtraHTTPHeaders(headers)](#pagesetextrahttpheadersheaders)
- [page.setOfflineMode(enabled)](#pagesetofflinemodeenabled)
- [page.setRequestInterception(enabled)](#pagesetrequestinterceptionenabled)
- [page.setViewport(viewport)](#pagesetviewportviewport)
- [page.title()](#pagetitle)
- [page.tripleclick(selector[, options])](#pagetripleclickselector-options)
- [page.type(selector, text[, options])](#pagetypeselector-text-options)
- [page.url()](#pageurl)
- [page.viewport()](#pageviewport)
- [page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#pagewaitforselectororfunctionortimeout-options-args)
- [page.waitForEvent(event[, optionsOrPredicate])](#pagewaitforeventevent-optionsorpredicate)
- [page.waitForFunction(pageFunction[, options[, ...args]])](#pagewaitforfunctionpagefunction-options-args)
- [page.waitForLoadState([options])](#pagewaitforloadstateoptions)
- [page.waitForNavigation([options])](#pagewaitfornavigationoptions)
- [page.waitForRequest(urlOrPredicate[, options])](#pagewaitforrequesturlorpredicate-options)
- [page.waitForResponse(urlOrPredicate[, options])](#pagewaitforresponseurlorpredicate-options)
- [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options)
- [page.workers()](#pageworkers)
<!-- GEN:stop -->
#### event: 'close' #### event: 'close'
Emitted when the page closes. Emitted when the page closes.
@ -2812,6 +2769,22 @@ If request fails at some point, then instead of `'requestfinished'` event (and p
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. 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.
<!-- GEN:toc -->
- [request.abort([errorCode])](#requestaborterrorcode)
- [request.continue([overrides])](#requestcontinueoverrides)
- [request.failure()](#requestfailure)
- [request.frame()](#requestframe)
- [request.fulfill(response)](#requestfulfillresponse)
- [request.headers()](#requestheaders)
- [request.isNavigationRequest()](#requestisnavigationrequest)
- [request.method()](#requestmethod)
- [request.postData()](#requestpostdata)
- [request.redirectChain()](#requestredirectchain)
- [request.resourceType()](#requestresourcetype)
- [request.response()](#requestresponse)
- [request.url()](#requesturl)
<!-- GEN:stop -->
#### request.abort([errorCode]) #### request.abort([errorCode])
- `errorCode` <[string]> Optional error code. Defaults to `failed`, could be - `errorCode` <[string]> Optional error code. Defaults to `failed`, could be
one of the following: one of the following:
@ -2958,6 +2931,20 @@ ResourceType will be one of the following: `document`, `stylesheet`, `image`, `m
[Response] class represents responses which are received by page. [Response] class represents responses which are received by page.
<!-- GEN:toc -->
- [response.buffer()](#responsebuffer)
- [response.frame()](#responseframe)
- [response.headers()](#responseheaders)
- [response.json()](#responsejson)
- [response.ok()](#responseok)
- [response.remoteAddress()](#responseremoteaddress)
- [response.request()](#responserequest)
- [response.status()](#responsestatus)
- [response.statusText()](#responsestatustext)
- [response.text()](#responsetext)
- [response.url()](#responseurl)
<!-- GEN:stop -->
#### response.buffer() #### response.buffer()
- returns: <Promise<[Buffer]>> Promise which resolves to a buffer with response body. - returns: <Promise<[Buffer]>> Promise which resolves to a buffer with response body.
@ -3020,6 +3007,10 @@ 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. 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.
<!-- GEN:toc -->
- [accessibility.snapshot([options])](#accessibilitysnapshotoptions)
<!-- GEN:stop -->
#### accessibility.snapshot([options]) #### accessibility.snapshot([options])
- `options` <[Object]> - `options` <[Object]>
- `interestingOnly` <[boolean]> Prune uninteresting nodes from the tree. Defaults to `true`. - `interestingOnly` <[boolean]> Prune uninteresting nodes from the tree. Defaults to `true`.
@ -3115,6 +3106,13 @@ console.log(`Bytes used: ${usedBytes / totalBytes * 100}%`);
_To output coverage in a form consumable by [Istanbul](https://github.com/istanbuljs), _To output coverage in a form consumable by [Istanbul](https://github.com/istanbuljs),
see [playwright-to-istanbul](https://github.com/istanbuljs/playwright-to-istanbul)._ see [playwright-to-istanbul](https://github.com/istanbuljs/playwright-to-istanbul)._
<!-- GEN:toc -->
- [coverage.startCSSCoverage([options])](#coveragestartcsscoverageoptions)
- [coverage.startJSCoverage([options])](#coveragestartjscoverageoptions)
- [coverage.stopCSSCoverage()](#coveragestopcsscoverage)
- [coverage.stopJSCoverage()](#coveragestopjscoverage)
<!-- GEN:stop -->
#### coverage.startCSSCoverage([options]) #### coverage.startCSSCoverage([options])
- `options` <[Object]> Set of configurable options for coverage - `options` <[Object]> Set of configurable options for coverage
- `resetOnNavigation` <[boolean]> Whether to reset coverage on every navigation. Defaults to `true`. - `resetOnNavigation` <[boolean]> Whether to reset coverage on every navigation. Defaults to `true`.
@ -3163,6 +3161,12 @@ for (const worker of page.workers())
console.log(' ' + worker.url()); console.log(' ' + worker.url());
``` ```
<!-- GEN:toc -->
- [worker.evaluate(pageFunction[, ...args])](#workerevaluatepagefunction-args)
- [worker.evaluateHandle(pageFunction[, ...args])](#workerevaluatehandlepagefunction-args)
- [worker.url()](#workerurl)
<!-- GEN:stop -->
#### worker.evaluate(pageFunction[, ...args]) #### worker.evaluate(pageFunction[, ...args])
- `pageFunction` <[function]|[string]> Function to be evaluated in the worker context - `pageFunction` <[function]|[string]> Function to be evaluated in the worker context
- `...args` <...[Serializable]|[JSHandle]> Arguments to pass to `pageFunction` - `...args` <...[Serializable]|[JSHandle]> Arguments to pass to `pageFunction`
@ -3188,6 +3192,13 @@ If the function passed to the `worker.evaluateHandle` returns a [Promise], then
* extends: [Playwright] * extends: [Playwright]
<!-- GEN:toc -->
- [chromiumPlaywright.connect(options)](#chromiumplaywrightconnectoptions)
- [chromiumPlaywright.defaultArgs([options])](#chromiumplaywrightdefaultargsoptions)
- [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions)
- [chromiumPlaywright.launchServer([options])](#chromiumplaywrightlaunchserveroptions)
<!-- GEN:stop -->
#### chromiumPlaywright.connect(options) #### chromiumPlaywright.connect(options)
- `options` <[Object]> - `options` <[Object]>
- `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to. - `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to.
@ -3273,6 +3284,19 @@ await page.goto('https://www.google.com');
await browser.stopTracing(); await browser.stopTracing();
``` ```
<!-- GEN:toc -->
- [event: 'targetchanged'](#event-targetchanged)
- [event: 'targetcreated'](#event-targetcreated)
- [event: 'targetdestroyed'](#event-targetdestroyed)
- [chromiumBrowser.browserTarget()](#chromiumbrowserbrowsertarget)
- [chromiumBrowser.pageTarget(page)](#chromiumbrowserpagetargetpage)
- [chromiumBrowser.serviceWorker(target)](#chromiumbrowserserviceworkertarget)
- [chromiumBrowser.startTracing(page, [options])](#chromiumbrowserstarttracingpage-options)
- [chromiumBrowser.stopTracing()](#chromiumbrowserstoptracing)
- [chromiumBrowser.targets(context)](#chromiumbrowsertargetscontext)
- [chromiumBrowser.waitForTarget(predicate[, options])](#chromiumbrowserwaitfortargetpredicate-options)
<!-- GEN:stop -->
#### event: 'targetchanged' #### event: 'targetchanged'
- <[Target]> - <[Target]>
@ -3346,6 +3370,14 @@ const newWindowTarget = await browser.chromium.waitForTarget(target => target.ur
### class: ChromiumBrowserServer ### class: ChromiumBrowserServer
<!-- GEN:toc -->
- [chromiumBrowserServer.close()](#chromiumbrowserserverclose)
- [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect)
- [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions)
- [chromiumBrowserServer.process()](#chromiumbrowserserverprocess)
- [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint)
<!-- GEN:stop -->
#### chromiumBrowserServer.close() #### chromiumBrowserServer.close()
- returns: <[Promise]> - returns: <[Promise]>
@ -3398,6 +3430,11 @@ await client.send('Animation.setPlaybackRate', {
}); });
``` ```
<!-- GEN:toc -->
- [chromiumSession.detach()](#chromiumsessiondetach)
- [chromiumSession.send(method[, params])](#chromiumsessionsendmethod-params)
<!-- GEN:stop -->
#### chromiumSession.detach() #### chromiumSession.detach()
- returns: <[Promise]> - returns: <[Promise]>
@ -3411,6 +3448,16 @@ to send messages.
### class: ChromiumTarget ### class: ChromiumTarget
<!-- GEN:toc -->
- [chromiumTarget.browserContext()](#chromiumtargetbrowsercontext)
- [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession)
- [chromiumTarget.opener()](#chromiumtargetopener)
- [chromiumTarget.page()](#chromiumtargetpage)
- [chromiumTarget.type()](#chromiumtargettype)
- [chromiumTarget.url()](#chromiumtargeturl)
<!-- GEN:stop -->
#### chromiumTarget.browserContext() #### chromiumTarget.browserContext()
- returns: <[BrowserContext]> - returns: <[BrowserContext]>
@ -3444,6 +3491,13 @@ Identifies what kind of target this is. Can be `"page"`, [`"background_page"`](h
* extends: [Playwright] * extends: [Playwright]
<!-- GEN:toc -->
- [firefoxPlaywright.connect(options)](#firefoxplaywrightconnectoptions)
- [firefoxPlaywright.defaultArgs([options])](#firefoxplaywrightdefaultargsoptions)
- [firefoxPlaywright.launch([options])](#firefoxplaywrightlaunchoptions)
- [firefoxPlaywright.launchServer([options])](#firefoxplaywrightlaunchserveroptions)
<!-- GEN:stop -->
#### firefoxPlaywright.connect(options) #### firefoxPlaywright.connect(options)
- `options` <[Object]> - `options` <[Object]>
- `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to. - `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to.
@ -3510,6 +3564,14 @@ Firefox browser instance does not expose Firefox-specific features.
### class: FirefoxBrowserServer ### class: FirefoxBrowserServer
<!-- GEN:toc -->
- [firefoxBrowserServer.close()](#firefoxbrowserserverclose)
- [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect)
- [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions)
- [firefoxBrowserServer.process()](#firefoxbrowserserverprocess)
- [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint)
<!-- GEN:stop -->
#### firefoxBrowserServer.close() #### firefoxBrowserServer.close()
- returns: <[Promise]> - returns: <[Promise]>
@ -3540,6 +3602,12 @@ Browser websocket endpoint which can be used as an argument to [firefoxPlaywrigh
* extends: [Playwright] * extends: [Playwright]
<!-- GEN:toc -->
- [webkitPlaywright.defaultArgs([options])](#webkitplaywrightdefaultargsoptions)
- [webkitPlaywright.launch([options])](#webkitplaywrightlaunchoptions)
- [webkitPlaywright.launchServer([options])](#webkitplaywrightlaunchserveroptions)
<!-- GEN:stop -->
#### webkitPlaywright.defaultArgs([options]) #### webkitPlaywright.defaultArgs([options])
- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields: - `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields:
- `headless` <[boolean]> Whether to run WebKit in headless mode. Defaults to `true`. - `headless` <[boolean]> Whether to run WebKit in headless mode. Defaults to `true`.
@ -3597,6 +3665,13 @@ WebKit browser instance does not expose WebKit-specific features.
### class: WebKitBrowserServer ### class: WebKitBrowserServer
<!-- GEN:toc -->
- [webKitBrowserServer.close()](#webkitbrowserserverclose)
- [webKitBrowserServer.connect()](#webkitbrowserserverconnect)
- [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions)
- [webKitBrowserServer.process()](#webkitbrowserserverprocess)
<!-- GEN:stop -->
#### webKitBrowserServer.close() #### webKitBrowserServer.close()
- returns: <[Promise]> - returns: <[Promise]>

View File

@ -18,7 +18,7 @@ const Message = require('../Message');
module.exports.ensureReleasedAPILinks = function(sources, version) { module.exports.ensureReleasedAPILinks = function(sources, version) {
// Release version is everything that doesn't include "-". // Release version is everything that doesn't include "-".
const apiLinkRegex = /https:\/\/github.com\/GoogleChrome\/playwright\/blob\/v[^/]*\/docs\/api.md/ig; const apiLinkRegex = /https:\/\/github.com\/Microsoft\/playwright\/blob\/v[^/]*\/docs\/api.md/ig;
const lastReleasedAPI = `https://github.com/Microsoft/playwright/blob/v${version.split('-')[0]}/docs/api.md`; const lastReleasedAPI = `https://github.com/Microsoft/playwright/blob/v${version.split('-')[0]}/docs/api.md`;
const messages = []; const messages = [];
@ -69,7 +69,9 @@ module.exports.runCommands = function(sources, version) {
else if (command.name === 'empty-if-release') else if (command.name === 'empty-if-release')
newText = isReleaseVersion ? '' : command.originalText; newText = isReleaseVersion ? '' : command.originalText;
else if (command.name === 'toc') else if (command.name === 'toc')
newText = generateTableOfContents(command.source.text().substring(command.to)); newText = generateTableOfContents(command.source.text(), command.to, false /* topLevelOnly */);
else if (command.name === 'toc-top-level')
newText = generateTableOfContents(command.source.text(), command.to, true /* topLevelOnly */);
if (newText === null) if (newText === null)
messages.push(Message.error(`Unknown command 'gen:${command.name}'`)); messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
else if (applyCommand(command, newText)) else if (applyCommand(command, newText))
@ -91,22 +93,22 @@ function applyCommand(command, editText) {
return command.source.setText(newText); return command.source.setText(newText);
} }
function generateTableOfContents(mdText) { function getTOCEntriesForText(text) {
const ids = new Set(); const ids = new Set();
const titles = []; const titles = [];
let insideCodeBlock = false; let insideCodeBlock = false;
for (const aLine of mdText.split('\n')) { let offset = 0;
text.split('\n').forEach((aLine, lineNumber) => {
const line = aLine.trim(); const line = aLine.trim();
if (line.startsWith('```')) { if (line.startsWith('```'))
insideCodeBlock = !insideCodeBlock; insideCodeBlock = !insideCodeBlock;
continue; else if (!insideCodeBlock && line.startsWith('#'))
} titles.push({line, offset: offset + lineNumber});
if (!insideCodeBlock && line.startsWith('#')) offset += aLine.length;
titles.push(line); });
} let tocEntries = [];
const tocEntries = []; for (const {line, offset} of titles) {
for (const title of titles) { const [, nesting, name] = line.match(/^(#+)\s+(.*)$/);
const [, nesting, name] = title.match(/^(#+)\s+(.*)$/);
const delinkifiedName = name.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1'); const delinkifiedName = name.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
const id = delinkifiedName.trim().toLowerCase().replace(/\s/g, '-').replace(/[^-0-9a-zа-яё]/ig, ''); const id = delinkifiedName.trim().toLowerCase().replace(/\s/g, '-').replace(/[^-0-9a-zа-яё]/ig, '');
let dedupId = id; let dedupId = id;
@ -117,12 +119,33 @@ function generateTableOfContents(mdText) {
tocEntries.push({ tocEntries.push({
level: nesting.length, level: nesting.length,
name: delinkifiedName, name: delinkifiedName,
id: dedupId id: dedupId,
offset,
}); });
} }
return tocEntries;
}
function generateTableOfContents(text, offset, topLevelOnly) {
const allTocEntries = getTOCEntriesForText(text);
let tocEntries = [];
let nesting = 0;
for (const tocEntry of allTocEntries) {
if (tocEntry.offset < offset)
continue;
if (tocEntries.length) {
nesting += tocEntry.level - tocEntries[tocEntries.length - 1].level;
if (nesting < 0)
break;
}
tocEntries.push(tocEntry);
}
const minLevel = Math.min(...tocEntries.map(entry => entry.level)); const minLevel = Math.min(...tocEntries.map(entry => entry.level));
tocEntries.forEach(entry => entry.level -= minLevel); tocEntries.forEach(entry => entry.level -= minLevel);
if (topLevelOnly)
tocEntries = tocEntries.filter(entry => !entry.level);
return '\n' + tocEntries.map(entry => { return '\n' + tocEntries.map(entry => {
const prefix = entry.level % 2 === 0 ? '-' : '*'; const prefix = entry.level % 2 === 0 ? '-' : '*';
const padding = ' '.repeat(entry.level); const padding = ' '.repeat(entry.level);

View File

@ -192,6 +192,32 @@ describe('runCommands', function() {
### some [link](#foobar) here ### some [link](#foobar) here
`); `);
}); });
it('should be able to create sub-table-of-contents', () => {
const source = new Source('doc.md', `
## First
<!-- gen:toc -->XXX<!-- gen:stop -->
### first.1
### first.2
#### first.2.1
## Second
`);
const messages = runCommands([source], '1.3.0');
expect(messages.length).toBe(1);
expect(messages[0].type).toBe('warning');
expect(messages[0].text).toContain('doc.md');
expect(source.text()).toBe(`
## First
<!-- gen:toc -->
- [first.1](#first1)
- [first.2](#first2)
* [first.2.1](#first21)
<!-- gen:stop -->
### first.1
### first.2
#### first.2.1
## Second
`);
});
}); });
it('should work with multiple commands', function() { it('should work with multiple commands', function() {
const source = new Source('doc.md', ` const source = new Source('doc.md', `