diff --git a/README.md b/README.md
index b2c569a402..013ac177cf 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# 🎠Playwright
-[](https://www.npmjs.com/package/playwright) [](https://www.chromium.org/Home) [](https://www.mozilla.org/en-US/firefox/new/) [](https://webkit.org/) [](https://aka.ms/playwright/discord)
+[](https://www.npmjs.com/package/playwright) [](https://www.chromium.org/Home) [](https://www.mozilla.org/en-US/firefox/new/) [](https://webkit.org/) [](https://aka.ms/playwright/discord)
## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright)
@@ -8,9 +8,9 @@ Playwright is a framework for Web Testing and Automation. It allows testing [Chr
| | Linux | macOS | Windows |
| :--- | :---: | :---: | :---: |
-| Chromium 132.0.6834.57 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| Chromium 133.0.6943.16 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| WebKit 18.2 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
-| Firefox 133.0.3 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| Firefox 134.0 | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Headless execution is supported for all browsers on all platforms. Check out [system requirements](https://playwright.dev/docs/intro#system-requirements) for details.
diff --git a/docs/src/api/class-locator.md b/docs/src/api/class-locator.md
index 26b4b475d2..41ee8aab4f 100644
--- a/docs/src/api/class-locator.md
+++ b/docs/src/api/class-locator.md
@@ -155,7 +155,7 @@ Additional locator to match.
- returns: <[string]>
Captures the aria snapshot of the given element.
-Read more about [aria snapshots](../aria-snapshots.md) and [`method: LocatorAssertions.toMatchAriaSnapshot#2`] for the corresponding assertion.
+Read more about [aria snapshots](../aria-snapshots.md) and [`method: LocatorAssertions.toMatchAriaSnapshot#1`] for the corresponding assertion.
**Usage**
diff --git a/docs/src/api/class-locatorassertions.md b/docs/src/api/class-locatorassertions.md
index 968d6375d7..35f64ea711 100644
--- a/docs/src/api/class-locatorassertions.md
+++ b/docs/src/api/class-locatorassertions.md
@@ -446,7 +446,7 @@ Expected options currently selected.
* since: v1.49
* langs: python
-The opposite of [`method: LocatorAssertions.toMatchAriaSnapshot#2`].
+The opposite of [`method: LocatorAssertions.toMatchAriaSnapshot#1`].
### param: LocatorAssertions.NotToMatchAriaSnapshot.expected
* since: v1.49
@@ -1313,7 +1313,7 @@ await Expect(locator).ToHaveAccessibleNameAsync("Save to disk");
### param: LocatorAssertions.toHaveAccessibleName.name
* since: v1.44
-- `name` <[string]|[RegExp]|[Array]<[string]|[RegExp]>>
+- `name` <[string]|[RegExp]>
Expected accessible name.
@@ -1413,49 +1413,48 @@ Attribute name.
* langs:
- alias-java: hasClass
-Ensures the [Locator] points to an element with given CSS classes. This needs to be a full match
-or using a relaxed regular expression.
+Ensures the [Locator] points to an element with given CSS classes. When a string is provided, it must fully match the element's `class` attribute. To match individual classes or perform partial matches, use a regular expression:
**Usage**
```html
-
+
```
```js
const locator = page.locator('#component');
-await expect(locator).toHaveClass(/selected/);
-await expect(locator).toHaveClass('selected row');
+await expect(locator).toHaveClass('middle selected row');
+await expect(locator).toHaveClass(/(^|\s)selected(\s|$)/);
```
```java
-assertThat(page.locator("#component")).hasClass(Pattern.compile("selected"));
-assertThat(page.locator("#component")).hasClass("selected row");
+assertThat(page.locator("#component")).hasClass(Pattern.compile("(^|\\s)selected(\\s|$)"));
+assertThat(page.locator("#component")).hasClass("middle selected row");
```
```python async
from playwright.async_api import expect
locator = page.locator("#component")
-await expect(locator).to_have_class(re.compile(r"selected"))
-await expect(locator).to_have_class("selected row")
+await expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
+await expect(locator).to_have_class("middle selected row")
```
```python sync
from playwright.sync_api import expect
locator = page.locator("#component")
-expect(locator).to_have_class(re.compile(r"selected"))
-expect(locator).to_have_class("selected row")
+expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
+expect(locator).to_have_class("middle selected row")
```
```csharp
var locator = Page.Locator("#component");
-await Expect(locator).ToHaveClassAsync(new Regex("selected"));
-await Expect(locator).ToHaveClassAsync("selected row");
+await Expect(locator).ToHaveClassAsync(new Regex("(^|\\s)selected(\\s|$)"));
+await Expect(locator).ToHaveClassAsync("middle selected row");
```
-Note that if array is passed as an expected value, entire lists of elements can be asserted:
+When an array is passed, the method asserts that the list of elements located matches the corresponding list of expected class values. Each element's class attribute is matched against the corresponding string or regular expression in the array:
```js
const locator = page.locator('list > .component');
@@ -2182,57 +2181,6 @@ Expected options currently selected.
## async method: LocatorAssertions.toMatchAriaSnapshot#1
-* since: v1.50
-* langs:
- - alias-java: matchesAriaSnapshot
-
-Asserts that the target element matches the given [accessibility snapshot](../aria-snapshots.md).
-
-**Usage**
-
-```js
-await expect(page.locator('body')).toMatchAriaSnapshot();
-await expect(page.locator('body')).toMatchAriaSnapshot({ name: 'snapshot' });
-await expect(page.locator('body')).toMatchAriaSnapshot({ path: '/path/to/snapshot.yml' });
-```
-
-```python async
-await expect(page.locator('body')).to_match_aria_snapshot(path='/path/to/snapshot.yml')
-```
-
-```python sync
-expect(page.locator('body')).to_match_aria_snapshot(path='/path/to/snapshot.yml')
-```
-
-```csharp
-await Expect(page.Locator("body")).ToMatchAriaSnapshotAsync(new { Path = "/path/to/snapshot.yml" });
-```
-
-```java
-assertThat(page.locator("body")).matchesAriaSnapshot(new LocatorAssertions.MatchesAriaSnapshotOptions().setPath("/path/to/snapshot.yml"));
-```
-
-### option: LocatorAssertions.toMatchAriaSnapshot#1.name
-* since: v1.50
-* langs: js
-- `name` <[string]>
-
-Name of the snapshot to store in the snapshot folder corresponding to this test. Generates ordinal name if not specified.
-
-### option: LocatorAssertions.toMatchAriaSnapshot#1.path
-* since: v1.50
-- `path` <[string]>
-
-Path to the YAML snapshot file.
-
-### option: LocatorAssertions.toMatchAriaSnapshot#1.timeout = %%-js-assertions-timeout-%%
-* since: v1.50
-
-### option: LocatorAssertions.toMatchAriaSnapshot#1.timeout = %%-csharp-java-python-assertions-timeout-%%
-* since: v1.50
-
-
-## async method: LocatorAssertions.toMatchAriaSnapshot#2
* since: v1.49
* langs:
- alias-java: matchesAriaSnapshot
@@ -2281,12 +2229,56 @@ assertThat(page.locator("body")).matchesAriaSnapshot("""
""");
```
-### param: LocatorAssertions.toMatchAriaSnapshot#2.expected
+### param: LocatorAssertions.toMatchAriaSnapshot#1.expected
* since: v1.49
- `expected`
-### option: LocatorAssertions.toMatchAriaSnapshot#2.timeout = %%-js-assertions-timeout-%%
+### option: LocatorAssertions.toMatchAriaSnapshot#1.timeout = %%-js-assertions-timeout-%%
* since: v1.49
-### option: LocatorAssertions.toMatchAriaSnapshot#2.timeout = %%-csharp-java-python-assertions-timeout-%%
+### option: LocatorAssertions.toMatchAriaSnapshot#1.timeout = %%-csharp-java-python-assertions-timeout-%%
* since: v1.49
+
+## async method: LocatorAssertions.toMatchAriaSnapshot#2
+* since: v1.50
+* langs: js
+
+Asserts that the target element matches the given [accessibility snapshot](../aria-snapshots.md).
+
+**Usage**
+
+```js
+await expect(page.locator('body')).toMatchAriaSnapshot();
+await expect(page.locator('body')).toMatchAriaSnapshot({ name: 'snapshot' });
+await expect(page.locator('body')).toMatchAriaSnapshot({ path: '/path/to/snapshot.yml' });
+```
+
+```python async
+await expect(page.locator('body')).to_match_aria_snapshot(path='/path/to/snapshot.yml')
+```
+
+```python sync
+expect(page.locator('body')).to_match_aria_snapshot(path='/path/to/snapshot.yml')
+```
+
+```csharp
+await Expect(page.Locator("body")).ToMatchAriaSnapshotAsync(new { Path = "/path/to/snapshot.yml" });
+```
+
+```java
+assertThat(page.locator("body")).matchesAriaSnapshot(new LocatorAssertions.MatchesAriaSnapshotOptions().setPath("/path/to/snapshot.yml"));
+```
+
+### option: LocatorAssertions.toMatchAriaSnapshot#2.name
+* since: v1.50
+* langs: js
+- `name` <[string]>
+
+Name of the snapshot to store in the snapshot (screenshot) folder corresponding to this test.
+Generates sequential names if not specified.
+
+### option: LocatorAssertions.toMatchAriaSnapshot#2.timeout = %%-js-assertions-timeout-%%
+* since: v1.50
+
+### option: LocatorAssertions.toMatchAriaSnapshot#2.timeout = %%-csharp-java-python-assertions-timeout-%%
+* since: v1.50
diff --git a/docs/src/aria-snapshots.md b/docs/src/aria-snapshots.md
index 27d1c0ebce..b52ff82650 100644
--- a/docs/src/aria-snapshots.md
+++ b/docs/src/aria-snapshots.md
@@ -154,7 +154,7 @@ structure of a page, use the [Chrome DevTools Accessibility Pane](https://develo
## Snapshot matching
-The [`method: LocatorAssertions.toMatchAriaSnapshot#2`] assertion method in Playwright compares the accessible
+The [`method: LocatorAssertions.toMatchAriaSnapshot#1`] assertion method in Playwright compares the accessible
structure of the locator scope with a predefined aria snapshot template, helping validate the page's state against
testing requirements.
diff --git a/docs/src/browsers.md b/docs/src/browsers.md
index 1cc10d7a8d..4b13b35c4c 100644
--- a/docs/src/browsers.md
+++ b/docs/src/browsers.md
@@ -452,7 +452,7 @@ Certain Enterprise Browser Policies may impact Playwright's ability to launch an
:::
:::warning
-Google Chrome and Microsoft Edge have switched to a [new headless mode](https://developer.chrome.com/docs/chromium/headless) implementation that is closer to a regular headed mode. This differs from [chromium headless shell](https://developer.chrome.com/blog/chrome-headless-shell) that is used in Playwright by default when running headless, so expect different behavior in some cases. See [issue #33566](https://github.com/microsoft/playwright/issues/33566) fore details.
+Google Chrome and Microsoft Edge have switched to a [new headless mode](https://developer.chrome.com/docs/chromium/headless) implementation that is closer to a regular headed mode. This differs from [chromium headless shell](https://developer.chrome.com/blog/chrome-headless-shell) that is used in Playwright by default when running headless, so expect different behavior in some cases. See [issue #33566](https://github.com/microsoft/playwright/issues/33566) for details.
:::
```js
diff --git a/docs/src/release-notes-csharp.md b/docs/src/release-notes-csharp.md
index 0d2681c874..dab0fdf34e 100644
--- a/docs/src/release-notes-csharp.md
+++ b/docs/src/release-notes-csharp.md
@@ -9,7 +9,7 @@ toc_max_heading_level: 2
### Aria snapshots
-New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#2`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
+New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#1`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
```csharp
await page.GotoAsync("https://playwright.dev");
diff --git a/docs/src/release-notes-java.md b/docs/src/release-notes-java.md
index 317c1c5398..651d2890da 100644
--- a/docs/src/release-notes-java.md
+++ b/docs/src/release-notes-java.md
@@ -8,7 +8,7 @@ toc_max_heading_level: 2
### Aria snapshots
-New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#2`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
+New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#1`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
```java
page.navigate("https://playwright.dev");
diff --git a/docs/src/release-notes-js.md b/docs/src/release-notes-js.md
index 0595933b80..9d26d41551 100644
--- a/docs/src/release-notes-js.md
+++ b/docs/src/release-notes-js.md
@@ -15,7 +15,7 @@ import LiteYouTube from '@site/src/components/LiteYouTube';
### Aria snapshots
-New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#2`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
+New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#1`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
```js
await page.goto('https://playwright.dev');
diff --git a/docs/src/release-notes-python.md b/docs/src/release-notes-python.md
index f2002f15fd..14f84f395c 100644
--- a/docs/src/release-notes-python.md
+++ b/docs/src/release-notes-python.md
@@ -8,7 +8,7 @@ toc_max_heading_level: 2
### Aria snapshots
-New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#2`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
+New assertion [`method: LocatorAssertions.toMatchAriaSnapshot#1`] verifies page structure by comparing to an expected accessibility tree, represented as YAML.
```python
page.goto("https://playwright.dev")
diff --git a/docs/src/test-api/class-test.md b/docs/src/test-api/class-test.md
index d6f1d87513..77c0c5028c 100644
--- a/docs/src/test-api/class-test.md
+++ b/docs/src/test-api/class-test.md
@@ -1767,117 +1767,62 @@ Whether to box the step in the report. Defaults to `false`. When the step is box
Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [`method: Test.step`] call is shown.
+## async method: Test.step.skip
+* since: v1.50
+- returns: <[void]>
+
+Mark a test step as "skip" to temporarily disable its execution, useful for steps that are currently failing and planned for a near-term fix. Playwright will not run the step.
+
+**Usage**
+
+You can declare a skipped step, and Playwright will not run it.
+
+```js
+import { test, expect } from '@playwright/test';
+
+test('my test', async ({ page }) => {
+ // ...
+ await test.step.skip('not yet ready', async () => {
+ // ...
+ });
+});
+```
+
+### param: Test.step.skip.title
+* since: v1.50
+- `title` <[string]>
+
+Step name.
+
+### param: Test.step.skip.body
+* since: v1.50
+- `body` <[function]\(\):[Promise]<[any]>>
+
+Step body.
+
+### option: Test.step.skip.box
+* since: v1.50
+- `box`
+
+Whether to box the step in the report. Defaults to `false`. When the step is boxed, errors thrown from the step internals point to the step call site. See below for more details.
+
+### option: Test.step.skip.location
+* since: v1.50
+- `location` <[Location]>
+
+Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [`method: Test.step`] call is shown.
+
+### option: Test.step.skip.timeout
+* since: v1.50
+- `timeout` <[float]>
+
+Maximum time in milliseconds for the step to finish. Defaults to `0` (no timeout).
+
### option: Test.step.timeout
* since: v1.50
- `timeout` <[float]>
-Maximum time in milliseconds for the step to finish. Defaults to `0` (no timeout).
-
-## async method: Test.step.fail
-* since: v1.50
-- returns: <[void]>
-
-Marks a test step as "should fail". Playwright runs this test step and ensures that it actually fails. This is useful for documentation purposes to acknowledge that some functionality is broken until it is fixed.
-
-:::note
-If the step exceeds the timeout, a [TimeoutError] is thrown. This indicates the step did not fail as expected.
-:::
-
-**Usage**
-
-You can declare a test step as failing, so that Playwright ensures it actually fails.
-
-```js
-import { test, expect } from '@playwright/test';
-
-test('my test', async ({ page }) => {
- // ...
- await test.step.fail('currently failing', async () => {
- // ...
- });
-});
-```
-
-### param: Test.step.fail.title
-* since: v1.50
-- `title` <[string]>
-
-Step name.
-
-### param: Test.step.fail.body
-* since: v1.50
-- `body` <[function]\(\):[Promise]<[any]>>
-
-Step body.
-
-### option: Test.step.fail.box
-* since: v1.50
-- `box`
-
-Whether to box the step in the report. Defaults to `false`. When the step is boxed, errors thrown from the step internals point to the step call site. See below for more details.
-
-### option: Test.step.fail.location
-* since: v1.50
-- `location` <[Location]>
-
-Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [`method: Test.step`] call is shown.
-
-### option: Test.step.fail.timeout
-* since: v1.50
-- `timeout` <[float]>
-
-Maximum time in milliseconds for the step to finish. Defaults to `0` (no timeout).
-
-## async method: Test.step.fixme
-* since: v1.50
-- returns: <[void]>
-
-Mark a test step as "fixme", with the intention to fix it. Playwright will not run the step.
-
-**Usage**
-
-You can declare a test step as failing, so that Playwright ensures it actually fails.
-
-```js
-import { test, expect } from '@playwright/test';
-
-test('my test', async ({ page }) => {
- // ...
- await test.step.fixme('not yet ready', async () => {
- // ...
- });
-});
-```
-
-### param: Test.step.fixme.title
-* since: v1.50
-- `title` <[string]>
-
-Step name.
-
-### param: Test.step.fixme.body
-* since: v1.50
-- `body` <[function]\(\):[Promise]<[any]>>
-
-Step body.
-
-### option: Test.step.fixme.box
-* since: v1.50
-- `box`
-
-Whether to box the step in the report. Defaults to `false`. When the step is boxed, errors thrown from the step internals point to the step call site. See below for more details.
-
-### option: Test.step.fixme.location
-* since: v1.50
-- `location` <[Location]>
-
-Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [`method: Test.step`] call is shown.
-
-### option: Test.step.fixme.timeout
-* since: v1.50
-- `timeout` <[float]>
-
-Maximum time in milliseconds for the step to finish. Defaults to `0` (no timeout).
+The maximum time, in milliseconds, allowed for the step to complete. If the step does not complete within the specified timeout, the [`method: Test.step`] method will throw a [TimeoutError]. Defaults to `0` (no timeout).
## method: Test.use
* since: v1.10
diff --git a/docs/src/test-api/class-testconfig.md b/docs/src/test-api/class-testconfig.md
index 90425fcf4c..5a67ea36d4 100644
--- a/docs/src/test-api/class-testconfig.md
+++ b/docs/src/test-api/class-testconfig.md
@@ -594,10 +594,10 @@ export default defineConfig({
* since: v1.50
- type: ?<[UpdateSourceMethod]<"overwrite"|"3way"|"patch">>
-Defines how to update the source code snapshots.
-* `'overwrite'` - Overwrite the source code snapshot with the actual result.
-* `'3way'` - Use a three-way merge to update the source code snapshot.
-* `'patch'` - Use a patch to update the source code snapshot. This is the default.
+Defines how to update snapshots in the source code.
+* `'patch'` - Create a unified diff file that can be used to update the source code later. This is the default.
+* `'3way'` - Generate merge conflict markers in source code. This allows user to manually pick relevant changes, as if they are resolving a merge conflict in the IDE.
+* `'overwrite'` - Overwrite the source code with the new snapshot values.
## property: TestConfig.use
* since: v1.10
diff --git a/package-lock.json b/package-lock.json
index 411ef13b62..8c242d4bb9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "playwright-internal",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "playwright-internal",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"workspaces": [
"packages/*"
@@ -7751,10 +7751,10 @@
"version": "0.0.0"
},
"packages/playwright": {
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"bin": {
"playwright": "cli.js"
@@ -7768,11 +7768,11 @@
},
"packages/playwright-browser-chromium": {
"name": "@playwright/browser-chromium",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"engines": {
"node": ">=18"
@@ -7780,11 +7780,11 @@
},
"packages/playwright-browser-firefox": {
"name": "@playwright/browser-firefox",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"engines": {
"node": ">=18"
@@ -7792,22 +7792,22 @@
},
"packages/playwright-browser-webkit": {
"name": "@playwright/browser-webkit",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"engines": {
"node": ">=18"
}
},
"packages/playwright-chromium": {
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"bin": {
"playwright": "cli.js"
@@ -7817,7 +7817,7 @@
}
},
"packages/playwright-core": {
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
@@ -7828,11 +7828,11 @@
},
"packages/playwright-ct-core": {
"name": "@playwright/experimental-ct-core",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.50.0-next",
- "playwright-core": "1.50.0-next",
+ "playwright": "1.51.0-next",
+ "playwright-core": "1.51.0-next",
"vite": "^5.2.8"
},
"engines": {
@@ -7841,10 +7841,10 @@
},
"packages/playwright-ct-react": {
"name": "@playwright/experimental-ct-react",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "@playwright/experimental-ct-core": "1.50.0-next",
+ "@playwright/experimental-ct-core": "1.51.0-next",
"@vitejs/plugin-react": "^4.2.1"
},
"bin": {
@@ -7856,10 +7856,10 @@
},
"packages/playwright-ct-react17": {
"name": "@playwright/experimental-ct-react17",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "@playwright/experimental-ct-core": "1.50.0-next",
+ "@playwright/experimental-ct-core": "1.51.0-next",
"@vitejs/plugin-react": "^4.2.1"
},
"bin": {
@@ -7871,10 +7871,10 @@
},
"packages/playwright-ct-svelte": {
"name": "@playwright/experimental-ct-svelte",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "@playwright/experimental-ct-core": "1.50.0-next",
+ "@playwright/experimental-ct-core": "1.51.0-next",
"@sveltejs/vite-plugin-svelte": "^3.0.1"
},
"bin": {
@@ -7889,10 +7889,10 @@
},
"packages/playwright-ct-vue": {
"name": "@playwright/experimental-ct-vue",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "@playwright/experimental-ct-core": "1.50.0-next",
+ "@playwright/experimental-ct-core": "1.51.0-next",
"@vitejs/plugin-vue": "^5.2.0"
},
"bin": {
@@ -7903,11 +7903,11 @@
}
},
"packages/playwright-firefox": {
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"bin": {
"playwright": "cli.js"
@@ -7918,10 +7918,10 @@
},
"packages/playwright-test": {
"name": "@playwright/test",
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.50.0-next"
+ "playwright": "1.51.0-next"
},
"bin": {
"playwright": "cli.js"
@@ -7931,11 +7931,11 @@
}
},
"packages/playwright-webkit": {
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.50.0-next"
+ "playwright-core": "1.51.0-next"
},
"bin": {
"playwright": "cli.js"
diff --git a/package.json b/package.json
index 5eafd4d805..76a2b426f7 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "playwright-internal",
"private": true,
- "version": "1.50.0-next",
+ "version": "1.51.0-next",
"description": "A high-level API to automate web browsers",
"repository": {
"type": "git",
diff --git a/packages/html-reporter/src/links.css b/packages/html-reporter/src/links.css
index eb9390844b..4abe8a6caa 100644
--- a/packages/html-reporter/src/links.css
+++ b/packages/html-reporter/src/links.css
@@ -60,11 +60,6 @@
color: var(--color-scale-orange-6);
border: 1px solid var(--color-scale-orange-4);
}
- .label-color-gray {
- background-color: var(--color-scale-gray-0);
- color: var(--color-scale-gray-6);
- border: 1px solid var(--color-scale-gray-4);
- }
}
@media(prefers-color-scheme: dark) {
@@ -98,11 +93,6 @@
color: var(--color-scale-orange-2);
border: 1px solid var(--color-scale-orange-4);
}
- .label-color-gray {
- background-color: var(--color-scale-gray-9);
- color: var(--color-scale-gray-2);
- border: 1px solid var(--color-scale-gray-4);
- }
}
.attachment-body {
diff --git a/packages/html-reporter/src/links.tsx b/packages/html-reporter/src/links.tsx
index 5f199568b5..5b79102ffe 100644
--- a/packages/html-reporter/src/links.tsx
+++ b/packages/html-reporter/src/links.tsx
@@ -21,7 +21,7 @@ import { TreeItem } from './treeItem';
import { CopyToClipboard } from './copyToClipboard';
import './links.css';
import { linkifyText } from '@web/renderUtils';
-import { clsx } from '@web/uiUtils';
+import { clsx, useFlash } from '@web/uiUtils';
export function navigate(href: string | URL) {
window.history.pushState({}, '', href);
@@ -73,7 +73,8 @@ export const AttachmentLink: React.FunctionComponent<{
linkName?: string,
openInNewTab?: boolean,
}> = ({ attachment, result, href, linkName, openInNewTab }) => {
- const isAnchored = useIsAnchored('attachment-' + result.attachments.indexOf(attachment));
+ const [flash, triggerFlash] = useFlash();
+ useAnchor('attachment-' + result.attachments.indexOf(attachment), triggerFlash);
return
{attachment.contentType === kMissingContentType ? icons.warning() : icons.attachment()}
{attachment.path && {linkName || attachment.name}}
@@ -84,7 +85,7 @@ export const AttachmentLink: React.FunctionComponent<{
)}
} loadChildren={attachment.body ? () => {
return [
{
// Updating text needs to go first - react can squeeze a render between the state updates.
setHighlightedElement({ ...highlightedElement, locator: text, lastEdited: 'locator' });
setIsInspecting(false);
}} />
;
};
diff --git a/packages/trace-viewer/src/ui/recorder/DEPS.list b/packages/trace-viewer/src/ui/recorder/DEPS.list
deleted file mode 100644
index a504a7dba1..0000000000
--- a/packages/trace-viewer/src/ui/recorder/DEPS.list
+++ /dev/null
@@ -1,5 +0,0 @@
-[*]
-@isomorphic/**
-@trace/**
-@web/**
-../**
diff --git a/packages/trace-viewer/src/ui/recorder/actionListView.tsx b/packages/trace-viewer/src/ui/recorder/actionListView.tsx
deleted file mode 100644
index 8e9fa0df45..0000000000
--- a/packages/trace-viewer/src/ui/recorder/actionListView.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- Copyright (c) Microsoft Corporation.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-import type * as actionTypes from '@recorder/actions';
-import { ListView } from '@web/components/listView';
-import * as React from 'react';
-import '../actionList.css';
-import { traceParamsForAction } from '@isomorphic/recorderUtils';
-import { asLocator } from '@isomorphic/locatorGenerators';
-import type { Language } from '@isomorphic/locatorGenerators';
-
-const ActionList = ListView;
-
-export const ActionListView: React.FC<{
- sdkLanguage: Language,
- actions: actionTypes.ActionInContext[],
- selectedAction: actionTypes.ActionInContext | undefined,
- onSelectedAction: (action: actionTypes.ActionInContext | undefined) => void,
-}> = ({
- sdkLanguage,
- actions,
- selectedAction,
- onSelectedAction,
-}) => {
- const render = React.useCallback((action: actionTypes.ActionInContext) => {
- return renderAction(sdkLanguage, action);
- }, [sdkLanguage]);
- return