mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
docs: release notes for language ports (#22762)
This commit is contained in:
parent
8f09935e81
commit
b771a24f2c
@ -4,6 +4,61 @@ title: "Release notes"
|
|||||||
toc_max_heading_level: 2
|
toc_max_heading_level: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Version 1.33
|
||||||
|
|
||||||
|
### Locators Update
|
||||||
|
|
||||||
|
* Use [`method: 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:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var newEmail = page.GetByRole(AriaRole.Button, new() { Name = "New" });
|
||||||
|
var dialog = page.GetByText("Confirm security settings");
|
||||||
|
await Expect(newEmail.Or(dialog)).ToBeVisibleAsync();
|
||||||
|
if (await dialog.IsVisibleAsync())
|
||||||
|
await page.GetByRole(AriaRole.Button, new () { Name = "Dismiss" }).ClickAsync();
|
||||||
|
await newEmail.ClickAsync();
|
||||||
|
```
|
||||||
|
* Use new options [`option: hasNot`] and [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
to find elements that **do not match** certain conditions.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var rowLocator = page.Locator("tr");
|
||||||
|
await rowLocator
|
||||||
|
.Filter(new () { HasNotText = "text in column 1" })
|
||||||
|
.Filter(new () { HasNot = page.GetByRole(AriaRole.Button, new () { Name = "column 2 button" }))
|
||||||
|
.ScreenshotAsync();
|
||||||
|
```
|
||||||
|
* Use new web-first assertion [`method: LocatorAssertions.toBeAttached`] to ensure that the element
|
||||||
|
is present in the page's DOM. Do not confuse with the [`method: LocatorAssertions.toBeVisible`] that ensures that
|
||||||
|
element is both attached & visible.
|
||||||
|
|
||||||
|
### New APIs
|
||||||
|
|
||||||
|
- [`method: Locator.or`]
|
||||||
|
- New option [`option: hasNot`] in [`method: Locator.filter`]
|
||||||
|
- New option [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
- [`method: LocatorAssertions.toBeAttached`]
|
||||||
|
- New option [`option: timeout`] in [`method: Route.fetch`]
|
||||||
|
|
||||||
|
### ⚠️ Breaking change
|
||||||
|
|
||||||
|
* The `mcr.microsoft.com/playwright/dotnet:v1.34.0` now serves a Playwright image based on Ubuntu Jammy.
|
||||||
|
To use the focal-based image, please use `mcr.microsoft.com/playwright/dotnet:v1.34.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
|
||||||
|
|
||||||
|
|
||||||
## Version 1.32
|
## Version 1.32
|
||||||
|
|
||||||
### New APIs
|
### New APIs
|
||||||
|
|||||||
@ -4,6 +4,67 @@ title: "Release notes"
|
|||||||
toc_max_heading_level: 2
|
toc_max_heading_level: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Version 1.33
|
||||||
|
|
||||||
|
### Locators Update
|
||||||
|
|
||||||
|
* Use [`method: 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:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New"));
|
||||||
|
Locator dialog = page.getByText("Confirm security settings");
|
||||||
|
assertThat(newEmail.or(dialog)).isVisible();
|
||||||
|
if (dialog.isVisible())
|
||||||
|
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
|
||||||
|
newEmail.click();
|
||||||
|
```
|
||||||
|
* Use new options [`option: hasNot`] and [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
to find elements that **do not match** certain conditions.
|
||||||
|
|
||||||
|
```java
|
||||||
|
Locator rowLocator = page.locator("tr");
|
||||||
|
rowLocator
|
||||||
|
.filter(new Locator.FilterOptions().setHasNotText("text in column 1"))
|
||||||
|
.filter(new Locator.FilterOptions().setHasNot(
|
||||||
|
page.getByRole(AriaRole.BUTTON,
|
||||||
|
new Page.GetByRoleOptions().setName("column 2 button" ))))
|
||||||
|
.screenshot();
|
||||||
|
```
|
||||||
|
* Use new web-first assertion [`method: LocatorAssertions.toBeAttached`] to ensure that the element
|
||||||
|
is present in the page's DOM. Do not confuse with the [`method: LocatorAssertions.toBeVisible`] that ensures that
|
||||||
|
element is both attached & visible.
|
||||||
|
|
||||||
|
### New APIs
|
||||||
|
|
||||||
|
- [`method: Locator.or`]
|
||||||
|
- New option [`option: hasNot`] in [`method: Locator.filter`]
|
||||||
|
- New option [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
- [`method: LocatorAssertions.toBeAttached`]
|
||||||
|
- New option [`option: timeout`] in [`method: Route.fetch`]
|
||||||
|
|
||||||
|
### Other highlights
|
||||||
|
|
||||||
|
- Native support for Apple Silicon - Playwright now runs without Rosetta
|
||||||
|
- Added Ubuntu 22.04 (Jammy) Docker image
|
||||||
|
|
||||||
|
### ⚠️ Breaking change
|
||||||
|
|
||||||
|
* The `mcr.microsoft.com/playwright/java:v1.34.0` now serves a Playwright image based on Ubuntu Jammy.
|
||||||
|
To use the focal-based image, please use `mcr.microsoft.com/playwright/java:v1.34.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
|
||||||
|
|
||||||
## Version 1.32
|
## Version 1.32
|
||||||
|
|
||||||
### New APIs
|
### New APIs
|
||||||
|
|||||||
@ -4,6 +4,61 @@ title: "Release notes"
|
|||||||
toc_max_heading_level: 2
|
toc_max_heading_level: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Version 1.33
|
||||||
|
|
||||||
|
### Locators Update
|
||||||
|
|
||||||
|
* Use [`method: 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
|
||||||
|
const newEmail = page.get_by_role('button', name='New );
|
||||||
|
const dialog = page.get_by_text('Confirm security settings');
|
||||||
|
expect(newEmail.or_(dialog)).is_visible();
|
||||||
|
if (dialog.is_visible())
|
||||||
|
page.get_by_role('button', name='Dismiss').click();
|
||||||
|
newEmail.click();
|
||||||
|
```
|
||||||
|
* Use new options [`option: hasNot`] and [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
to find elements that **do not match** certain conditions.
|
||||||
|
|
||||||
|
```python
|
||||||
|
const rowLocator = page.locator('tr');
|
||||||
|
rowLocator
|
||||||
|
.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 [`method: LocatorAssertions.toBeAttached`] to ensure that the element
|
||||||
|
is present in the page's DOM. Do not confuse with the [`method: LocatorAssertions.toBeVisible`] that ensures that
|
||||||
|
element is both attached & visible.
|
||||||
|
|
||||||
|
### New APIs
|
||||||
|
|
||||||
|
- [`method: Locator.or`]
|
||||||
|
- New option [`option: hasNot`] in [`method: Locator.filter`]
|
||||||
|
- New option [`option: hasNotText`] in [`method: Locator.filter`]
|
||||||
|
- [`method: LocatorAssertions.toBeAttached`]
|
||||||
|
- New option [`option: timeout`] in [`method: Route.fetch`]
|
||||||
|
|
||||||
|
### ⚠️ Breaking change
|
||||||
|
|
||||||
|
* The `mcr.microsoft.com/playwright/python:v1.34.0` now serves a Playwright image based on Ubuntu Jammy.
|
||||||
|
To use the focal-based image, please use `mcr.microsoft.com/playwright/python:v1.34.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
|
||||||
|
|
||||||
|
|
||||||
## Version 1.32
|
## Version 1.32
|
||||||
|
|
||||||
### New APIs
|
### New APIs
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user