diff --git a/docs/src/release-notes-csharp.md b/docs/src/release-notes-csharp.md index df22402b87..54d91386cb 100644 --- a/docs/src/release-notes-csharp.md +++ b/docs/src/release-notes-csharp.md @@ -4,6 +4,82 @@ title: "Release notes" toc_max_heading_level: 2 --- +## Version 1.44 + +### New APIs + +**Accessibility assertions** + +- [`method: LocatorAssertions.toHaveAccessibleName`] checks if the element has the specified accessible name: + ```csharp + var locator = Page.GetByRole(AriaRole.Button); + await Expect(locator).ToHaveAccessibleNameAsync("Submit"); + ``` + +- [`method: LocatorAssertions.toHaveAccessibleDescription`] checks if the element has the specified accessible description: + ```csharp + var locator = Page.GetByRole(AriaRole.Button); + await Expect(locator).ToHaveAccessibleDescriptionAsync("Upload a photo"); + ``` + +- [`method: LocatorAssertions.toHaveRole`] checks if the element has the specified ARIA role: + ```csharp + var locator = Page.GetByTestId("save-button"); + await Expect(locator).ToHaveRoleAsync(AriaRole.Button); + ``` + +**Locator handler** + +- After executing the handler added with [`method: Page.addLocatorHandler`], 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 `NoWaitAfter` option. +- You can use new `Times` option in [`method: Page.addLocatorHandler`] to specify maximum number of times the handler should be run. +- The handler in [`method: Page.addLocatorHandler`] now accepts the locator as argument. +- New [`method: Page.removeLocatorHandler`] method for removing previously added locator handlers. + +```csharp +var locator = Page.GetByText("This interstitial covers the button"); +await Page.AddLocatorHandlerAsync(locator, async (overlay) => +{ + await overlay.Locator("#close").ClickAsync(); +}, new() { Times = 3, NoWaitAfter = true }); +// Run your tests that can be interrupted by the overlay. +// ... +await Page.RemoveLocatorHandlerAsync(locator); +``` + +**Miscellaneous options** + +- New method [`method: FormData.append`] allows to specify repeating fields with the same name in [`Multipart`](./api/class-apirequestcontext#api-request-context-fetch-option-multipart) option in `APIRequestContext.FetchAsync()`: +- ``` + ```csharp + var formData = Context.APIRequest.CreateFormData(); + formData.Append("file", new FilePayload() + { + Name = "f1.js", + MimeType = "text/javascript", + Buffer = System.Text.Encoding.UTF8.GetBytes("var x = 2024;") + }); + formData.Append("file", new FilePayload() + { + Name = "f2.txt", + MimeType = "text/plain", + Buffer = System.Text.Encoding.UTF8.GetBytes("hello") + }); + var response = await Context.APIRequest.PostAsync("https://example.com/uploadFiles", new() { Multipart = formData }); + ``` + +- [`method: PageAssertions.toHaveURL`] now supports `IgnoreCase` [option](./api/class-pageassertions#page-assertions-to-have-url-option-ignore-case). + +### 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 + ## Version 1.43 ### New APIs diff --git a/docs/src/release-notes-java.md b/docs/src/release-notes-java.md index 579d135f58..4a46556f68 100644 --- a/docs/src/release-notes-java.md +++ b/docs/src/release-notes-java.md @@ -4,6 +4,72 @@ title: "Release notes" toc_max_heading_level: 2 --- +## Version 1.44 + +### New APIs + +**Accessibility assertions** + +- [`method: LocatorAssertions.toHaveAccessibleName`] checks if the element has the specified accessible name: + ```java + Locator locator = page.getByRole(AriaRole.BUTTON); + assertThat(locator).hasAccessibleName("Submit"); + ``` + +- [`method: LocatorAssertions.toHaveAccessibleDescription`] checks if the element has the specified accessible description: + ```java + Locator locator = page.getByRole(AriaRole.BUTTON); + assertThat(locator).hasAccessibleDescription("Upload a photo"); + ``` + +- [`method: LocatorAssertions.toHaveRole`] checks if the element has the specified ARIA role: + ```java + Locator locator = page.getByTestId("save-button"); + assertThat(locator).hasRole(AriaRole.BUTTON); + ``` + +**Locator handler** + +- After executing the handler added with [`method: Page.addLocatorHandler`], 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 `setNoWaitAfter` option. +- You can use new `setTimes` option in [`method: Page.addLocatorHandler`] to specify maximum number of times the handler should be run. +- The handler in [`method: Page.addLocatorHandler`] now accepts the locator as argument. +- New [`method: Page.removeLocatorHandler`] method for removing previously added locator handlers. + +```java +Locator locator = page.getByText("This interstitial covers the button"); +page.addLocatorHandler(locator, overlay -> { + overlay.locator("#close").click(); +}, new Page.AddLocatorHandlerOptions().setTimes(3).setNoWaitAfter(true)); +// Run your tests that can be interrupted by the overlay. +// ... +page.removeLocatorHandler(locator); +``` + +**Miscellaneous options** + +- New method [`method: FormData.append`] allows to specify repeating fields with the same name in [`setMultipart`](./api/class-requestoptions#request-options-set-multipart) option in `RequestOptions`: + ```java + FormData formData = FormData.create(); + formData.append("file", new FilePayload("f1.js", "text/javascript", + "var x = 2024;".getBytes(StandardCharsets.UTF_8))); + formData.append("file", new FilePayload("f2.txt", "text/plain", + "hello".getBytes(StandardCharsets.UTF_8))); + APIResponse response = context.request().post("https://example.com/uploadFile", RequestOptions.create().setMultipart(formData)); + ``` + +- `expect(page).toHaveURL(url)` now supports `setIgnoreCase` [option](./api/class-pageassertions#page-assertions-to-have-url-option-ignore-case). + +### 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 + ## Version 1.43 ### New APIs diff --git a/docs/src/release-notes-python.md b/docs/src/release-notes-python.md index 789a89150c..590a4edb88 100644 --- a/docs/src/release-notes-python.md +++ b/docs/src/release-notes-python.md @@ -4,6 +4,60 @@ title: "Release notes" toc_max_heading_level: 2 --- +## Version 1.44 + +### New APIs + +**Accessibility assertions** + +- [`method: LocatorAssertions.toHaveAccessibleName`] checks if the element has the specified accessible name: + ```python + locator = page.get_by_role("button") + expect(locator).to_have_accessible_name("Submit") + ``` + +- [`method: LocatorAssertions.toHaveAccessibleDescription`] checks if the element has the specified accessible description: + ```python + locator = page.get_by_role("button") + expect(locator).to_have_accessible_description("Upload a photo") + ``` + +- [`method: LocatorAssertions.toHaveRole`] checks if the element has the specified ARIA role: + ```python + locator = page.get_by_test_id("save-button") + expect(locator).to_have_role("button") + ``` + +**Locator handler** + +- After executing the handler added with [`method: Page.addLocatorHandler`], 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 [`method: Page.addLocatorHandler`] to specify maximum number of times the handler should be run. +- The handler in [`method: Page.addLocatorHandler`] now accepts the locator as argument. +- New [`method: Page.removeLocatorHandler`] method for removing previously added locator handlers. + +```python +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** + +- [`method: PageAssertions.toHaveURL`] now supports `ignore_case` [option](./api/class-pageassertions#page-assertions-to-have-url-option-ignore-case). + +### 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 + ## Version 1.43 ### New APIs