From eab8f92ac8443881facf62488891d16801b38f10 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Wed, 22 Jan 2020 12:21:45 -0800 Subject: [PATCH] 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 --- docs/api.md | 571 ++++++++++++++++------------ utils/doclint/preprocessor/index.js | 51 ++- utils/doclint/preprocessor/test.js | 26 ++ 3 files changed, 386 insertions(+), 262 deletions(-) diff --git a/docs/api.md b/docs/api.md index 03673c956b..da9a650db7 100644 --- a/docs/api.md +++ b/docs/api.md @@ -4,282 +4,35 @@ ##### Table of Contents - + - [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. + +- [playwright.devices](#playwrightdevices) +- [playwright.errors](#playwrighterrors) +- [playwright.executablePath()](#playwrightexecutablepath) + + #### playwright.devices - returns: <[Object]> @@ -382,6 +141,15 @@ const playwright = require('playwright').webkit; // Or 'chromium' or 'firefox'. await browser.close(); })(); ``` + +- [event: 'disconnected'](#event-disconnected) +- [browser.browserContexts()](#browserbrowsercontexts) +- [browser.close()](#browserclose) +- [browser.defaultContext()](#browserdefaultcontext) +- [browser.disconnect()](#browserdisconnect) +- [browser.isConnected()](#browserisconnected) +- [browser.newContext(options)](#browsernewcontextoptions) + #### 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(); ``` + +- [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) + + #### 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. + +- [consoleMessage.args()](#consolemessageargs) +- [consoleMessage.location()](#consolemessagelocation) +- [consoleMessage.text()](#consolemessagetext) +- [consoleMessage.type()](#consolemessagetype) + + #### consoleMessage.args() - returns: <[Array]<[JSHandle]>> @@ -622,6 +409,14 @@ const playwright = require('playwright').chromium; // Or 'firefox' or 'webkit'. })(); ``` + +- [dialog.accept([promptText])](#dialogacceptprompttext) +- [dialog.defaultValue()](#dialogdefaultvalue) +- [dialog.dismiss()](#dialogdismiss) +- [dialog.message()](#dialogmessage) +- [dialog.type()](#dialogtype) + + #### 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. + +- [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) + + #### elementHandle.$(selector) - `selector` <[string]> A selector to query element for - returns: <[Promise]> @@ -931,6 +750,40 @@ An example of getting text from an iframe element: console.log(text); ``` + +- [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) + + #### frame.$(selector) - `selector` <[string]> A selector to query frame for - returns: <[Promise]> 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.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) + + #### jsHandle.asElement() - returns: @@ -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) + +- [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) + + #### 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(); ``` + +- [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) + + #### mouse.click(x, y[, options]) - `x` <[number]> - `y` <[number]> @@ -1716,6 +1596,83 @@ page.on('request', logRequest); page.removeListener('request', logRequest); ``` + +- [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) + + #### 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. + +- [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) + + #### 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. + +- [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) + + #### response.buffer() - returns: > 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. + +- [accessibility.snapshot([options])](#accessibilitysnapshotoptions) + + #### 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)._ + +- [coverage.startCSSCoverage([options])](#coveragestartcsscoverageoptions) +- [coverage.startJSCoverage([options])](#coveragestartjscoverageoptions) +- [coverage.stopCSSCoverage()](#coveragestopcsscoverage) +- [coverage.stopJSCoverage()](#coveragestopjscoverage) + + #### 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()); ``` + +- [worker.evaluate(pageFunction[, ...args])](#workerevaluatepagefunction-args) +- [worker.evaluateHandle(pageFunction[, ...args])](#workerevaluatehandlepagefunction-args) +- [worker.url()](#workerurl) + + #### 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] + +- [chromiumPlaywright.connect(options)](#chromiumplaywrightconnectoptions) +- [chromiumPlaywright.defaultArgs([options])](#chromiumplaywrightdefaultargsoptions) +- [chromiumPlaywright.launch([options])](#chromiumplaywrightlaunchoptions) +- [chromiumPlaywright.launchServer([options])](#chromiumplaywrightlaunchserveroptions) + + #### chromiumPlaywright.connect(options) - `options` <[Object]> - `browserWSEndpoint` a [browser websocket endpoint](#browserwsendpoint) to connect to. @@ -3273,6 +3284,19 @@ await page.goto('https://www.google.com'); await browser.stopTracing(); ``` + +- [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) + + #### event: 'targetchanged' - <[Target]> @@ -3346,6 +3370,14 @@ const newWindowTarget = await browser.chromium.waitForTarget(target => target.ur ### class: ChromiumBrowserServer + +- [chromiumBrowserServer.close()](#chromiumbrowserserverclose) +- [chromiumBrowserServer.connect()](#chromiumbrowserserverconnect) +- [chromiumBrowserServer.connectOptions()](#chromiumbrowserserverconnectoptions) +- [chromiumBrowserServer.process()](#chromiumbrowserserverprocess) +- [chromiumBrowserServer.wsEndpoint()](#chromiumbrowserserverwsendpoint) + + #### chromiumBrowserServer.close() - returns: <[Promise]> @@ -3398,6 +3430,11 @@ await client.send('Animation.setPlaybackRate', { }); ``` + +- [chromiumSession.detach()](#chromiumsessiondetach) +- [chromiumSession.send(method[, params])](#chromiumsessionsendmethod-params) + + #### chromiumSession.detach() - returns: <[Promise]> @@ -3411,6 +3448,16 @@ to send messages. ### class: ChromiumTarget + + +- [chromiumTarget.browserContext()](#chromiumtargetbrowsercontext) +- [chromiumTarget.createCDPSession()](#chromiumtargetcreatecdpsession) +- [chromiumTarget.opener()](#chromiumtargetopener) +- [chromiumTarget.page()](#chromiumtargetpage) +- [chromiumTarget.type()](#chromiumtargettype) +- [chromiumTarget.url()](#chromiumtargeturl) + + #### chromiumTarget.browserContext() - returns: <[BrowserContext]> @@ -3444,6 +3491,13 @@ Identifies what kind of target this is. Can be `"page"`, [`"background_page"`](h * extends: [Playwright] + +- [firefoxPlaywright.connect(options)](#firefoxplaywrightconnectoptions) +- [firefoxPlaywright.defaultArgs([options])](#firefoxplaywrightdefaultargsoptions) +- [firefoxPlaywright.launch([options])](#firefoxplaywrightlaunchoptions) +- [firefoxPlaywright.launchServer([options])](#firefoxplaywrightlaunchserveroptions) + + #### firefoxPlaywright.connect(options) - `options` <[Object]> - `browserWSEndpoint` a [browser websocket endpoint](#browserwsendpoint) to connect to. @@ -3510,6 +3564,14 @@ Firefox browser instance does not expose Firefox-specific features. ### class: FirefoxBrowserServer + +- [firefoxBrowserServer.close()](#firefoxbrowserserverclose) +- [firefoxBrowserServer.connect()](#firefoxbrowserserverconnect) +- [firefoxBrowserServer.connectOptions()](#firefoxbrowserserverconnectoptions) +- [firefoxBrowserServer.process()](#firefoxbrowserserverprocess) +- [firefoxBrowserServer.wsEndpoint()](#firefoxbrowserserverwsendpoint) + + #### firefoxBrowserServer.close() - returns: <[Promise]> @@ -3540,6 +3602,12 @@ Browser websocket endpoint which can be used as an argument to [firefoxPlaywrigh * extends: [Playwright] + +- [webkitPlaywright.defaultArgs([options])](#webkitplaywrightdefaultargsoptions) +- [webkitPlaywright.launch([options])](#webkitplaywrightlaunchoptions) +- [webkitPlaywright.launchServer([options])](#webkitplaywrightlaunchserveroptions) + + #### 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 + +- [webKitBrowserServer.close()](#webkitbrowserserverclose) +- [webKitBrowserServer.connect()](#webkitbrowserserverconnect) +- [webKitBrowserServer.connectOptions()](#webkitbrowserserverconnectoptions) +- [webKitBrowserServer.process()](#webkitbrowserserverprocess) + + #### webKitBrowserServer.close() - returns: <[Promise]> diff --git a/utils/doclint/preprocessor/index.js b/utils/doclint/preprocessor/index.js index 2b0b506338..9481ebb4a5 100644 --- a/utils/doclint/preprocessor/index.js +++ b/utils/doclint/preprocessor/index.js @@ -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); diff --git a/utils/doclint/preprocessor/test.js b/utils/doclint/preprocessor/test.js index 75781e8662..51d37bdc44 100644 --- a/utils/doclint/preprocessor/test.js +++ b/utils/doclint/preprocessor/test.js @@ -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 + XXX + ### 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 + +- [first.1](#first1) +- [first.2](#first2) + * [first.2.1](#first21) + + ### first.1 + ### first.2 + #### first.2.1 + ## Second + `); + }); }); it('should work with multiple commands', function() { const source = new Source('doc.md', `