Skip to content

Commit

Permalink
feat(webdriver): support Network interception (#12272)
Browse files Browse the repository at this point in the history
The provides support for Network interception for the WebDriver
protocol.
More information on current state of WebDriver support can be found
[here](https://pptr.dev/webdriver-bidi).
This is a Puppteer side implementation for the Network interception
feature,
some vendors may not support all properties that you can send through
Puppeteer, please be aware.

The following issues track state of vendor implementation, that
Puppeteer relies on:
Chrome: GoogleChromeLabs/chromium-bidi#2035
Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1853882 and
https://bugzilla.mozilla.org/show_bug.cgi?id=1850680
  • Loading branch information
Lightning00Blade authored and OrKoN committed Apr 16, 2024
1 parent 5e1a94e commit 6b162c5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 32 deletions.
38 changes: 20 additions & 18 deletions docs/webdriver-bidi.md
Expand Up @@ -18,8 +18,8 @@ Firefox integration is nearing feature parity with its previous CDP-based approa

To gauge the capabilities of WebDriver BiDi, we utilized the comprehensive [Puppeteer test suite](https://puppeteer.github.io/ispuppeteerwebdriverbidiready/)

- For Firefox, there are currently under [60](https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json) failing tests compared to the CDP implementation, while over [82](https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json) new tests successfully utilize WebDriver BiDi, demonstrating its growing potential.
- For Chrome, around 68% of tests pass with WebDriver BiDi, indicating room for improvement compared to the CDP-based approach.
- For Firefox, there are currently under [30](https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json) failing tests compared to the CDP implementation, while over [140](https://puppeteer.github.io/ispuppeteerwebdriverbidiready/firefox-delta.json) new tests successfully utilize WebDriver BiDi, demonstrating its growing potential.
- For Chrome, around 85% of tests pass with WebDriver BiDi, indicating room for improvement compared to the CDP-based approach.

## Get started

Expand All @@ -41,17 +41,28 @@ This is an exciting step towards a more unified and efficient cross-browser auto

## Puppeteer features supported over WebDriver BiDi

- Browser and page automation
- Browser automation

- Puppeteer.launch
- Browser.close
- Frame.goto() (except `referer` and `referrerPolicy`)
- Browser.userAgent()

- Page automation

- Page.bringToFront
- Page.goBack()
- Page.goForward()
- Page.goto (except `referer` and `referrerPolicy`)
- Frame.goto() (except `referer` and `referrerPolicy`)
- Page.reload (except for `ignoreCache` parameter)
- Page.setViewport (`width`, `height`, `deviceScaleFactor` only)
- Puppeteer.launch
- Page.cookies()
- Page.setCookie()
- Page.deleteCookie()
- Page.workers()
- PageEvent.WorkerCreated
- PageEvent.WorkerDestroyed
- Page.setExtraHTTPHeaders()

- [Script evaluation](https://pptr.dev/guides/evaluate-javascript):

Expand Down Expand Up @@ -100,13 +111,9 @@ This is an exciting step towards a more unified and efficient cross-browser auto
- BrowserContext.clearPermissionOverrides()
- BrowserContext.overridePermissions()

## Puppeteer features not yet supported over WebDriver BiDi

- [Request interception](https://pptr.dev/guides/request-interception)

- HTTPRequest.abort()
- HTTPRequest.abort() (no custom error support)
- HTTPRequest.abortErrorReason()
- HTTPRequest.client()
- HTTPRequest.continue()
- HTTPRequest.continueRequestOverrides()
- HTTPRequest.failure()
Expand All @@ -117,6 +124,8 @@ This is an exciting step towards a more unified and efficient cross-browser auto
- HTTPRequest.responseForRequest()
- Page.setRequestInterception()

## Puppeteer features not yet supported over WebDriver BiDi

- Various emulations (most are supported with Chrome)

- Page.emulate() (supported only in Chrome)
Expand All @@ -134,14 +143,14 @@ This is an exciting step towards a more unified and efficient cross-browser auto
- CDP-specific features

- Page.createCDPSession() (supported only in Chrome)
- HTTPRequest.client() (supported only in Chrome)

- Tracing (supported only in Chrome)
- Coverage (supported only in Chrome)
- Accessibility (supported only in Chrome)

- Other methods:

- Browser.userAgent()
- Frame.isOOPFrame()
- Frame.waitForDevicePrompt()
- HTTPResponse.buffer()
Expand All @@ -152,8 +161,6 @@ This is an exciting step towards a more unified and efficient cross-browser auto
- Input.dragOver()
- Input.drop()
- Page.authenticate()
- Page.cookies()
- Page.deleteCookie()
- Page.emulateNetworkConditions()
- Page.isDragInterceptionEnabled()
- Page.isJavaScriptEnabled() (supported only in Chrome)
Expand All @@ -162,15 +169,10 @@ This is an exciting step towards a more unified and efficient cross-browser auto
- Page.queryObjects() (supported only in Chrome)
- Page.screencast() (supported only in Chrome)
- Page.setBypassServiceWorker()
- Page.setCookie()
- Page.setDragInterception()
- Page.setExtraHTTPHeaders()
- Page.setOfflineMode()
- Page.setUserAgent()
- Page.waitForDevicePrompt()
- Page.waitForFileChooser()
- Page.workers()
- PageEvent.popup
- PageEvent.WorkerCreated
- PageEvent.WorkerDestroyed
- Target.opener()
20 changes: 6 additions & 14 deletions test/TestExpectations.json
Expand Up @@ -2733,6 +2733,12 @@
"expectations": ["TIMEOUT"],
"comment": "When navigating to page with authentication the command response (error) never comes without interception"
},
{
"testIdPattern": "[network.spec] network Page.setExtraHTTPHeaders should throw for non-string header values",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["firefox", "webDriverBiDi"],
"expectations": ["PASS"]
},
{
"testIdPattern": "[network.spec] network Page.setExtraHTTPHeaders should work",
"platforms": ["darwin", "linux", "win32"],
Expand Down Expand Up @@ -3980,20 +3986,6 @@
"expectations": ["SKIP"],
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
},
{
"testIdPattern": "[waittask.spec] waittask specs Frame.waitForSelector should survive cross-process navigation",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["chrome", "webDriverBiDi"],
"expectations": ["SKIP"],
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
},
{
"testIdPattern": "[waittask.spec] waittask specs Frame.waitForSelector should survive cross-process navigation",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["firefox", "webDriverBiDi"],
"expectations": ["SKIP"],
"comment": "TODO: add a comment explaining why this expectation is required (include links to issues)"
},
{
"testIdPattern": "[waittask.spec] waittask specs Frame.waitForSelector should survive cross-process navigation",
"platforms": ["darwin", "linux", "win32"],
Expand Down

0 comments on commit 6b162c5

Please sign in to comment.