diff --git a/dotnet/docs/actionability.mdx b/dotnet/docs/actionability.mdx index adf06b018d..a8accf11ce 100644 --- a/dotnet/docs/actionability.mdx +++ b/dotnet/docs/actionability.mdx @@ -66,7 +66,7 @@ Playwright includes auto-retrying assertions that remove flakiness by waiting un | [Expect(Locator).ToHaveAttributeAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [Expect(Locator).ToHaveClassAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [Expect(Locator).ToHaveCountAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [Expect(Locator).ToHaveCSSAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [Expect(Locator).ToHaveCSSAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [Expect(Locator).ToHaveIdAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [Expect(Locator).ToHaveJSPropertyAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [Expect(Locator).ToHaveTextAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-text) | Element matches text | diff --git a/dotnet/docs/api/class-locatorassertions.mdx b/dotnet/docs/api/class-locatorassertions.mdx index ff0fd74174..a36956dd63 100644 --- a/dotnet/docs/api/class-locatorassertions.mdx +++ b/dotnet/docs/api/class-locatorassertions.mdx @@ -384,7 +384,7 @@ Let's see how we can use the assertion: ```csharp // ✓ Contains the right items in the right order -await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Text 1", "Text 3", "Text 4"}); +await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Text 1", "Text 3"}); // ✖ Wrong order await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Text 3", "Text 2"}); @@ -609,7 +609,7 @@ await Expect(locator).ToHaveCountAsync(3); --- -### ToHaveCSSAsync {#locator-assertions-to-have-css-1} +### ToHaveCSSAsync {#locator-assertions-to-have-css} Added in: v1.20locatorAssertions.ToHaveCSSAsync @@ -623,19 +623,19 @@ await Expect(locator).ToHaveCSSAsync("display", "flex"); ``` **Arguments** -- `name` [string] Added in: v1.18# +- `name` [string] Added in: v1.18# CSS property name. -- `value` [string] | [Regex] Added in: v1.18# +- `value` [string] | [Regex] Added in: v1.18# CSS property value. - `options` `LocatorAssertionsToHaveCSSOptions?` *(optional)* - - `Timeout` [float]? *(optional)* Added in: v1.18# + - `Timeout` [float]? *(optional)* Added in: v1.18# Time to retry the assertion for in milliseconds. Defaults to `5000`. **Returns** -- [void]# +- [void]# --- diff --git a/dotnet/docs/test-assertions.mdx b/dotnet/docs/test-assertions.mdx index ebfe9091a4..7b84ee2c5f 100644 --- a/dotnet/docs/test-assertions.mdx +++ b/dotnet/docs/test-assertions.mdx @@ -27,7 +27,7 @@ import HTMLCard from '@site/src/components/HTMLCard'; | [Expect(Locator).ToHaveAttributeAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [Expect(Locator).ToHaveClassAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [Expect(Locator).ToHaveCountAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [Expect(Locator).ToHaveCSSAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [Expect(Locator).ToHaveCSSAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [Expect(Locator).ToHaveIdAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [Expect(Locator).ToHaveJSPropertyAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [Expect(Locator).ToHaveRoleAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-role) | Element has a specific [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles) | diff --git a/java/docs/actionability.mdx b/java/docs/actionability.mdx index 28854b57b0..b56e820111 100644 --- a/java/docs/actionability.mdx +++ b/java/docs/actionability.mdx @@ -66,7 +66,7 @@ Playwright includes auto-retrying assertions that remove flakiness by waiting un | [assertThat(locator).hasAttribute()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [assertThat(locator).hasClass()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [assertThat(locator).hasCount()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [assertThat(locator).hasCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [assertThat(locator).hasCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [assertThat(locator).hasId()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [assertThat(locator).hasJSProperty()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [assertThat(locator).hasText()](/api/class-locatorassertions.mdx#locator-assertions-to-have-text) | Element matches text | diff --git a/java/docs/api/class-locatorassertions.mdx b/java/docs/api/class-locatorassertions.mdx index 44c95d0dbb..3ecb640b41 100644 --- a/java/docs/api/class-locatorassertions.mdx +++ b/java/docs/api/class-locatorassertions.mdx @@ -107,7 +107,7 @@ Let's see how we can use the assertion: ```java // ✓ Contains the right items in the right order -assertThat(page.locator("ul > li")).containsText(new String[] {"Text 1", "Text 3", "Text 4"}); +assertThat(page.locator("ul > li")).containsText(new String[] {"Text 1", "Text 3"}); // ✖ Wrong order assertThat(page.locator("ul > li")).containsText(new String[] {"Text 3", "Text 2"}); @@ -328,7 +328,7 @@ assertThat(page.locator("list > .component")).hasCount(3); --- -### hasCSS {#locator-assertions-to-have-css-1} +### hasCSS {#locator-assertions-to-have-css} Added in: v1.20locatorAssertions.hasCSS @@ -341,19 +341,19 @@ assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex"); ``` **Arguments** -- `name` [String] Added in: v1.18# +- `name` [String] Added in: v1.18# CSS property name. -- `value` [String] | [Pattern] Added in: v1.18# +- `value` [String] | [Pattern] Added in: v1.18# CSS property value. - `options` `LocatorAssertions.HasCSSOptions` *(optional)* - - `setTimeout` [double] *(optional)* Added in: v1.18# + - `setTimeout` [double] *(optional)* Added in: v1.18# Time to retry the assertion for in milliseconds. Defaults to `5000`. **Returns** -- [void]# +- [void]# --- diff --git a/java/docs/test-assertions.mdx b/java/docs/test-assertions.mdx index 42a2c02ab0..88dc40b867 100644 --- a/java/docs/test-assertions.mdx +++ b/java/docs/test-assertions.mdx @@ -27,7 +27,7 @@ import HTMLCard from '@site/src/components/HTMLCard'; | [assertThat(locator).hasAttribute()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [assertThat(locator).hasClass()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [assertThat(locator).hasCount()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [assertThat(locator).hasCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [assertThat(locator).hasCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [assertThat(locator).hasId()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [assertThat(locator).hasJSProperty()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [assertThat(locator).hasRole()](/api/class-locatorassertions.mdx#locator-assertions-to-have-role) | Element has a specific [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles) | diff --git a/nodejs/docs/actionability.mdx b/nodejs/docs/actionability.mdx index e7efcafc8b..9227ce688b 100644 --- a/nodejs/docs/actionability.mdx +++ b/nodejs/docs/actionability.mdx @@ -66,7 +66,7 @@ Playwright includes auto-retrying assertions that remove flakiness by waiting un | [expect(locator).toHaveAttribute()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [expect(locator).toHaveClass()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [expect(locator).toHaveCount()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [expect(locator).toHaveCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [expect(locator).toHaveCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [expect(locator).toHaveId()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [expect(locator).toHaveJSProperty()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [expect(locator).toHaveText()](/api/class-locatorassertions.mdx#locator-assertions-to-have-text) | Element matches text | diff --git a/nodejs/docs/api/class-locatorassertions.mdx b/nodejs/docs/api/class-locatorassertions.mdx index 594c15e124..e3f22018b3 100644 --- a/nodejs/docs/api/class-locatorassertions.mdx +++ b/nodejs/docs/api/class-locatorassertions.mdx @@ -634,9 +634,9 @@ await expect(list).toHaveCount(3); --- -### toHaveCSS(name, value) {#locator-assertions-to-have-css-1} +### toHaveCSS {#locator-assertions-to-have-css} -Added in: v1.20locatorAssertions.toHaveCSS(name, value) +Added in: v1.20locatorAssertions.toHaveCSS Ensures the [Locator] resolves to an element with the given computed CSS style. @@ -648,54 +648,19 @@ await expect(locator).toHaveCSS('display', 'flex'); ``` **Arguments** -- `name` [string] Added in: v1.18# +- `name` [string] Added in: v1.18# CSS property name. -- `value` [string] | [RegExp] Added in: v1.18# +- `value` [string] | [RegExp] Added in: v1.18# CSS property value. - `options` [Object] *(optional)* - - `timeout` [number] *(optional)* Added in: v1.18# + - `timeout` [number] *(optional)* Added in: v1.18# Time to retry the assertion for in milliseconds. Defaults to `timeout` in `TestConfig.expect`. **Returns** -- [Promise]<[void]># - ---- - -### toHaveCSS(styles) {#locator-assertions-to-have-css-2} - -Added in: v1.58locatorAssertions.toHaveCSS(styles) - -Ensures the [Locator] resolves to an element with the given computed CSS properties. - -:::note - -The `CSSProperties` object parameter for toHaveCSS requires `react` to be installed for type checking. -::: - -**Usage** - -```js -const locator = page.getByRole('button'); -await expect(locator).toHaveCSS({ - display: 'flex', - backgroundColor: 'rgb(255, 0, 0)' -}); -``` - -**Arguments** -- `styles` [CSSProperties]# - - CSS properties object. -- `options` [Object] *(optional)* - - `timeout` [number] *(optional)*# - - Time to retry the assertion for in milliseconds. Defaults to `timeout` in `TestConfig.expect`. - -**Returns** -- [Promise]<[void]># +- [Promise]<[void]># --- diff --git a/nodejs/docs/api/class-page.mdx b/nodejs/docs/api/class-page.mdx index ad5637ee4a..10b8a3ac60 100644 --- a/nodejs/docs/api/class-page.mdx +++ b/nodejs/docs/api/class-page.mdx @@ -279,6 +279,10 @@ await page.agent(options); - `cacheOutFile` [string] *(optional)* When specified, generated entries are written into the `cacheOutFile` instead of updating the `cacheFile`. + - `expect` [Object] *(optional)*# + - `timeout` [number] *(optional)* + + Default timeout for expect calls in milliseconds, defaults to 5000ms. - `limits` [Object] *(optional)*# - `maxTokens` [number] *(optional)* diff --git a/nodejs/docs/api/class-pageagent.mdx b/nodejs/docs/api/class-pageagent.mdx index f2820ede7d..e53b521f2f 100644 --- a/nodejs/docs/api/class-pageagent.mdx +++ b/nodejs/docs/api/class-pageagent.mdx @@ -60,7 +60,7 @@ await agent.expect('"0 items" to be reported'); Maximum number of tokens to consume. The agentic loop will stop after input + output tokens exceed this value. Defaults to context-wide value specified in `agent` property. - `timeout` [number] *(optional)*# - Request timeout in milliseconds. Defaults to action timeout. Pass `0` to disable timeout. + Expect timeout in milliseconds. Defaults to `5000`. The default value can be changed via `expect.timeout` option in the config, or by specifying the `expect` property of the [expect](/api/class-page.mdx#page-agent-option-expect) option. Pass `0` to disable timeout. **Returns** - [Promise]<[void]># @@ -102,7 +102,7 @@ await agent.extract('List of items in the cart', z.object({ Maximum number of tokens to consume. The agentic loop will stop after input + output tokens exceed this value. Defaults to context-wide value specified in `agent` property. - `timeout` [number] *(optional)*# - Request timeout in milliseconds. Defaults to action timeout. Pass `0` to disable timeout. + Extract timeout in milliseconds. Defaults to `5000`. The default value can be changed via `actionTimeout` option in the config, or by using the [browserContext.setDefaultTimeout()](/api/class-browsercontext.mdx#browser-context-set-default-timeout) or [page.setDefaultTimeout()](/api/class-page.mdx#page-set-default-timeout) methods. Pass `0` to disable timeout. **Returns** - [Promise]<[Object]># @@ -153,7 +153,7 @@ await agent.perform('Click submit button'); Maximum number of tokens to consume. The agentic loop will stop after input + output tokens exceed this value. Defaults to context-wide value specified in `agent` property. - `timeout` [number] *(optional)*# - Request timeout in milliseconds. Defaults to action timeout. Pass `0` to disable timeout. + Perform timeout in milliseconds. Defaults to `5000`. The default value can be changed via `actionTimeout` option in the config, or by using the [browserContext.setDefaultTimeout()](/api/class-browsercontext.mdx#browser-context-set-default-timeout) or [page.setDefaultTimeout()](/api/class-page.mdx#page-set-default-timeout) methods. Pass `0` to disable timeout. **Returns** - [Promise]<[Object]># diff --git a/nodejs/docs/release-notes.mdx b/nodejs/docs/release-notes.mdx index a77011b5f2..daf05dca9b 100644 --- a/nodejs/docs/release-notes.mdx +++ b/nodejs/docs/release-notes.mdx @@ -2829,7 +2829,7 @@ List of all new assertions: - [`expect(locator).toHaveAttribute(name, value)`](./api/class-locatorassertions#locator-assertions-to-have-attribute) - [`expect(locator).toHaveClass(expected)`](./api/class-locatorassertions#locator-assertions-to-have-class) - [`expect(locator).toHaveCount(count)`](./api/class-locatorassertions#locator-assertions-to-have-count) -- [`expect(locator).toHaveCSS(name, value)`](./api/class-locatorassertions#locator-assertions-to-have-css-1) +- [`expect(locator).toHaveCSS(name, value)`](./api/class-locatorassertions#locator-assertions-to-have-css) - [`expect(locator).toHaveId(id)`](./api/class-locatorassertions#locator-assertions-to-have-id) - [`expect(locator).toHaveJSProperty(name, value)`](./api/class-locatorassertions#locator-assertions-to-have-js-property) - [`expect(locator).toHaveText(expected, options)`](./api/class-locatorassertions#locator-assertions-to-have-text) diff --git a/nodejs/docs/test-assertions.mdx b/nodejs/docs/test-assertions.mdx index b2b3aa5359..749e8bd57c 100644 --- a/nodejs/docs/test-assertions.mdx +++ b/nodejs/docs/test-assertions.mdx @@ -47,7 +47,7 @@ The following assertions will retry until the assertion passes, or the assertion | [await expect(locator).toHaveAttribute()](./api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [await expect(locator).toHaveClass()](./api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has specified CSS class property | | [await expect(locator).toHaveCount()](./api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [await expect(locator).toHaveCSS()](./api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [await expect(locator).toHaveCSS()](./api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [await expect(locator).toHaveId()](./api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [await expect(locator).toHaveJSProperty()](./api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [await expect(locator).toHaveRole()](./api/class-locatorassertions.mdx#locator-assertions-to-have-role) | Element has a specific [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles) | diff --git a/nodejs/docs/test-cli.mdx b/nodejs/docs/test-cli.mdx index a6e12bf074..8aaeec4b99 100644 --- a/nodejs/docs/test-cli.mdx +++ b/nodejs/docs/test-cli.mdx @@ -126,6 +126,18 @@ Options `--test-list` and `--test-list-invert` accept a path to a test list file # This is a test list file. # It can include comments and empty lines. +# Run ALL tests in a file: +path/to/example.spec.ts + +# Run all tests in a file for a specific project: +[chromium] › path/to/example.spec.ts + +# Run all tests in a specific group/suite: +path/to/example.spec.ts › suite name + +# Run all tests in a nested group: +path/to/example.spec.ts › outer suite › inner suite + # Fully qualified test with a project: [chromium] › path/to/example.spec.ts:3:9 › suite › nested suite › example test diff --git a/python/docs/actionability.mdx b/python/docs/actionability.mdx index c473f87fc0..0e579fcbbf 100644 --- a/python/docs/actionability.mdx +++ b/python/docs/actionability.mdx @@ -66,7 +66,7 @@ Playwright includes auto-retrying assertions that remove flakiness by waiting un | [expect(locator).to_have_attribute()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [expect(locator).to_have_class()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [expect(locator).to_have_count()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [expect(locator).to_have_id()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [expect(locator).to_have_js_property()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [expect(locator).to_have_text()](/api/class-locatorassertions.mdx#locator-assertions-to-have-text) | Element matches text | diff --git a/python/docs/api/class-locatorassertions.mdx b/python/docs/api/class-locatorassertions.mdx index e31712ee5d..ef4ec5aa2c 100644 --- a/python/docs/api/class-locatorassertions.mdx +++ b/python/docs/api/class-locatorassertions.mdx @@ -516,7 +516,7 @@ expect(locator).not_to_have_count(count, **kwargs) Added in: v1.20locatorAssertions.not_to_have_css -The opposite of [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1). +The opposite of [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css). **Usage** @@ -1418,7 +1418,7 @@ Let's see how we can use the assertion: from playwright.sync_api import expect # ✓ Contains the right items in the right order -expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"]) +expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3"]) # ✖ Wrong order expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"]) @@ -1437,7 +1437,7 @@ expect(page.locator("ul")).to_contain_text(["Text 3"]) from playwright.async_api import expect # ✓ Contains the right items in the right order -await expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"]) +await expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3"]) # ✖ Wrong order await expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"]) @@ -1822,7 +1822,7 @@ await expect(locator).to_have_count(3) --- -### to_have_css {#locator-assertions-to-have-css-1} +### to_have_css {#locator-assertions-to-have-css} Added in: v1.20locatorAssertions.to_have_css @@ -1861,18 +1861,18 @@ await expect(locator).to_have_css("display", "flex") **Arguments** -- `name` [str] Added in: v1.18# +- `name` [str] Added in: v1.18# CSS property name. -- `value` [str] | [Pattern] Added in: v1.18# +- `value` [str] | [Pattern] Added in: v1.18# CSS property value. -- `timeout` [float] *(optional)* Added in: v1.18# +- `timeout` [float] *(optional)* Added in: v1.18# Time to retry the assertion for in milliseconds. Defaults to `5000`. **Returns** -- [NoneType]# +- [NoneType]# --- diff --git a/python/docs/test-assertions.mdx b/python/docs/test-assertions.mdx index 8a6de57d9e..f7c9a2ee2e 100644 --- a/python/docs/test-assertions.mdx +++ b/python/docs/test-assertions.mdx @@ -27,7 +27,7 @@ import HTMLCard from '@site/src/components/HTMLCard'; | [expect(locator).to_have_attribute()](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute) | Element has a DOM attribute | | [expect(locator).to_have_class()](/api/class-locatorassertions.mdx#locator-assertions-to-have-class) | Element has a class property | | [expect(locator).to_have_count()](/api/class-locatorassertions.mdx#locator-assertions-to-have-count) | List has exact number of children | -| [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css-1) | Element has CSS property | +| [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) | Element has CSS property | | [expect(locator).to_have_id()](/api/class-locatorassertions.mdx#locator-assertions-to-have-id) | Element has an ID | | [expect(locator).to_have_js_property()](/api/class-locatorassertions.mdx#locator-assertions-to-have-js-property) | Element has a JavaScript property | | [expect(locator).to_have_role()](/api/class-locatorassertions.mdx#locator-assertions-to-have-role) | Element has a specific [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles) |