Update dependency playwright to v1.46.0 - autoclosed
This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
playwright (changelog) |
1.38.0 -> 1.46.0
|
Update flake.nix before merging this! The versions have to match!
Release Notes
Microsoft/playwright-python (playwright)
v1.46.0
TLS Client Certificates
Playwright now allows to supply client-side certificates, so that server can verify them, as specified by TLS Client Authentication.
You can provide client certificates as a parameter of browser.new_context() and api_request.new_context(). The following snippet sets up a client certificate for https://example.com
:
context = browser.new_context(
client_certificates=[
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
)
When using the Pytest plugin, it can be added like this:
@​pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
return {
**browser_context_args,
"client_certificates": [
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
}
Trace Viewer Updates
- Content of text attachments is now rendered inline in the attachments pane.
- New setting to show/hide routing actions like route.continue_().
- Request method and status are shown in the network details tab.
- New button to copy source file location to clipboard.
- Metadata pane now displays the
base_url
.
Miscellaneous
- New
max_retries
option in apiRequestContext.fetch() which retries on theECONNRESET
network error.
Browser Versions
- Chromium 128.0.6613.18
- Mozilla Firefox 128.0
- WebKit 18.0
This version was also tested against the following stable channels:
- Google Chrome 127
- Microsoft Edge 127
v1.45.1
Highlights
https://github.com/microsoft/playwright-java/issues/1617 - [Bug]: Trace Viewer not reporting all actions https://github.com/microsoft/playwright/issues/31764 - [Bug]: some actions do not appear in the trace file
Browser Versions
- Chromium 127.0.6533.5
- Mozilla Firefox 127.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 126
- Microsoft Edge 126
v1.45.0
Clock
Utilizing the new Clock API allows to manipulate and control time within tests to verify time-related behavior. This API covers many common scenarios, including:
- testing with predefined time;
- keeping consistent time and timers;
- monitoring inactivity;
- ticking through time manually.
### Initialize clock with some time before the test time and let the page load
### naturally. `Date.now` will progress as the timers fire.
page.clock.install(time=datetime.datetime(2024, 2, 2, 8, 0, 0))
page.goto("http://localhost:3333")
### Pretend that the user closed the laptop lid and opened it again at 10am.
### Pause the time once reached that point.
page.clock.pause_at(datetime.datetime(2024, 2, 2, 10, 0, 0))
### Assert the page state.
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:00:00 AM")
### Close the laptop lid again and open it at 10:30am.
page.clock.fast_forward("30:00")
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:30:00 AM")
See the clock guide for more details.
Miscellaneous
- Method locator.setInputFiles() now supports uploading a directory for
<input type=file webkitdirectory>
elements.page.get_by_label("Upload directory").set_input_files('mydir')
- Multiple methods like locator.click() or locator.press() now support a
ControlOrMeta
modifier key. This key maps toMeta
on macOS and maps toControl
on Windows and Linux.
Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation.
page.keyboard.press("ControlOrMeta+S")
- New property `httpCredentials.send` in [apiRequest.newContext()](https://playwright.dev/python/docs/api/class-apirequest#api-request-new-context) that allows to either always send the `Authorization` header or only send it in response to `401 Unauthorized`.
- Playwright now supports Chromium, Firefox and WebKit on Ubuntu 24.04.
- v1.45 is the last release to receive WebKit update for macOS 12 Monterey. Please update macOS to keep using the latest WebKit.
#### Browser Versions
* Chromium 127.0.6533.5
* Mozilla Firefox 127.0
* WebKit 17.4
This version was also tested against the following stable channels:
* Google Chrome 126
* Microsoft Edge 126
v1.44.0
New APIs
Accessibility assertions
-
expect(locator).to_have_accessible_name() checks if the element has the specified accessible name:
locator = page.get_by_role("button") expect(locator).to_have_accessible_name("Submit")
-
expect(locator).to_have_accessible_description() checks if the element has the specified accessible description:
locator = page.get_by_role("button") expect(locator).to_have_accessible_description("Upload a photo")
-
expect(locator).to_have_role() checks if the element has the specified ARIA role:
locator = page.get_by_test_id("save-button") expect(locator).to_have_role("button")
Locator handler
- After executing the handler added with page.add_locator_handler(), Playwright will now wait until the overlay that triggered the handler is not visible anymore. You can opt-out of this behavior with the new
no_wait_after
option. - You can use new
times
option in page.add_locator_handler() to specify maximum number of times the handler should be run. - The handler in page.add_locator_handler() now accepts the locator as argument.
- New page.remove_locator_handler() method for removing previously added locator handlers.
locator = page.get_by_text("This interstitial covers the button")
page.add_locator_handler(locator, lambda overlay: overlay.locator("#close").click(), times=3, no_wait_after=True)
### Run your tests that can be interrupted by the overlay.
### ...
page.remove_locator_handler(locator)
Miscellaneous options
-
expect(page).to_have_url() now supports
ignore_case
option.
Browser Versions
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 124
- Microsoft Edge 124
v1.43.0
New APIs
-
Method BrowserContext.clear_cookies([options]) now supports filters to remove only some cookies.
Clear all cookies.
context.clear_cookies()
New: clear cookies with a particular name.
context.clear_cookies(name="session-id")
New: clear cookies for a particular domain.
context.clear_cookies(domain="my-origin.com")
- New method [locator.content_frame](https://playwright.dev/python/docs/api/class-locator#locator-content-frame) converts a {@​link Locator} object to a [FrameLocator](https://playwright.dev/python/docs/api/class-framelocator). This can be useful when you have a [Locator](https://playwright.dev/python/docs/api/class-locator) object obtained somewhere, and later on would like to interact with the content inside the frame.
```python
locator = page.locator("iframe[name='embedded']")
### ...
frame_locator = locator.content_frame
frame_locator.getByRole("button").click()
-
New method frameLocator.owner converts a FrameLocator object to a Locator. This can be useful when you have a FrameLocator object obtained somewhere, and later on would like to interact with the
iframe
element.frame_locator = page.frame_locator("iframe[name='embedded']")
...
locator = frame_locator.owner expect(locator).to_be_visible()
- Conda builds are now published for macOS-arm64 and Linux-arm64.
#### Browser Versions
* Chromium 124.0.6367.8
* Mozilla Firefox 124.0
* WebKit 17.4
This version was also tested against the following stable channels:
* Google Chrome 123
* Microsoft Edge 123
v1.42.0
New Locator Handler
New method page.add_locator_handler(locator, handler) registers a callback that will be invoked when specified element becomes visible and may block Playwright actions. The callback can get rid of the overlay. Here is an example that closes a cookie dialog when it appears.
### Setup the handler.
page.add_locator_handler(
page.get_by_role("heading", name="Hej! You are in control of your cookies."),
lambda: page.get_by_role("button", name="Accept all").click(),
)
### Write the test as usual.
page.goto("https://www.ikea.com/")
page.get_by_role("link", name="Collection of blue and white").click()
expect(page.get_by_role("heading", name="Light and easy")).to_be_visible()
New APIs
-
page.pdf([options]) accepts two new options
tagged
andoutline
.
Announcements
-
⚠ ️ Ubuntu 18 is not supported anymore.
Browser Versions
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 122
- Microsoft Edge 123
v1.41.2
Highlights
https://github.com/microsoft/playwright-python/issues/2258 - [REGRESSION] Failing step is not highlighted in red in actions panel for versions after 1.39.0 https://github.com/microsoft/playwright/issues/29123 - [REGRESSION] route.continue: Protocol error (Fetch.continueRequest): Invalid InterceptionId.
Browser Versions
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 120
- Microsoft Edge 120
v1.41.1
Highlights
https://github.com/microsoft/playwright/issues/29067 - [REGRESSION] Codegen/Recorder: not all clicks are being actioned nor recorded https://github.com/microsoft/playwright/issues/29019 - [REGRESSION] trace.playwright.dev does not currently support the loading from URL
Browser Versions
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 120
- Microsoft Edge 120
v1.41.0
New APIs
- New method page.unroute_all() removes all routes registered by page.route() and page.route_from_har(). Optionally allows to wait for ongoing routes to finish, or ignore any errors from them.
- New method browserContext.unroute_all() removes all routes registered by browserContext.route() and browserContext.route_from_har(). Optionally allows to wait for ongoing routes to finish, or ignore any errors from them.
- New option
style
in page.screenshot() and locator.screenshot() to add custom CSS to the page before taking a screenshot.
Browser Versions
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 120
- Microsoft Edge 120
v1.40.0
Test Generator Update
New tools to generate assertions:
- "Assert visibility" tool generates expect(locator).to_be_visible().
- "Assert value" tool generates expect(locator).to_have_value(value).
- "Assert text" tool generates expect(locator).to_contain_text(expected).
Here is an example of a generated test with assertions:
from playwright.sync_api import Page, expect
def test_example(page: Page) -> None:
page.goto("https://playwright.dev/")
page.get_by_role("link", name="Get started").click()
expect(page.get_by_label("Breadcrumbs").get_by_role("list")).to_contain_text("Installation")
expect(page.get_by_label("Search")).to_be_visible()
page.get_by_label("Search").click()
page.get_by_placeholder("Search docs").fill("locator")
expect(page.get_by_placeholder("Search docs")).to_have_value("locator");
New APIs
- Option
reason
in page.close([options]), browserContext.close([options]) and browser.close([options]). Close reason is reported for all operations interrupted by the closure. - Option
firefox_user_prefs
in browserType.launch_persistent_context(userDataDir[, options]).
Other Changes
- Method download.path() throws an error for failed and cancelled downloads.
Browser Versions
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 119
- Microsoft Edge 119
v1.39.0
Features
Python 3.12 support.
Browser Versions
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 118
- Microsoft Edge 118
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.