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
<!-- GEN:toc -->
<!-- GEN:toc-top-level -->
- [class: Playwright](#class-playwright)
* [playwright.devices](#playwrightdevices)
* [playwright.errors](#playwrighterrors)
* [playwright.executablePath()](#playwrightexecutablepath)
- [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)
* [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)
* [consoleMessage.args()](#consolemessageargs)
* [consoleMessage.location()](#consolemessagelocation)
* [consoleMessage.text()](#consolemessagetext)
* [consoleMessage.type()](#consolemessagetype)
- [class: Dialog](#class-dialog)
* [dialog.accept([promptText])](#dialogacceptprompttext)
* [dialog.defaultValue()](#dialogdefaultvalue)
* [dialog.dismiss()](#dialogdismiss)
* [dialog.message()](#dialogmessage)
* [dialog.type()](#dialogtype)
- [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)
* [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)
* [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)
* [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)
* [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)
* [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)
* [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)
* [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: Accessibility](#class-accessibility)
* [accessibility.snapshot([options])](#accessibilitysnapshotoptions)
- [class: Coverage](#class-coverage)
* [coverage.startCSSCoverage([options])](#coveragestartcsscoverageoptions)
* [coverage.startJSCoverage([options])](#coveragestartjscoverageoptions)
* [coverage.stopCSSCoverage()](#coveragestopcsscoverage)
* [coverage.stopJSCoverage()](#coveragestopjscoverage)
- [class: Worker](#class-worker)
* [worker.evaluate(pageFunction[, ...args])](#workerevaluatepagefunction-args)
* [worker.evaluateHandle(pageFunction[, ...args])](#workerevaluatehandlepagefunction-args)
* [worker.url()](#workerurl)
- [class: ChromiumPlaywright](#class-chromiumplaywright)
* [chromiumPlaywright.connect(options)](#chromiumplaywrightconnectoptions)
* [chromiumPlaywright.defaultArgs([options])](#chromiumplaywrightdefaultargsoptions)
* [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions)
* [chromiumPlaywright.launchServer([options])](#chromiumplaywrightlaunchserveroptions)
- [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)
* [chromiumBrowserServer.close()](#chromiumbrowserserverclose)
* [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect)
* [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions)
* [chromiumBrowserServer.process()](#chromiumbrowserserverprocess)
* [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint)
- [class: ChromiumSession](#class-chromiumsession)
* [chromiumSession.detach()](#chromiumsessiondetach)
* [chromiumSession.send(method[, params])](#chromiumsessionsendmethod-params)
- [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)
* [firefoxPlaywright.connect(options)](#firefoxplaywrightconnectoptions)
* [firefoxPlaywright.defaultArgs([options])](#firefoxplaywrightdefaultargsoptions)
* [firefoxPlaywright.launch([options])](#firefoxplaywrightlaunchoptions)
* [firefoxPlaywright.launchServer([options])](#firefoxplaywrightlaunchserveroptions)
- [class: FirefoxBrowser](#class-firefoxbrowser)
- [class: FirefoxBrowserServer](#class-firefoxbrowserserver)
* [firefoxBrowserServer.close()](#firefoxbrowserserverclose)
* [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect)
* [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions)
* [firefoxBrowserServer.process()](#firefoxbrowserserverprocess)
* [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint)
- [class: WebKitPlaywright](#class-webkitplaywright)
* [webkitPlaywright.defaultArgs([options])](#webkitplaywrightdefaultargsoptions)
* [webkitPlaywright.launch([options])](#webkitplaywrightlaunchoptions)
* [webkitPlaywright.launchServer([options])](#webkitplaywrightlaunchserveroptions)
- [class: WebKitBrowser](#class-webkitbrowser)
- [class: WebKitBrowserServer](#class-webkitbrowserserver)
* [webKitBrowserServer.close()](#webkitbrowserserverclose)
* [webKitBrowserServer.connect()](#webkitbrowserserverconnect)
* [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions)
* [webKitBrowserServer.process()](#webkitbrowserserverprocess)
- [Working with selectors](#working-with-selectors)
- [Working with Chrome Extensions](#working-with-chrome-extensions)
- [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.
<!-- GEN:toc -->
- [playwright.devices](#playwrightdevices)
- [playwright.errors](#playwrighterrors)
- [playwright.executablePath()](#playwrightexecutablepath)
<!-- GEN:stop -->
#### playwright.devices
- returns: <[Object]>
@ -382,6 +141,15 @@ const playwright = require('playwright').webkit; // Or 'chromium' or 'firefox'.
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'
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();
```
<!-- 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()
- 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.
<!-- GEN:toc -->
- [consoleMessage.args()](#consolemessageargs)
- [consoleMessage.location()](#consolemessagelocation)
- [consoleMessage.text()](#consolemessagetext)
- [consoleMessage.type()](#consolemessagetype)
<!-- GEN:stop -->
#### consoleMessage.args()
- 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])
- `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.
@ -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.
<!-- 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)
- `selector` <[string]> A selector to query element for
- returns: <[Promise]<?[ElementHandle]>>
@ -931,6 +750,40 @@ An example of getting text from an iframe element:
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)
- `selector` <[string]> A selector to query frame for
- 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.
<!-- 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()
- 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)
<!-- 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])
- `key` <[string]> Name of key to press, such as `ArrowLeft`. See [USKeyboardLayout] for a list of all key names.
- `options` <[Object]>
@ -1611,6 +1482,15 @@ await page.mouse.move(0, 0);
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])
- `x` <[number]>
- `y` <[number]>
@ -1716,6 +1596,83 @@ page.on('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'
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.
<!-- 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])
- `errorCode` <[string]> Optional error code. Defaults to `failed`, could be
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.
<!-- 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()
- 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.
<!-- GEN:toc -->
- [accessibility.snapshot([options])](#accessibilitysnapshotoptions)
<!-- GEN:stop -->
#### accessibility.snapshot([options])
- `options` <[Object]>
- `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),
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])
- `options` <[Object]> Set of configurable options for coverage
- `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());
```
<!-- GEN:toc -->
- [worker.evaluate(pageFunction[, ...args])](#workerevaluatepagefunction-args)
- [worker.evaluateHandle(pageFunction[, ...args])](#workerevaluatehandlepagefunction-args)
- [worker.url()](#workerurl)
<!-- GEN:stop -->
#### worker.evaluate(pageFunction[, ...args])
- `pageFunction` <[function]|[string]> Function to be evaluated in the worker context
- `...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]
<!-- GEN:toc -->
- [chromiumPlaywright.connect(options)](#chromiumplaywrightconnectoptions)
- [chromiumPlaywright.defaultArgs([options])](#chromiumplaywrightdefaultargsoptions)
- [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions)
- [chromiumPlaywright.launchServer([options])](#chromiumplaywrightlaunchserveroptions)
<!-- GEN:stop -->
#### chromiumPlaywright.connect(options)
- `options` <[Object]>
- `browserWSEndpoint` <?[string]> a [browser websocket endpoint](#browserwsendpoint) to connect to.
@ -3273,6 +3284,19 @@ await page.goto('https://www.google.com');
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'
- <[Target]>
@ -3346,6 +3370,14 @@ const newWindowTarget = await browser.chromium.waitForTarget(target => target.ur
### class: ChromiumBrowserServer
<!-- GEN:toc -->
- [chromiumBrowserServer.close()](#chromiumbrowserserverclose)
- [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect)
- [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions)
- [chromiumBrowserServer.process()](#chromiumbrowserserverprocess)
- [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint)
<!-- GEN:stop -->
#### chromiumBrowserServer.close()
- 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()
- returns: <[Promise]>
@ -3411,6 +3448,16 @@ to send messages.
### 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()
- returns: <[BrowserContext]>
@ -3444,6 +3491,13 @@ Identifies what kind of target this is. Can be `"page"`, [`"background_page"`](h
* 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)
- `options` <[Object]>
- `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
<!-- GEN:toc -->
- [firefoxBrowserServer.close()](#firefoxbrowserserverclose)
- [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect)
- [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions)
- [firefoxBrowserServer.process()](#firefoxbrowserserverprocess)
- [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint)
<!-- GEN:stop -->
#### firefoxBrowserServer.close()
- returns: <[Promise]>
@ -3540,6 +3602,12 @@ Browser websocket endpoint which can be used as an argument to [firefoxPlaywrigh
* extends: [Playwright]
<!-- GEN:toc -->
- [webkitPlaywright.defaultArgs([options])](#webkitplaywrightdefaultargsoptions)
- [webkitPlaywright.launch([options])](#webkitplaywrightlaunchoptions)
- [webkitPlaywright.launchServer([options])](#webkitplaywrightlaunchserveroptions)
<!-- GEN:stop -->
#### webkitPlaywright.defaultArgs([options])
- `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`.
@ -3597,6 +3665,13 @@ WebKit browser instance does not expose WebKit-specific features.
### class: WebKitBrowserServer
<!-- GEN:toc -->
- [webKitBrowserServer.close()](#webkitbrowserserverclose)
- [webKitBrowserServer.connect()](#webkitbrowserserverconnect)
- [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions)
- [webKitBrowserServer.process()](#webkitbrowserserverprocess)
<!-- GEN:stop -->
#### webKitBrowserServer.close()
- returns: <[Promise]>

View File

@ -18,7 +18,7 @@ const Message = require('../Message');
module.exports.ensureReleasedAPILinks = function(sources, version) {
// 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 messages = [];
@ -69,7 +69,9 @@ module.exports.runCommands = function(sources, version) {
else if (command.name === 'empty-if-release')
newText = isReleaseVersion ? '' : command.originalText;
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)
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
else if (applyCommand(command, newText))
@ -91,22 +93,22 @@ function applyCommand(command, editText) {
return command.source.setText(newText);
}
function generateTableOfContents(mdText) {
function getTOCEntriesForText(text) {
const ids = new Set();
const titles = [];
let insideCodeBlock = false;
for (const aLine of mdText.split('\n')) {
let offset = 0;
text.split('\n').forEach((aLine, lineNumber) => {
const line = aLine.trim();
if (line.startsWith('```')) {
if (line.startsWith('```'))
insideCodeBlock = !insideCodeBlock;
continue;
}
if (!insideCodeBlock && line.startsWith('#'))
titles.push(line);
}
const tocEntries = [];
for (const title of titles) {
const [, nesting, name] = title.match(/^(#+)\s+(.*)$/);
else if (!insideCodeBlock && line.startsWith('#'))
titles.push({line, offset: offset + lineNumber});
offset += aLine.length;
});
let tocEntries = [];
for (const {line, offset} of titles) {
const [, nesting, name] = line.match(/^(#+)\s+(.*)$/);
const delinkifiedName = name.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
const id = delinkifiedName.trim().toLowerCase().replace(/\s/g, '-').replace(/[^-0-9a-zа-яё]/ig, '');
let dedupId = id;
@ -117,12 +119,33 @@ function generateTableOfContents(mdText) {
tocEntries.push({
level: nesting.length,
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));
tocEntries.forEach(entry => entry.level -= minLevel);
if (topLevelOnly)
tocEntries = tocEntries.filter(entry => !entry.level);
return '\n' + tocEntries.map(entry => {
const prefix = entry.level % 2 === 0 ? '-' : '*';
const padding = ' '.repeat(entry.level);

View File

@ -192,6 +192,32 @@ describe('runCommands', function() {
### 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() {
const source = new Source('doc.md', `