Highlights
- **Support for Apple Silicon**: Playwright browser binaries for WebKit and Chromium are now built for Apple Silicon.
- **New browser storage API**: Convenience APIs to store and restore browser state (cookies, local storage) to simplify automation scenarios with authentication.
- **New! Java SDK**: [Playwright for Java](https://github.com/microsoft/playwright-java) is now on par with [JavaScript](https://github.com/microsoft/playwright), [Python](https://github.com/microsoft/playwright-python) and [C# bindings](https://github.com/microsoft/playwright-sharp).
- **New website**: Playwright docs website at [playwright.dev](https://playwright.dev/) has been updated and is now built with [Docusaurus](https://v2.docusaurus.io/).
- **New CSS selectors**: Playwright now uses a different implementation under the hood and introduced a few [CSS extensions](./docs/selectors.mdcss-extension-visible).
Browser Versions
- Chromium 89.0.4344.0
- Mozilla Firefox 84.0b9
- WebKit 14.1
New APIs
- new method [`browserContext.storageState()`] to get current state for later reuse
- `storageState` option in [`browser.newContext()`] and [`browser.newPage()`] to setup browser context state
<details>
<summary><b>Issues Closed (56)</b></summary>
647 - Other Browsers
1129 - [Feature] Browser context serialization to support local storage
1677 - [Internal] Run applicable tests for iframes and oopifs
1960 - [BUG] Playwright in Storybook
2274 - [Bug] running tests in parallel in Docker lead to page crashes
2352 - [BUG] page.emulateMedia colorScheme has no effect in firefox without reload
2360 - [BUG] Checkbox wont check unless force parameter is passed on
2409 - [BUG] UnhandledPromiseRejectionWarning: Error: by Firefox and web kit.
2415 - [BUG] Serviceworker shows wrong request.referrer in Playwright
2425 - [Feature] Support Socks5 with auth
2426 - [Question] How can we touch a button on screen ?
2646 - [Question] Ci/Cd using AWS Codebuild/Codepipeline
2698 - [BUG] Chromium headless on Windows does not launch without --disable-gpu
2748 - [BUG] Chromium fails to connect in CI most of the times
2761 - Playwright API v1: shortcomings
2768 - [BUG] Click doesn't work properly if page is zoomed in
3148 - [Question] Issue with launching Chromium in headful mode
3152 - [BUG] Firefox multi page screenshots and focus ring
3244 - [Question] Allow Multiple Downloads Notification
3261 - [BUG] State of WebKit video codecs
3284 - [BUG] MS Edge Chromium crashes on closing in headless mode
3318 - [Feature] SSR on playwright.dev
3337 - [REGRESSION]: NS_ERROR_FILE_ALREADY_EXISTS with Firefox sporadically
3347 - [Feature] CSS.forcePseudoState
3498 - [Question] How to manually download file (donwload dialog) ?
3509 - [Question] Is it possible to set AlwaysOpenPdfExternally
3552 - [Question] First-class test runner support
3726 - [BUG] Playwright-core - page.waitForEvent: Timeout 30000ms exceeded
3871 - [BUG] Always failed in CircleCI
3901 - [Feature] APIs for getting values from the page
3990 - [BUG] AvailWidth/Height
4037 - [BUG] Edge does not report request payload
4075 - [Question] Run headless Firefox with non-default executable path
4112 - [Feature] pass args to new context
4117 - I am trying to use a proxy in Webkit and when I redirect once it loses the proxy. What am I doing wrong?
4124 - [BUG] page.click() is inconsistent in large webapp
4203 - [BUG] Using a typescript version thats too old gives a bad error message
4235 - [Question] How to fight web app (Salesforce) pausing due to window/tab not in focus
4242 - [BUG] Helpful error message for lockfile
4254 - [Question] Will node js be updated to 14 lts in docker image?
4269 - [Feature] Export credential
4297 - [BUG] Twitter timeout error on firefox
4320 - [DevOps] GitHub Dependency graph does not work
4345 - [Bug] Initial browser launch time inconsistent
4381 - [Question] Is there an API endpoint to get the binary download URLs?
4398 - [Question] wait until all of elements appear
4432 - [Question] - Firefox.launch.Process failed to launch! No space left on device.
4433 - [Types] Page.waitForResponse() urlOrPredicate use typed function
4439 - [REGRESSION]: self signed certificate in certificate chain -> Error with installation
4445 - [BUG] Unknown scheme for WebSocket.listenerCount
4461 - [BUG] Error when using PM2 process manager in cluster mode
4465 - [BUG] MS Edge Chromium cannot end msedge.exe processes in HEAD mode
4467 - [BUG] Can't connect to running browserServer from another process
4472 - [BUG] Crash when opening a new tab from UI
4486 - [Question] chromium with head
4487 - [BUG] Playwright not intercepting fetch requests in WebWorker
</details>
<details>
<summary><b>Commits (193)</b></summary>
e91eee84 - chore: cut v1.7.0 (4705)
e6c206ed - chore: update PrintDeps.exe to r1004 (4709)
c5bb08c5 - docs: remove outdated troubleshooting (4706)
8d574a76 - docs: update docker readme
4799e8f2 - feat(adb): add screenshot (4701)
1596b53d - test(adb): fix browser tests (4700)
f89dcc7b - feat(adb): implement push (4697)
b8112ded - devops: fix Android tests on GHA (4698)
f4eff4db - devops: add bot to test Android (4693)
67f92be3 - chore(deps): bump ini from 1.3.5 to 1.3.8 (4692)
844b2c8f - chore(adb): lint the driver (4696)
ad5309ca - feat(adb): make shell return binary (4695)
7c89ec05 - feat(adb): expose a11y tree (4694)
1b7fb7d5 - feat(android): expose installAPK(path) and ADB socket (4689)
6cc695d9 - test(adb): fix the adb tests (4691)
2ba60e92 - test(adb): add some adb tests (4679)
aa1b546b - chore(android): respect timeout, add build script (4690)
f20518f2 - fix(har): do not complain about a lot of listeners (4675)
765b0778 - feat: start downloading arm64 Chromium builds (4681)
616df7d2 - fix(adb): minor fixes (4678)
495085cb - fix(chromium): make interception work with dedicated workers (4658)
b9c95976 - feat(selectors): optimize old->new conversion for css (4672)
e97ab7e4 - test: unflake some web socket tests (4673)
12dc04a3 - feat(selectors): optimize old->new selectors conversion for text (4671)
c8e9b054 - feat(selectors): disable proximity selectors (4659)
84ff20f1 - test: fix test server on Node 15 (4668)
b486e840 - devops: revert ability to skip architecture enforcement (4667)
4f3f6267 - chore: add dummy package.json's for GH dependents analysis (4666)
8fc49c98 - feat(adb): support webviews (4657)
f939fdc1 - feat(firefox): bump to 1221 (4656)
b67e0221 - feat(selectors): update new text selector (4654)
aacd8e63 - chore: expose adb devices and actions (4647)
ab44d682 - feat(selectors): remove index for now, add documentation (4640)
1d90d7a9 - feat: fix browser installation on mac 11.0-arm64 (4652)
e0a02c3f - feat(webkit): bump to 1402 (4651)
bc0af57a - feat: support download of native WebKit build for Apple M1 (4648)
add7ce7f - devops: fix buildbot mac m1 name
c36af734 - devops: add old-fashioned scripts to run Mac M1 buildbot (4649)
93c362de - devops: fix architecture enforcement (4645)
6d3278f1 - devops: add ability to skip architecture enforcement (4644)
dd9c312b - devops: start producing WebKit builds for Apple Silicon (4643)
64a2940a - devops: fix webkit archiving (4642)
17f1b20f - devops: trigger all builds with new windows buildbot (4638)
6c4d3b86 - chore(docker): put browser deps instructions first (4637)
c1dcef39 - devops(windows): fix vswhere location (4636)
99b98d62 - browser(webkit): do not spam stderr with screencast debug logs (4635)
1060fce0 - feat(selectors): explicit list of custom functions (4629)
be16ce4b - feat(errors): append recent browser logs when browser disconnects (4625)
e1e000d2 - browser(firefox): do not spam stderr with screencast logs (4630)
ea833daa - chore: fix internal binding (4598)
1e754a4d - feat(selectors): proximity selectors (4614)
c36f5fa3 - feat(chromium): roll to 833159 (4626)
18b565a9 - feat(selectors): correctly work in large DOM (4628)
73982834 - devops: absolute paths for webkit libraries and output directory (4627)
20201310 - feat(firefox): roll Firefox to r1218 (4620)
e8dcd876 - browser(chromium): build 833159 (4623)
e75ebc17 - browser(firefox): roll Firefox to Dec, 7 2020 (4622)
4be41f25 - browser(webkit): build fix, switch to the new download API (4621)
d8520f06 - devops: fix webkit building on windows (4618)
13e2ef1d - devops: suppport WK_CHECKOUT_PATH variable (4617)
71b7b488 - chore: use Node.js 14 (new LTS) in Docker image (4262)
1e0ab79f - feat(selectors): add visible and index engines (4595)
a3a31bc8 - doc: add the mobile.md doc (4612)
1717cbd3 - doc: describe return value as a part of method (4608)
cdd9fd6b - test(click): add a failing test for click w/ scroll (4606)
6fe7d9c1 - devops: support FF_CHECKOUT_PATH to customize browser checkout (4607)
96a1f79e - docs: reformat api-body to allow multiline params documentation (4604)
b6eb8e0a - browser(webkit): fix mac build (4605)
8218a71a - feat(selectors): add more tests for css selectors (4596)
cdbc96ac - browser(webkit): roll to 12-04 (4601)
aed3d14b - test: unflake "should not result in unhandled rejection" (4602)
bf7dff80 - chore: remove the --only-update-browsers option
20c17d54 - chore: fix the doclint tests
7dc386fa - browser(webkit): produce xcode 12.2 build on Mac 10.15 (4599)
150d778c - docs: disambiguate events (4597)
8551fff4 - browser(firefox): disable cross-process navigation (4594)
761b78ef - docs: generate links based on the method names (4593)
49a3f943 - feat(selectors): switch to the new engine (4589)
7213794a - Correct typo in "emulateMedia" call example. (4592)
2452d07f - docs: generate method signatures in docs (4590)
0eb6f856 - docs: pretty-print api.md (4588)
5d47a974 - docs: reformat template parameters (4587)
016925cd - feat(selectors): implement builtin selectors in new evaluator (4579)
3121de40 - test: remove tests for SelectorEngine.create (4580)
7e30669e - fix(binding): catch binding resolution against the closed page (4583)
5002b83b - test(focus): add a failing focus test (4581)
5a537413 - fix(lint): property waitForResponse type (4582)
bc701629 - fix(doclint): exit 1 when doclint throws an error (4572)
d2b7e0d1 - fix(types): add typed cb for Page.waitForResponse (4575)
95c502d2 - docs: use templates to reuse documentation properties (4578)
31e22dee - devops(win): fix paths to vswhere.exe in 64-bit shells (4577)
3d6194e8 - feat(selectors): introduce css evaluator (4573)
52ae218b - fix(fill): allow filling more input types (4563)
1fa7e86e - docs: generate api.md (4576)
f5c8e1d3 - link: make lint happy
3624e3e3 - chore: add internal method for utility context bindings (4566)
1ca30fe6 - chore: force lo dpi recording on non-mac (4557)
a45532fd - feat(selectors): update css parser (4565)
3846d05f - feat(firefox): bump to 1217 (4560)
9c677f64 - feat(webkit): roll webkit to r1395 (4550)
e8419f85 - browser(firefox): support alertCheck and confirmCheck dialogs (4553)
e98aceb9 - feat(selectors): introduce css parser (4522)
84dc441a - feat(trace): record traces when PW_TRACE_DIR is set (4545)
d116787a - fix(lint): update check_deps for src/remote (4547)
512516c9 - browser(webkit): retore changes from 4539 (4544)
8f70c95d - browser(webkit): roll to 11-30 (4541)
730f6f87 - browser(firefox): roll Firefox to beta Nov 30, 2020 (4542)
d104591a - devops(flakiness): azure function to store dashboard in a new format (4540)
d96330bb - browser(webkit): override availWidth with screen width (4539)
884edbb3 - fix(channels): only send protocol methods to connection (4493)
7d90f5ef - feat(firefox): roll Firefox to r1215 (4526)
8cc8b777 - docs: fix auth example (4528)
62f7437a - test: remove the flaky test we are not going to fix (4527)
51865fe5 - chore: bump WebKit build number to test self-hosted runners (4525)
bab16a5c - devops: remove self-hosted runners (4524)
d06afadb - browser(firefox): send dragend after drop and survive navigations (4506)
c6d5bc30 - test(drag): more tests for drag and drop (4508)
60103229 - test: unflake some chromium tests (4521)
566c57ee - fix(lint): remove unused import in resource-timing.spec.ts (4520)
5976e5dc - feat(firefox): roll Firefox to r1213 (4514)
2486a4fb - chore: fix lint after 4517 (4518)
062ec7e4 - test: enable resource-timing test on BigSur (4517)
f916c980 - chore: update WebKit version to 14.1 (4515)
17bec4f6 - browser(firefox): rebaseline atop of Nov, 23 2020 (4516)
e9060dd6 - fix(launchServer): wait for the server to start before taking its address (4513)
4f4a7ce5 - test: add test for network interception in web workers (4490)
06e0aa40 - devops: add source code for flakiness dashboard (4479)
e72d9a41 - chore: add websocket connection mode (4510)
14a96ca2 - browser(firefox): ensure detachedFromTarget is always sent (4505)
a0587949 - feat(chromium): roll to r828656 (4503)
aea106b2 - chore: simplify server screencast code (4501)
5e6eed0d - fix(frames): do not start network idle timer after detach (4502)
240d51f1 - docs: improve boundingBox documentation (4500)
2d16953e - devops: start Chromium mirroring from GHA (4492)
95aab3b2 - browser(chromium): prepare r828656 (4499)
de43de7a - test: make test not depend on line endings (4497)
09f9a351 - fix(protocol): rename websocket error event to socketerror (4495)
1278c254 - feat(webkit): roll to 1391 (4494)
6bc45d92 - browser(firefox): browser.version() to return full version (4491)
1169c5ab - browser(webkit): close on pipe disconnect (4484)
b064f930 - feat(webkit): bump to 1390 (4483)
ce423517 - test(route): test that intercepted XHR is actually paused (4482)
a11be3e9 - browser(webkit): roll to 11-18 (4481)
e2d43794 - devops: use proper tags for self-hosted runner (4480)
33a168e5 - devops: build firefox on self-hosted ubuntu 18.04 runner (4478)
cb1f2a38 - browser(firefox): roll Firefox to Nov 17,2020 (4477)
8860d6d1 - chore: try building webkit on github selfhosted runner (4476)
05bb149d - devops: teach self-hosted runner to install dependencies (4475)
80446aaf - devops: use labels instead of self-hosted runner name (4474)
497a99de - devops: try building webkit on a self-hosted ubuntu 18.04 runner (4473)
f9a407f1 - devops: remove bigsur buildbot (4457)
a877c24f - fix(route): throw on attempt to fulfill with redirect in WebKit (4449)
cb21d5dc - feat(chromium): roll to 827767 (4471)
38fadcad - fix(chromium): use frameDetached reason (4468)
c1a5cd51 - fix(docs): remove extra code in timing docs (4466)
ab4a6279 - feat(webkit): roll to r1388 (4464)
1f5b7527 - feat(chromium): roll to r827102 (4462)
bbe755c7 - feat(firefox): bump to 1210 (4459)
fc038881 - browser(chromium): pick 827102 for roll (4460)
93b6faee - test(chromium): disable webgl2 on headful (4450)
79c592ed - browser(webkit): do not create unique page groups for pages (4456)
5509e98b - browser(webkit): fix mac build after latest roll (4455)
b9ac9df8 - fix: prevent memory leak when collecting logs from injected script poll (4448)
39fcf1bc - browser(firefox): do not leak reponses (4453)
bd76e9dd - browser(webkit): roll to 11-16 (4451)
2f73a45e - browser(chromium): roll to 827767 (4452)
e91140e8 - browser(firefox): force a layout before dispatching a tap (4428)
31bebc7e - fix(close): allow errors when closing all pages of a context (4324)
3da1f73f - test(chromium): disable large screenshot test (4446)
0ae455f4 - test(tap): unflake chromium headful tap tests (4431)
dfe3552b - feat(route): support URL overrides in continue (4438)
dd3d4933 - fix(lock): nicer lockfile error (4396)
732e83f4 - feat(webkit): bump to 1385 (4430)
914c6eec - feat(firefox): bump to 1206 (4425)
0167f8c1 - browser(firefox): allow to override request url (4436)
2e65f788 - browser(firefox): close browser when pipe disconnects (4437)
9404d2ab - fix(debug): do not generate source urls for anonymous scripts (3691)
d20e56e1 - feat(state): allow getting / setting context state (4412)
a35d2070 - test: fix resource timing for bigsur test (4419)
e69315f7 - fix(websocket): remove "skip frames" logic (4435)
cd18ddb6 - test: add a test for numerical id selector (4429)
9e1b26f9 - browser(webkit): close on pipe disconnect (4421)
b0d174fd - revert: lifecycle refactoring, it breaks setContent (4420)
5d47214e - chore: register frameless listeners separately (4407)
bd7507e1 - chore: unify new page handling across vendors (4411)
2bfee8dc - chore: fix publishing next from release branch (4418)
8f728617 - browser(webkit): roll to 11-12 (4417)
8488c296 - browser(firefox): allow to override content-type along with post data (4416)
eee82a7f - fix(oopif): store child frame id between frameDetached and attachedToTarget (4410)
52147b30 - devops: fix flakiness upload on windows (4415)
d8837a80 - fix(docs): add tap to actionability (4413)
5702eca1 - fix(selectors): make selectOptions work for labels (4402)
138680f9 - fix(launchServer): stream protocol logs into options.logger (4403)
</details>
[`browserContext.storageState()`]: ./docs/api.mdbrowsercontextstoragestateoptions
[`browser.newContext()`]: ./docs/api.mdbrowsernewcontextoptions
[`browser.newPage()`]: ./docs/api.mdbrowsernewpageoptions