Highlights
Touch
- Use [`page.tap()`] to automate native tap events. Like other input events, taps auto-wait for the UI element and [actionability] checks.
Network
- **WebSocket inspection**: Use [`page.on('websocket')`] and the new [WebSocket] class to inspect WebSocket connections.
- **HAR export**: Capture and export all the network activity as a HAR file. Pass `recordHar` while creating new browser contexts.
- **Resource timing**: Use [`request.timing()`] to retrieve and analyze timing data for the network requests.
- **Proxy for browser context**: Network proxy settings can now be configured per browser contexts with the `proxy` option on the new context.
Playwright CLI
- [CLI codegen](https://github.com/microsoft/playwright-cli) can now generate [C# code](https://github.com/microsoft/playwright-sharp). Run `npx playwright-cli codegen --target=csharp` to try!
Browser Versions
- Chromium 88.0.4316.0
- Mozilla Firefox 83.0b8
- WebKit 14.0
New APIs
- new class [WebSocket]
- new option `proxy` in [`browser.newContext()`] and [`browser.newPage()`]
- new option `recordHar` in [`browser.newContext()`] and [`browser.newPage()`]
- new option `recordVideo` in [`browser.newContext()`] and [`browser.newPage()`]
- new [`page.on('websocket')`] event
- new [`page.tap()`] method
- new [`elementHandle.tap()`] method
- new [`page.touchscreen`] namespace to access [Touchscreen]
- new [`request.timing`] property
<details>
<summary><b>Issues Closed (39)</b></summary>
1655 - [Feature] Custom methods on `Page`
2515 - [Feature] networkidle for "idle after action"
2695 - [Feature] WebSockets supports
2946 - Not able to detect browser event: disconnected event when close browser is invoked
2974 - [BUG] Unable to adopt element handle from a different document
3122 - [QUESTION] Chromium versions are mismatched in docker, leading to launch failures
3206 - [Feature] Export network as HAR
3466 - [Feature] Fill input field based on label text
3476 - [BUG] Firefox focus won't work with more than 1 page
3499 - [BUG] Playwright does not see iframe element as visible
3534 - [Feature] Allow set proxy per context
3693 - [BUG] RPC/Firefox goBack does not return a response (guid)
3830 - [Feature] Text selector engine normalise whitespaces
4002 - [BUG] page.waitForSelector fails when called during a redirect
4021 - [BUG] beforeunload event in headless mode is failing
4038 - [REGRESSION]: Tall screenshots in chromium get corrupted at bottom
4134 - [BUG] elementHandle.scrollIntoViewIfNeeded doesn't work properly
4179 - [BUG] Unable to close page when confirm dialog is open
4208 - [BUG] Timout Error on firefox for popup
4232 - [BUG] Group videoPath and videoSize under recordVideo option
4233 - [BUG] download file not occurs
4255 - [Question]: Exposing common Playwright types
4256 - [Question] playwright-electron types might be missing from the release or is there any guide on how to get it to work?
4265 - [Feature] Multiple text selectors
4266 - [Question] Exported video quality
4268 - [Question] Does puppeteer have Redhat Dockerfile support?
4277 - [BUG] Firefox workers cause frame navigation
4279 - How to Compare two screenshots? Need code [Question]
4282 - [Question] is there a way to get element background colour ?
4284 - [BUG] page.addInitScript doesn't work for large scripts
4285 - Running WebKit on AWS EC2 Instance [Question]
4286 - [Question] CDP sessions with other targets
4293 - [BUG] Bundle dlls with Firefox for Windows
4302 - [Question] What is the best way to scroll page to the bottom?
4317 - [Question] drag and drop
4318 - [Question] Query by text with space
4319 - [Question] Have the browsers that are downloaded for playwright 1.3.0 changed somehow ?
4321 - [Feature] pass arguments like proxy to each context not to whole browser
4326 - [Test] Ubuntu: browsercontext-proxy.spec.ts:128:1 › should exclude patterns crashes webkit
</details>
[Touchscreen]: ./docs/api.mdclass-touchscreen
[WebSocket]: ./docs/api.mdclass-websocket
[`browser.newPage()`]: ./docs/api.mdbrowsernewpageoptions
[`browser.newContext()`]: ./docs/api.mdbrowsernewcontextoptions
[`page.on('websocket')`]: ./docs/api.mdevent-websocket
[`page.tap()`]: ./docs/api.mdpagetapselector-options
[`frame.tap()`]: ./docs/api.mdframetapselector-options
[`elementHandle.tap()`]: ./docs/api.mdelementhandletapoptions
[`page.touchscreen`]: ./docs/api.mdpagetouchscreen
[`request.timing()`]: ./docs/api.mdrequesttiming
[actionability]: ./docs/actionability.md