Playwright

Latest version: v1.44.0

Safety actively analyzes 629503 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 17

1.34.0

Highlights

* New [`Locator.and_`](https://playwright.dev/python/docs/api/class-locator#locator-and) to create a locator that matches both locators.

python
button = page.get_by_role("button").and_(page.get_by_title("Subscribe"))


* Its now possible to set a global expect timeout and change the 5 second default:

python
from playwright.sync_api import expect

expect.set_options(timeout=10_000)


* New events [`BrowserContext.on("console")`](https://playwright.dev/python/docs/api/class-browsercontext#browser-context-event-console) and [`BrowserContext.on("dialog")`](https://playwright.dev/python/docs/api/class-browsercontext#browser-context-event-dialog) to subscribe to any dialogs
and console messages from any page from the given browser context. Use the new properties [`ConsoleMessage.page`](https://playwright.dev/python/docs/api/class-consolemessage#console-message-page)
and [`Dialog.page`](https://playwright.dev/python/docs/api/class-dialog#dialog-page) to pin-point event source.

Browser Versions

* Chromium 114.0.5735.26
* Mozilla Firefox 113.0
* WebKit 16.4

This version was also tested against the following stable channels:

* Google Chrome 113
* Microsoft Edge 113

1.33.0

Highlights

Locators Update

* Use [`Locator.or_`](https://playwright.dev/python/docs/api/class-locator#locator-or) to create a locator that matches either of the two locators.
Consider a scenario where you'd like to click on a "New email" button, but sometimes a security settings dialog shows up instead.
In this case, you can wait for either a "New email" button, or a dialog and act accordingly:

python
new_email = page.get_by_role("button", name="New email")
dialog = page.get_by_text("Confirm security settings")
expect(new_email.or_(dialog)).is_visible()
if (dialog.is_visible())
page.get_by_role("button", name="Dismiss").click()
new_email.click()

* Use new options [`has_not`](https://playwright.dev/python/docs/api/class-locator#locator-filter-option-has-not) and [`has_not_text`](https://playwright.dev/python/docs/api/class-locator#locator-filter-option-has-not-text) in [`Locator.filter`](https://playwright.dev/python/docs/api/class-locator#locator-filter)
to find elements that **do not match** certain conditions.

python
row_locator = page.locator("tr")
row_locator
.filter(has_not_text="text in column 1")
.filter(has_not=page.get_by_role("button", name="column 2 button"))
.screenshot()

* Use new web-first assertion [`expect(locator).to_be_attached()`](https://playwright.dev/python/docs/api/class-locatorassertions#locator-assertions-to-be-attached) to ensure that the element
is present in the page's DOM. Do not confuse with the [`expect(locator).to_be_visible()`](https://playwright.dev/python/docs/api/class-locatorassertions#locator-assertions-to-be-visible) that ensures that
element is both attached & visible.

New APIs

- [`Locator.or`](https://playwright.dev/python/docs/api/class-locator#locator-or)
- New option [`has_not`](https://playwright.dev/python/docs/api/class-locator#locator-filter-option-has-not) in [`Locator.filter`](https://playwright.dev/python/docs/api/class-locator#locator-filter)
- New option [`has_not_text`](https://playwright.dev/python/docs/api/class-locator#locator-filter-option-has-not-text) in [`Locator.filter`](https://playwright.dev/python/docs/api/class-locator#locator-filter)
- [`expect(locator).to_be_attached`](https://playwright.dev/python/docs/api/class-locatorassertions#locator-assertions-to-be-attached)
- New option [`timeout`](https://playwright.dev/python/docs/api/class-route#route-fetch-option-timeout) in [`method: Route.fetch`](https://playwright.dev/python/docs/api/class-route#route-fetch)

⚠️ Breaking change

* The `mcr.microsoft.com/playwright/python:v1.33.0` now serves a Playwright image based on Ubuntu Jammy.
To use the focal-based image, please use `mcr.microsoft.com/playwright/python:v1.33.0-focal` instead.

Browser Versions

* Chromium 113.0.5672.53
* Mozilla Firefox 112.0
* WebKit 16.4

This version was also tested against the following stable channels:

* Google Chrome 112
* Microsoft Edge 112

1.32.1

Bugfixes

* [BUG]: fix: discard trace without path did not work in https://github.com/microsoft/playwright-python/pull/1836

1.32.0

New APIs

- Custom expect message, see [test assertions documentation](https://playwright.dev/python/docs/test-assertions#custom-expect-message).
- Chaining existing locator objects, see [locator docs](https://playwright.dev/python/docs/locators#chaining-locators) for details.
- New options `update_mode` and `update_content` in [`page.route_from_har()`](https://playwright.dev/python/docs/api/class-page#page-route-from-har) and [`browser_context.route_from_har()`](https://playwright.dev/python/docs/api/class-browsercontext#browser-context-route-from-har).
- New option `name` in method [`tracing.start_chunk()`](https://playwright.dev/python/docs/api/class-tracing#tracing-start-chunk).

Browser Versions

* Chromium 112.0.5615.29
* Mozilla Firefox 111.0
* WebKit 16.4

This version was also tested against the following stable channels:

* Google Chrome 111
* Microsoft Edge 111

1.31.1

Highlights

https://github.com/microsoft/playwright/issues/21093 - [Regression v1.31] Headless Windows shows cascading cmd windows

Browser Versions

- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4

This version was also tested against the following stable channels:

- Google Chrome 110
- Microsoft Edge 110

1.31.0

New APIs

- New assertion [`expect(locator).to_be_in_viewport()`](https://playwright.dev/python/docs/api/class-locatorassertions#locator-assertions-to-be-in-viewport) ensures that locator points to an element that intersects viewport, according to the [intersection observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API).

python
from playwright.sync_api import expect

locator = page.get_by_role("button")

Make sure at least some part of element intersects viewport.
expect(locator).to_be_in_viewport()

Make sure element is fully outside of viewport.
expect(locator).not_to_be_in_viewport()

Make sure that at least half of the element intersects viewport.
expect(locator).to_be_in_viewport(ratio=0.5)


Miscellaneous

- DOM snapshots in trace viewer can be now opened in a separate window.
- New option `max_redirects` for method [`Route.fetch`](https://playwright.dev/python/docs/api/class-route#route-fetch).
- Playwright now supports Debian 11 arm64.

Browser Versions

* Chromium 111.0.5563.19
* Mozilla Firefox 109.0
* WebKit 16.4

This version was also tested against the following stable channels:

* Google Chrome 110
* Microsoft Edge 110

Page 3 of 17

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.