Playwright
- **🖖 Programmatic drag-and-drop support** via the [`page.drag_and_drop()`] API.
- **🔎 Enhanced HAR** with body sizes for requests and responses. Use via `record_har_path` option in [`browser.new_context()`].
Tools
- Playwright Trace Viewer now shows parameters, returned values and `console.log()` calls.
- Playwright Inspector can generate Playwright Test tests.
New and Overhauled Guides
- [Intro](https://playwright.dev/python/docs/next/intro/)
- [Authentication](https://playwright.dev/docs/next/auth)
- [Chome Extensions](https://playwright.dev/docs/next/chrome-extensions)
- [Playwright Test Configuration](https://playwright.dev/docs/next/test-configuration)
- [Playwright Test Annotations](https://playwright.dev/docs/next/test-annotations)
- [Playwright Test Fixtures](https://playwright.dev/docs/next/test-fixtures)
Browser Versions
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
New Playwright APIs
- new `baseURL` option in [`browser.new_context()`] and [`browser.new_page()`]
- [`response.security_details()`] and [`response.server_addr()`]
- [`page.drag_and_drop()`] and [`frame.drag_and_drop()`]
- [`download.cancel()`]
- [`page.input_value()`], [`frame.input_value()`] and [`element_handle.input_value()`]
- new `force` option in [`page.fill()`], [`frame.fill()`], and [`element_handle.fill()`]
- new `force` option in [`page.select_option()`], [`frame.select_option()`], and [`element_handle.select_option()`]
[`download.cancel()`]: https://playwright.dev/python/docs/next/api/class-download#download-cancel
[`page.fill()`]: https://playwright.dev/python/docs/next/api/class-page#page-fill
[`frame.fill()`]: https://playwright.dev/python/docs/next/api/class-frame#frame-fill
[`element_handle.fill()`]: https://playwright.dev/python/docs/next/api/class-elementhandle#element-handle-fill
[`page.input_value()`]: https://playwright.dev/python/docs/next/api/class-page#page-input-value
[`frame.input_value()`]: https://playwright.dev/python/docs/next/api/class-frame#frame-input-value
[`element_handle.input_value()`]: https://playwright.dev/python/docs/next/api/class-elementhandle#element-handle-input-value
[`page.select_option()`]: https://playwright.dev/python/docs/next/api/class-page#page-select-option
[`frame.select_option()`]: https://playwright.dev/python/docs/next/api/class-frame#frame-select-option
[`element_handle.select_option()`]: https://playwright.dev/python/docs/next/api/class-elementhandle#element-handle-select-option
[`page.drag_and_drop()`]: https://playwright.dev/python/docs/next/api/class-page#page-drag-and-drop
[`frame.drag_and_drop()`]: https://playwright.dev/python/docs/next/api/class-frame#frame-drag-and-drop
[`response.security_details()`]: https://playwright.dev/python/docs/next/api/class-response#response-security-details
[`response.server_addr()`]: https://playwright.dev/python/docs/next/api/class-response#response-server-addr
[`browser.new_context()`]: https://playwright.dev/python/docs/next/api/class-browser#browser-new-context
[`browser.new_page()`]: https://playwright.dev/python/docs/next/api/class-browser#browser-new-page