mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
632 lines
22 KiB
Markdown
632 lines
22 KiB
Markdown
---
|
|
id: release-notes
|
|
title: "Release notes"
|
|
toc_max_heading_level: 2
|
|
---
|
|
|
|
## Version 1.26
|
|
|
|
### Assertions
|
|
|
|
- [`method: LocatorAssertions.toHaveAttribute#2`] can now be used for asserting attribute existence.
|
|
- New option `Enabled` for [`method: LocatorAssertions.toBeEnabled`].
|
|
- [`method: LocatorAssertions.toHaveText`] now pierces open shadow roots.
|
|
- New option `Editable` for [`method: LocatorAssertions.toBeEditable`].
|
|
- New option `Visible` for [`method: LocatorAssertions.toBeVisible`].
|
|
- [`method: APIResponseAssertions.toBeOK`] is now available.
|
|
|
|
### Other highlights
|
|
|
|
- New option `MaxRedirects` for [`method: APIRequestContext.get`] and others to limit redirect count.
|
|
- Codegen now supports NUnit and MSTest frameworks.
|
|
- ASP .NET is now supported.
|
|
|
|
### Behavior Change
|
|
|
|
A bunch of Playwright APIs already support the `WaitUntil: WaitUntilState.DOMContentLoaded` option.
|
|
For example:
|
|
|
|
```csharp
|
|
await Page.GotoAsync("https://playwright.dev", new() { WaitUntil = WaitUntilState.DOMContentLoaded });
|
|
```
|
|
|
|
Prior to 1.26, this would wait for all iframes to fire the `DOMContentLoaded`
|
|
event.
|
|
|
|
To align with web specification, the `WaitUntilState.DOMContentLoaded` value only waits for
|
|
the target frame to fire the `'DOMContentLoaded'` event. Use `WaitUntil: WaitUntilState.Load` to wait for all iframes.
|
|
|
|
## Version 1.25
|
|
|
|
### New .runsettings file support
|
|
|
|
`Microsoft.Playwright.NUnit` and `Microsoft.Playwright.MSTest` will now consider the `.runsettings` file and passed settings via the CLI when running end-to-end tests. See in the [documentation](https://playwright.dev/dotnet/docs/test-runners) for a full list of supported settings.
|
|
|
|
The following does now work:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<RunSettings>
|
|
<!-- Playwright -->
|
|
<Playwright>
|
|
<BrowserName>chromium</BrowserName>
|
|
<ExpectTimeout>5000</ExpectTimeout>
|
|
<LaunchOptions>
|
|
<Headless>true</Headless>
|
|
<Channel>msedge</Channel>
|
|
</LaunchOptions>
|
|
</Playwright>
|
|
<!-- General run configuration -->
|
|
<RunConfiguration>
|
|
<EnvironmentVariables>
|
|
<!-- For debugging selectors, it's recommend to set the following environment variable -->
|
|
<DEBUG>pw:api</DEBUG>
|
|
</EnvironmentVariables>
|
|
</RunConfiguration>
|
|
</RunSettings>
|
|
```
|
|
|
|
### Announcements
|
|
|
|
* 🪦 This is the last release with macOS 10.15 support (deprecated as of 1.21).
|
|
* ⚠️ Ubuntu 18 is now deprecated and will not be supported as of Dec 2022.
|
|
|
|
### Browser Versions
|
|
|
|
* Chromium 105.0.5195.19
|
|
* Mozilla Firefox 103.0
|
|
* WebKit 16.0
|
|
|
|
This version was also tested against the following stable channels:
|
|
|
|
* Google Chrome 104
|
|
* Microsoft Edge 104
|
|
|
|
## Version 1.24
|
|
|
|
<div className="embed-youtube">
|
|
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/9F05o1shxcY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
|
</div>
|
|
|
|
### 🐂 Debian 11 Bullseye Support
|
|
|
|
Playwright now supports Debian 11 Bullseye on x86_64 for Chromium, Firefox and WebKit. Let us know
|
|
if you encounter any issues!
|
|
|
|
Linux support looks like this:
|
|
|
|
| | Ubuntu 18.04 | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11
|
|
| :--- | :---: | :---: | :---: | :---: |
|
|
| Chromium | ✅ | ✅ | ✅ | ✅ |
|
|
| WebKit | ✅ | ✅ | ✅ | ✅ |
|
|
| Firefox | ✅ | ✅ | ✅ | ✅ |
|
|
|
|
### New introduction docs
|
|
|
|
We rewrote our Getting Started docs to be more end-to-end testing focused. Check them out on [playwright.dev](https://playwright.dev/dotnet/docs/intro).
|
|
|
|
## Version 1.23
|
|
|
|
### API Testing
|
|
|
|
Playwright for .NET 1.23 introduces new [API Testing](./api/class-apirequestcontext) that lets you send requests to the server directly from .NET!
|
|
Now you can:
|
|
|
|
- test your server API
|
|
- prepare server side state before visiting the web application in a test
|
|
- validate server side post-conditions after running some actions in the browser
|
|
|
|
To do a request on behalf of Playwright's Page, use **new [`property: Page.request`] API**:
|
|
|
|
```csharp
|
|
// Do a GET request on behalf of page
|
|
var response = await Page.APIRequest.GetAsync("http://example.com/foo.json");
|
|
Console.WriteLine(response.Status);
|
|
Console.WriteLine(response.StatusText);
|
|
Console.WriteLine(response.Ok);
|
|
Console.WriteLine(response.Headers["Content-Type"]);
|
|
Console.WriteLine(await response.TextAsync());
|
|
Console.WriteLine((await response.JsonAsync())?.GetProperty("foo").GetString());
|
|
```
|
|
|
|
Read more about it in our [API testing guide](./api-testing).
|
|
|
|
### Network Replay
|
|
|
|
Now you can record network traffic into a HAR file and re-use this traffic in your tests.
|
|
|
|
To record network into HAR file:
|
|
|
|
```bash
|
|
pwsh bin/Debug/netX/playwright.ps1 open --save-har=example.har --save-har-glob="**/api/**" https://example.com
|
|
```
|
|
|
|
Alternatively, you can record HAR programmatically:
|
|
|
|
```csharp
|
|
var context = await browser.NewContextAsync(new()
|
|
{
|
|
RecordHarPath = harPath,
|
|
RecordHarUrlFilterString = "**/api/**",
|
|
});
|
|
|
|
// ... Perform actions ...
|
|
|
|
// Close context to ensure HAR is saved to disk.
|
|
context.CloseAsync();
|
|
```
|
|
|
|
Use the new methods [`method: Page.routeFromHAR`] or [`method: BrowserContext.routeFromHAR`] to serve matching responses from the [HAR](http://www.softwareishard.com/blog/har-12-spec/) file:
|
|
|
|
|
|
```csharp
|
|
await context.RouteFromHARAsync("example.har");
|
|
```
|
|
|
|
Read more in [our documentation](./network#record-and-replay-requests).
|
|
|
|
|
|
### Advanced Routing
|
|
|
|
You can now use [`method: Route.fallback`] to defer routing to other handlers.
|
|
|
|
Consider the following example:
|
|
|
|
```csharp
|
|
// Remove a header from all requests.
|
|
await page.RouteAsync("**/*", async route =>
|
|
{
|
|
var headers = route.Request.Headers;
|
|
headers.Remove("X-Secret");
|
|
await route.ContinueAsync(new() { Headers = headers });
|
|
});
|
|
|
|
// Abort all images.
|
|
await page.RouteAsync("**/*", async route =>
|
|
{
|
|
if (route.Request.ResourceType == "image")
|
|
{
|
|
await route.AbortAsync();
|
|
}
|
|
else
|
|
{
|
|
await route.FallbackAsync();
|
|
}
|
|
});
|
|
```
|
|
|
|
Note that the new methods [`method: Page.routeFromHAR`] and [`method: BrowserContext.routeFromHAR`] also participate in routing and could be deferred to.
|
|
|
|
### Web-First Assertions Update
|
|
|
|
* New method [`method: LocatorAssertions.toHaveValues`] that asserts all selected values of `<select multiple>` element.
|
|
* Methods [`method: LocatorAssertions.toContainText`] and [`method: LocatorAssertions.toHaveText`] now accept `ignoreCase` option.
|
|
|
|
### Miscellaneous
|
|
|
|
* If there's a service worker that's in your way, you can now easily disable it with a new context option `serviceWorkers`:
|
|
```csharp
|
|
var context = await Browser.NewContextAsync(new()
|
|
{
|
|
ServiceWorkers = ServiceWorkerPolicy.Block
|
|
});
|
|
```
|
|
* Using `.zip` path for `recordHar` context option automatically zips the resulting HAR:
|
|
```csharp
|
|
var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har.zip" });
|
|
```
|
|
* If you intend to edit HAR by hand, consider using the `"minimal"` HAR recording mode
|
|
that only records information that is essential for replaying:
|
|
```csharp
|
|
var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har", RecordHarMode = HarMode.Minimal });
|
|
```
|
|
* Playwright now runs on Ubuntu 22 amd64 and Ubuntu 22 arm64.
|
|
* Playwright for .NET now supports **linux-arm64** and provides a **arm64 Ubuntu 20.04 Docker image** for it.
|
|
|
|
## Version 1.22
|
|
|
|
### Highlights
|
|
|
|
- Role selectors that allow selecting elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
|
|
|
|
```csharp
|
|
// Click a button with accessible name "log in"
|
|
await page.Locator("role=button[name='log in']").ClickAsync();
|
|
```
|
|
|
|
Read more in [our documentation](./selectors#role-selector).
|
|
|
|
- New [`method: Locator.filter`] API to filter an existing locator
|
|
|
|
```csharp
|
|
var buttons = page.Locator("role=button");
|
|
// ...
|
|
var submitLocator = buttons.Filter(new LocatorFilterOptions { HasText = "Sign up" });
|
|
await submitLocator.ClickAsync();
|
|
```
|
|
|
|
## Version 1.21
|
|
|
|
### Highlights
|
|
|
|
- New role selectors that allow selecting elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
|
|
|
|
```csharp
|
|
// Click a button with accessible name "log in"
|
|
await page.Locator("role=button[name='log in']").ClickAsync();
|
|
```
|
|
|
|
Read more in [our documentation](./selectors#role-selector).
|
|
- New `scale` option in [`method: Page.screenshot`] for smaller sized screenshots.
|
|
- New `caret` option in [`method: Page.screenshot`] to control text caret. Defaults to `"hide"`.
|
|
- We now ship a designated .NET docker image `mcr.microsoft.com/playwright/dotnet`. Read more in [our documentation](./docker).
|
|
|
|
### Behavior Changes
|
|
|
|
- Playwright now supports large file uploads (100s of MBs) via [`method: Locator.setInputFiles`] API.
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 101.0.4951.26
|
|
- Mozilla Firefox 98.0.2
|
|
- WebKit 15.4
|
|
|
|
This version was also tested against the following stable channels:
|
|
|
|
- Google Chrome 100
|
|
- Microsoft Edge 100
|
|
|
|
|
|
## Version 1.20
|
|
|
|
### Web-First Assertions
|
|
|
|
Playwright for .NET 1.20 introduces [Web-First Assertions](./test-assertions).
|
|
|
|
Consider the following example:
|
|
|
|
```csharp
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Playwright.NUnit;
|
|
using NUnit.Framework;
|
|
|
|
namespace PlaywrightTests;
|
|
|
|
[TestFixture]
|
|
public class ExampleTests : PageTest
|
|
{
|
|
[Test]
|
|
public async Task StatusBecomesSubmitted()
|
|
{
|
|
await Expect(Page.Locator(".status")).ToHaveTextAsync("Submitted");
|
|
}
|
|
}
|
|
```
|
|
|
|
Playwright will be re-testing the node with the selector `.status` until
|
|
fetched Node has the `"Submitted"` text. It will be re-fetching the node and
|
|
checking it over and over, until the condition is met or until the timeout is
|
|
reached. You can pass this timeout as an option.
|
|
|
|
Read more in [our documentation](./test-assertions).
|
|
|
|
### Other Updates
|
|
|
|
- New options for methods [`method: Page.screenshot`], [`method: Locator.screenshot`] and [`method: ElementHandle.screenshot`]:
|
|
* Option `ScreenshotAnimations.Disabled` rewinds all CSS animations and transitions to a consistent state
|
|
* Option `mask: Locator[]` masks given elements, overlaying them with pink `#FF00FF` boxes.
|
|
- [`method: Locator.highlight`] visually reveals element(s) for easier debugging.
|
|
|
|
### Announcements
|
|
|
|
- v1.20 is the last release to receive WebKit update for macOS 10.15 Catalina. Please update MacOS to keep using latest & greatest WebKit!
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 101.0.4921.0
|
|
- Mozilla Firefox 97.0.1
|
|
- WebKit 15.4
|
|
|
|
This version was also tested against the following stable channels:
|
|
|
|
- Google Chrome 99
|
|
- Microsoft Edge 99
|
|
|
|
## Version 1.19
|
|
|
|
### Highlights
|
|
|
|
- Locator now supports a `has` option that makes sure it contains another locator inside:
|
|
|
|
```csharp
|
|
await Page.Locator("article", new() { Has = Page.Locator(".highlight") }).ClickAsync();
|
|
```
|
|
|
|
Read more in [locator documentation](./api/class-locator#locator-locator-option-has)
|
|
|
|
- New [`method: Locator.page`]
|
|
- [`method: Page.screenshot`] and [`method: Locator.screenshot`] now automatically hide blinking caret
|
|
- Playwright Codegen now generates locators and frame locators
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 100.0.4863.0
|
|
- Mozilla Firefox 96.0.1
|
|
- WebKit 15.4
|
|
|
|
This version was also tested against the following stable channels:
|
|
|
|
- Google Chrome 98
|
|
- Microsoft Edge 98
|
|
|
|
|
|
## Version 1.18
|
|
|
|
### Locator Improvements
|
|
|
|
- [`method: Locator.dragTo`]
|
|
- Each locator can now be optionally filtered by the text it contains:
|
|
```csharp
|
|
await Page.Locator("li", new() { HasTextString = "My Item" })
|
|
.Locator("button").click();
|
|
```
|
|
Read more in [locator documentation](./api/class-locator#locator-locator-option-has-text)
|
|
|
|
|
|
### New APIs & changes
|
|
|
|
- [`AcceptDownloads`](./api/class-browser#browser-new-context-option-accept-downloads) option now defaults to `true`.
|
|
- [`Sources`](./api/class-tracing#tracing-start-option-sources) option to embed sources into traces.
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 99.0.4812.0
|
|
- Mozilla Firefox 95.0
|
|
- WebKit 15.4
|
|
|
|
This version was also tested against the following stable channels:
|
|
|
|
- Google Chrome 97
|
|
- Microsoft Edge 97
|
|
|
|
|
|
|
|
## Version 1.17
|
|
|
|
### Frame Locators
|
|
|
|
Playwright 1.17 introduces [frame locators](./api/class-framelocator) - a locator to the iframe on the page. Frame locators capture the logic sufficient to retrieve the `iframe` and then locate elements in that iframe. Frame locators are strict by default, will wait for `iframe` to appear and can be used in Web-First assertions.
|
|
|
|

|
|
|
|
Frame locators can be created with either [`method: Page.frameLocator`] or [`method: Locator.frameLocator`] method.
|
|
|
|
```csharp
|
|
var locator = page.FrameLocator("#my-frame").Locator("text=Submit");
|
|
await locator.ClickAsync();
|
|
```
|
|
|
|
Read more at [our documentation](./api/class-framelocator).
|
|
|
|
### Trace Viewer Update
|
|
|
|
Playwright Trace Viewer is now **available online** at https://trace.playwright.dev! Just drag-and-drop your `trace.zip` file to inspect its contents.
|
|
|
|
> **NOTE**: trace files are not uploaded anywhere; [trace.playwright.dev](https://trace.playwright.dev) is a [progressive web application](https://web.dev/progressive-web-apps/) that processes traces locally.
|
|
|
|
- Playwright Test traces now include sources by default (these could be turned off with tracing option)
|
|
- Trace Viewer now shows test name
|
|
- New trace metadata tab with browser details
|
|
- Snapshots now have URL bar
|
|
|
|

|
|
|
|
### HTML Report Update
|
|
|
|
- HTML report now supports dynamic filtering
|
|
- Report is now a **single static HTML file** that could be sent by e-mail or as a slack attachment.
|
|
|
|

|
|
|
|
### Ubuntu ARM64 support + more
|
|
|
|
- Playwright now supports **Ubuntu 20.04 ARM64**. You can now run Playwright tests inside Docker on Apple M1 and on Raspberry Pi.
|
|
- You can now use Playwright to install stable version of Edge on Linux:
|
|
```bash
|
|
pwsh bin/Debug/netX/playwright.ps1 install msedge
|
|
```
|
|
|
|
|
|
### New APIs
|
|
|
|
- Tracing now supports a [`'title'`](./api/class-tracing#tracing-start-option-title) option
|
|
- Page navigations support a new [`'commit'`](./api/class-page#page-goto) waiting option
|
|
|
|
## Version 1.16
|
|
|
|
### 🎭 Playwright Library
|
|
|
|
#### Locator.WaitForAsync
|
|
|
|
Wait for a locator to resolve to a single element with a given state.
|
|
Defaults to the `state: 'visible'`.
|
|
|
|
```csharp
|
|
var orderSent = page.Locator("#order-sent");
|
|
orderSent.WaitForAsync();
|
|
```
|
|
|
|
Read more about [`method: Locator.waitFor`].
|
|
|
|
### 🎭 Playwright Trace Viewer
|
|
|
|
- run trace viewer with `pwsh bin/Debug/netX/playwright.ps1 show-trace` and drop trace files to the trace viewer PWA
|
|
- better visual attribution of action targets
|
|
|
|
Read more about [Trace Viewer](./trace-viewer).
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 97.0.4666.0
|
|
- Mozilla Firefox 93.0
|
|
- WebKit 15.4
|
|
|
|
This version of Playwright was also tested against the following stable channels:
|
|
|
|
- Google Chrome 94
|
|
- Microsoft Edge 94
|
|
|
|
|
|
## Version 1.15
|
|
|
|
### 🖱️ Mouse Wheel
|
|
|
|
By using [`Page.Mouse.WheelAsync`](https://playwright.dev/dotnet/docs/next/api/class-mouse#mouse-wheel) you are now able to scroll vertically or horizontally.
|
|
|
|
### 📜 New Headers API
|
|
|
|
Previously it was not possible to get multiple header values of a response. This is now possible and additional helper functions are available:
|
|
|
|
- [Request.AllHeadersAsync()](https://playwright.dev/dotnet/docs/next/api/class-request#request-all-headers)
|
|
- [Request.HeadersArrayAsync()](https://playwright.dev/dotnet/docs/next/api/class-request#request-headers-array)
|
|
- [Request.HeaderValueAsync(name: string)](https://playwright.dev/dotnet/docs/next/api/class-request#request-header-value)
|
|
- [Response.AllHeadersAsync()](https://playwright.dev/dotnet/docs/next/api/class-response#response-all-headers)
|
|
- [Response.HeadersArrayAsync()](https://playwright.dev/dotnet/docs/next/api/class-response#response-headers-array)
|
|
- [Response.HeaderValueAsync(name: string)](https://playwright.dev/dotnet/docs/next/api/class-response#response-header-value)
|
|
- [Response.HeaderValuesAsync(name: string)](https://playwright.dev/dotnet/docs/next/api/class-response#response-header-values)
|
|
|
|
### 🌈 Forced-Colors emulation
|
|
|
|
Its now possible to emulate the `forced-colors` CSS media feature by passing it in the [context options](https://playwright.dev/dotnet/docs/next/api/class-browser#browser-new-context-option-forced-colors) or calling [Page.EmulateMediaAsync()](https://playwright.dev/dotnet/docs/next/api/class-page#page-emulate-media).
|
|
|
|
### New APIs
|
|
|
|
- [Page.RouteAsync()](https://playwright.dev/dotnet/docs/next/api/class-page#page-route) accepts new `times` option to specify how many times this route should be matched.
|
|
- [Page.SetCheckedAsync(selector: string, checked: Boolean)](https://playwright.dev/dotnet/docs/next/api/class-page#page-set-checked) and [Locator.SetCheckedAsync(selector: string, checked: Boolean)](https://playwright.dev/dotnet/docs/next/api/class-locator#locator-set-checked) was introduced to set the checked state of a checkbox.
|
|
- [Request.SizesAsync()](https://playwright.dev/dotnet/docs/next/api/class-request#request-sizes) Returns resource size information for given http request.
|
|
- [Tracing.StartChunkAsync()](https://playwright.dev/dotnet/docs/next/api/class-tracing#tracing-start-chunk) - Start a new trace chunk.
|
|
- [Tracing.StopChunkAsync()](https://playwright.dev/dotnet/docs/next/api/class-tracing#tracing-stop-chunk) - Stops a new trace chunk.
|
|
|
|
### Important ⚠
|
|
* ⬆ .NET Core Apps 2.1 are **no longer** supported for our CLI tooling. As of August 31st, 2021, .NET Core 2.1 is no [longer supported](https://devblogs.microsoft.com/dotnet/net-core-2-1-will-reach-end-of-support-on-august-21-2021/) and will not receive any security updates. We've decided to move the CLI forward and require .NET Core 3.1 as a minimum.
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 96.0.4641.0
|
|
- Mozilla Firefox 92.0
|
|
- WebKit 15.0
|
|
|
|
## Version 1.14
|
|
|
|
#### ⚡️ New "strict" mode
|
|
|
|
Selector ambiguity is a common problem in automation testing. **"strict" mode**
|
|
ensures that your selector points to a single element and throws otherwise.
|
|
|
|
Set `setStrict(true)` in your action calls to opt in.
|
|
|
|
```csharp
|
|
// This will throw if you have more than one button!
|
|
await page.Locator("button", new() { Strict = true });
|
|
```
|
|
|
|
#### 📍 New [**Locators API**](./api/class-locator)
|
|
|
|
Locator represents a view to the element(s) on the page. It captures the logic sufficient to retrieve the element at any given moment.
|
|
|
|
The difference between the [Locator](./api/class-locator) and [ElementHandle](./api/class-elementhandle) is that the latter points to a particular element, while [Locator](./api/class-locator) captures the logic of how to retrieve that element.
|
|
|
|
Also, locators are **"strict" by default**!
|
|
|
|
```csharp
|
|
var locator = page.Locator("button");
|
|
await locator.ClickAsync();
|
|
```
|
|
|
|
Learn more in the [documentation](./api/class-locator).
|
|
|
|
#### 🧩 Experimental [**React**](./selectors#react-selectors) and [**Vue**](./selectors#vue-selectors) selector engines
|
|
|
|
React and Vue selectors allow selecting elements by its component name and/or property values. The syntax is very similar to [attribute selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors) and supports all attribute selector operators.
|
|
|
|
```csharp
|
|
await page.Locator("_react=SubmitButton[enabled=true]").ClickAsync();
|
|
await page.Locator("_vue=submit-button[enabled=true]").ClickAsync();
|
|
```
|
|
|
|
Learn more in the [react selectors documentation](./selectors#react-selectors) and the [vue selectors documentation](./selectors#vue-selectors).
|
|
|
|
#### ✨ New [**`nth`**](./selectors#n-th-element-selector) and [**`visible`**](./selectors#selecting-visible-elements) selector engines
|
|
|
|
- [`nth`](./selectors#n-th-element-selector) selector engine is equivalent to the `:nth-match` pseudo class, but could be combined with other selector engines.
|
|
- [`visible`](./selectors#selecting-visible-elements) selector engine is equivalent to the `:visible` pseudo class, but could be combined with other selector engines.
|
|
|
|
```csharp
|
|
// select the first button among all buttons
|
|
await button.ClickAsync("button >> nth=0");
|
|
// or if you are using locators, you can use First, Nth() and Last
|
|
await page.Locator("button").First.ClickAsync();
|
|
|
|
// click a visible button
|
|
await button.ClickAsync("button >> visible=true");
|
|
```
|
|
|
|
### Browser Versions
|
|
|
|
- Chromium 94.0.4595.0
|
|
- Mozilla Firefox 91.0
|
|
- WebKit 15.0
|
|
|
|
|
|
## Version 1.13
|
|
|
|
#### Playwright
|
|
|
|
- **🖖 Programmatic drag-and-drop support** via the [`method: Page.dragAndDrop`] API.
|
|
- **🔎 Enhanced HAR** with body sizes for requests and responses. Use via `recordHar` option in [`method: Browser.newContext`].
|
|
|
|
#### Tools
|
|
|
|
- Playwright Trace Viewer now shows parameters, returned values and `console.log()` calls.
|
|
|
|
#### New and Overhauled Guides
|
|
|
|
- [Intro](./intro.md)
|
|
- [Authentication](./auth.md)
|
|
|
|
#### Browser Versions
|
|
|
|
- Chromium 93.0.4576.0
|
|
- Mozilla Firefox 90.0
|
|
- WebKit 14.2
|
|
|
|
#### New Playwright APIs
|
|
|
|
- new `baseURL` option in [`method: Browser.newContext`] and [`method: Browser.newPage`]
|
|
- [`method: Response.securityDetails`] and [`method: Response.serverAddr`]
|
|
- [`method: Page.dragAndDrop`] and [`method: Frame.dragAndDrop`]
|
|
- [`method: Download.cancel`]
|
|
- [`method: Page.inputValue`], [`method: Frame.inputValue`] and [`method: ElementHandle.inputValue`]
|
|
- new `force` option in [`method: Page.fill`], [`method: Frame.fill`], and [`method: ElementHandle.fill`]
|
|
- new `force` option in [`method: Page.selectOption`], [`method: Frame.selectOption`], and [`method: ElementHandle.selectOption`]
|
|
|
|
## Version 1.12
|
|
|
|
#### Highlights
|
|
|
|
- Playwright for .NET v1.12 is now stable!
|
|
- Ships with the [codegen](./cli.md#generate-code) and [trace viewer](./trace-viewer.md) tools out-of-the-box
|
|
|
|
#### Browser Versions
|
|
|
|
- Chromium 93.0.4530.0
|
|
- Mozilla Firefox 89.0
|
|
- WebKit 14.2
|
|
|
|
This version of Playwright was also tested against the following stable channels:
|
|
|
|
- Google Chrome 91
|
|
- Microsoft Edge 91
|
|
|
|
|