33 KiB
class: LocatorAssertions
The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. A new instance of [LocatorAssertions] is created by calling [method: PlaywrightAssertions.expectLocator
]:
import { test, expect } from '@playwright/test';
test('status becomes submitted', async ({ page }) => {
// ...
await page.click('#submit-button');
await expect(page.locator('.status')).toHaveText('Submitted');
});
...
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
public class TestLocator {
...
@Test
void statusBecomesSubmitted() {
...
page.click("#submit-button");
assertThat(page.locator(".status")).hasText("Submitted");
}
}
from playwright.async_api import Page, expect
async def test_status_becomes_submitted(page: Page) -> None:
# ..
await page.click("#submit-button")
await expect(page.locator(".status")).to_have_text("Submitted")
from playwright.sync_api import Page, expect
def test_status_becomes_submitted(page: Page) -> None:
# ..
page.click("#submit-button")
expect(page.locator(".status")).to_have_text("Submitted")
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
public class ExampleTests : PageTest
{
[Test]
public async Task StatusBecomesSubmitted()
{
// ..
await Page.ClickAsync("#submit-button");
await Expect(Page.Locator(".status")).ToHaveTextAsync("Submitted");
}
}
property: LocatorAssertions.not
- langs: java, js, csharp
- returns: <[LocatorAssertions]>
Makes the assertion check for the opposite condition. For example, this code tests that the Locator doesn't contain text "error"
:
await expect(locator).not.toContainText('error');
assertThat(locator).not().containsText("error");
await Expect(locator).Not.ToContainTextAsync("error");
async method: LocatorAssertions.NotToBeChecked
- langs: python
The opposite of [method: LocatorAssertions.toBeChecked
].
option: LocatorAssertions.NotToBeChecked.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeChecked.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeDisabled
- langs: python
The opposite of [method: LocatorAssertions.toBeDisabled
].
option: LocatorAssertions.NotToBeDisabled.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeDisabled.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeEditable
- langs: python
The opposite of [method: LocatorAssertions.toBeEditable
].
option: LocatorAssertions.NotToBeEditable.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeEditable.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeEmpty
- langs: python
The opposite of [method: LocatorAssertions.toBeEmpty
].
option: LocatorAssertions.NotToBeEmpty.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeEmpty.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeEnabled
- langs: python
The opposite of [method: LocatorAssertions.toBeEnabled
].
option: LocatorAssertions.NotToBeEnabled.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeEnabled.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeFocused
- langs: python
The opposite of [method: LocatorAssertions.toBeFocused
].
option: LocatorAssertions.NotToBeFocused.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeFocused.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeHidden
- langs: python
The opposite of [method: LocatorAssertions.toBeHidden
].
option: LocatorAssertions.NotToBeHidden.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeHidden.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToBeVisible
- langs: python
The opposite of [method: LocatorAssertions.toBeVisible
].
option: LocatorAssertions.NotToBeVisible.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToBeVisible.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToContainText
- langs: python
The opposite of [method: LocatorAssertions.toContainText
].
param: LocatorAssertions.NotToContainText.expected
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected substring or RegExp or a list of those.
option: LocatorAssertions.NotToContainText.ignoreCase
ignoreCase
<[boolean]>
Whether to perform case-insensitive match. [option: ignoreCase
] option takes precedence over the corresponding regular expression flag if specified.
option: LocatorAssertions.NotToContainText.useInnerText
useInnerText
<[boolean]>
Whether to use element.innerText
instead of element.textContent
when retrieving DOM node text.
option: LocatorAssertions.NotToContainText.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToContainText.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveAttribute
- langs: python
The opposite of [method: LocatorAssertions.toHaveAttribute
].
param: LocatorAssertions.NotToHaveAttribute.name
name
<[string]>
Attribute name.
param: LocatorAssertions.NotToHaveAttribute.value
value
<[string]|[RegExp]>
Expected attribute value.
option: LocatorAssertions.NotToHaveAttribute.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveAttribute.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveClass
- langs: python
The opposite of [method: LocatorAssertions.toHaveClass
].
param: LocatorAssertions.NotToHaveClass.expected
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected class or RegExp or a list of those.
option: LocatorAssertions.NotToHaveClass.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveClass.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveCount
- langs: python
The opposite of [method: LocatorAssertions.toHaveCount
].
param: LocatorAssertions.NotToHaveCount.count
count
<[int]>
Expected count.
option: LocatorAssertions.NotToHaveCount.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveCount.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveCSS
- langs: python
The opposite of [method: LocatorAssertions.toHaveCSS
].
param: LocatorAssertions.NotToHaveCSS.name
name
<[string]>
CSS property name.
param: LocatorAssertions.NotToHaveCSS.value
value
<[string]|[RegExp]>
CSS property value.
option: LocatorAssertions.NotToHaveCSS.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveCSS.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveId
- langs: python
The opposite of [method: LocatorAssertions.toHaveId
].
param: LocatorAssertions.NotToHaveId.id
id
<[string]|[RegExp]>
Element id.
option: LocatorAssertions.NotToHaveId.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveId.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveJSProperty
- langs: python
The opposite of [method: LocatorAssertions.toHaveJSProperty
].
param: LocatorAssertions.NotToHaveJSProperty.name
name
<[string]>
Property name.
param: LocatorAssertions.NotToHaveJSProperty.value
value
<[any]>
Property value.
option: LocatorAssertions.NotToHaveJSProperty.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveJSProperty.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveText
- langs: python
The opposite of [method: LocatorAssertions.toHaveText
].
param: LocatorAssertions.NotToHaveText.expected
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected substring or RegExp or a list of those.
option: LocatorAssertions.NotToHaveText.ignoreCase
ignoreCase
<[boolean]>
Whether to perform case-insensitive match. [option: ignoreCase
] option takes precedence over the corresponding regular expression flag if specified.
option: LocatorAssertions.NotToHaveText.useInnerText
useInnerText
<[boolean]>
Whether to use element.innerText
instead of element.textContent
when retrieving DOM node text.
option: LocatorAssertions.NotToHaveText.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveText.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.NotToHaveValue
- langs: python
The opposite of [method: LocatorAssertions.toHaveValue
].
param: LocatorAssertions.NotToHaveValue.value
value
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected value. A list of expected values can be used if the Locator is a select
element with the multiple
attribute.
option: LocatorAssertions.NotToHaveValue.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.NotToHaveValue.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeChecked
- langs:
- alias-java: isChecked
Ensures the [Locator] points to a checked input.
const locator = page.locator('.subscribe');
await expect(locator).toBeChecked();
assertThat(page.locator(".subscribe")).isChecked();
from playwright.async_api import expect
locator = page.locator(".subscribe")
await expect(locator).to_be_checked()
from playwright.sync_api import expect
locator = page.locator(".subscribe")
expect(locator).to_be_checked()
var locator = Page.Locator(".subscribe");
await Expect(locator).ToBeCheckedAsync();
option: LocatorAssertions.toBeChecked.checked
checked
<[boolean]>
option: LocatorAssertions.toBeChecked.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeChecked.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeDisabled
- langs:
- alias-java: isDisabled
Ensures the [Locator] points to a disabled element. Element is disabled if it has "disabled" attribute
or is disabled via 'aria-disabled'.
Note that only native control elements such as HTML button
, input
, select
, textarea
, option
, optgroup
can be disabled by setting "disabled" attribute. "disabled" attribute on other elements is ignored
by the browser.
const locator = page.locator('button.submit');
await expect(locator).toBeDisabled();
assertThat(page.locator("button.submit")).isDisabled();
from playwright.async_api import expect
locator = page.locator("button.submit")
await expect(locator).to_be_disabled()
from playwright.sync_api import expect
locator = page.locator("button.submit")
expect(locator).to_be_disabled()
var locator = Page.Locator("button.submit");
await Expect(locator).ToBeDisabledAsync();
option: LocatorAssertions.toBeDisabled.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeDisabled.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeEditable
- langs:
- alias-java: isEditable
Ensures the [Locator] points to an editable element.
const locator = page.locator('input');
await expect(locator).toBeEditable();
assertThat(page.locator("input")).isEditable();
from playwright.async_api import expect
locator = page.locator(".input")
await expect(locator).to_be_editable()
from playwright.sync_api import expect
locator = page.locator(".input")
expect(locator).to_be_editable()
var locator = Page.Locator("input");
await Expect(locator).ToBeEditableAsync();
option: LocatorAssertions.toBeEditable.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeEditable.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeEmpty
- langs:
- alias-java: isEmpty
Ensures the [Locator] points to an empty editable element or to a DOM node that has no text.
const locator = page.locator('div.warning');
await expect(locator).toBeEmpty();
assertThat(page.locator("div.warning")).isEmpty();
from playwright.async_api import expect
locator = page.locator("div.warning")
await expect(locator).to_be_empty()
from playwright.sync_api import expect
locator = page.locator("div.warning")
expect(locator).to_be_empty()
var locator = Page.Locator("div.warning");
await Expect(locator).ToBeEmptyAsync();
option: LocatorAssertions.toBeEmpty.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeEmpty.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeEnabled
- langs:
- alias-java: isEnabled
Ensures the [Locator] points to an enabled element.
const locator = page.locator('button.submit');
await expect(locator).toBeEnabled();
assertThat(page.locator("button.submit")).isEnabled();
from playwright.async_api import expect
locator = page.locator("button.submit")
await expect(locator).to_be_enabled()
from playwright.sync_api import expect
locator = page.locator("button.submit")
expect(locator).to_be_enabled()
var locator = Page.Locator("button.submit");
await Expect(locator).toBeEnabledAsync();
option: LocatorAssertions.toBeEnabled.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeEnabled.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeFocused
- langs:
- alias-java: isFocused
Ensures the [Locator] points to a focused DOM node.
const locator = page.locator('input');
await expect(locator).toBeFocused();
assertThat(page.locator("input")).isFocused();
from playwright.async_api import expect
locator = page.locator('input')
await expect(locator).to_be_focused()
from playwright.sync_api import expect
locator = page.locator('input')
expect(locator).to_be_focused()
var locator = Page.Locator("input");
await Expect(locator).ToBeFocusedAsync();
option: LocatorAssertions.toBeFocused.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeFocused.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeHidden
- langs:
- alias-java: isHidden
Ensures the [Locator] points to a hidden DOM node, which is the opposite of visible.
const locator = page.locator('.my-element');
await expect(locator).toBeHidden();
assertThat(page.locator(".my-element")).isHidden();
from playwright.async_api import expect
locator = page.locator('.my-element')
await expect(locator).to_be_hidden()
from playwright.sync_api import expect
locator = page.locator('.my-element')
expect(locator).to_be_hidden()
var locator = Page.Locator(".my-element");
await Expect(locator).ToBeHiddenAsync();
option: LocatorAssertions.toBeHidden.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeHidden.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toBeVisible
- langs:
- alias-java: isVisible
Ensures the [Locator] points to a visible DOM node.
const locator = page.locator('.my-element');
await expect(locator).toBeVisible();
assertThat(page.locator(".my-element")).isVisible();
from playwright.async_api import expect
locator = page.locator('.my-element')
await expect(locator).to_be_visible()
from playwright.sync_api import expect
locator = page.locator('.my-element')
expect(locator).to_be_visible()
var locator = Page.Locator(".my-element");
await Expect(locator).ToBeVisibleAsync();
option: LocatorAssertions.toBeVisible.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toBeVisible.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toContainText
- langs:
- alias-java: containsText
Ensures the [Locator] points to an element that contains the given text. You can use regular expressions for the value as well.
const locator = page.locator('.title');
await expect(locator).toContainText('substring');
await expect(locator).toContainText(/\d messages/);
assertThat(page.locator(".title")).containsText("substring");
import re
from playwright.async_api import expect
locator = page.locator('.title')
await expect(locator).to_contain_text("substring")
await expect(locator).to_contain_text(re.compile(r"\d messages"))
import re
from playwright.sync_api import expect
locator = page.locator('.title')
expect(locator).to_contain_text("substring")
expect(locator).to_contain_text(re.compile(r"\d messages"))
var locator = Page.Locator(".title");
await Expect(locator).ToContainTextAsync("substring");
await Expect(locator).ToContainTextAsync(new Regex("\\d messages"));
Note that if array is passed as an expected value, entire lists of elements can be asserted:
const locator = page.locator('list > .list-item');
await expect(locator).toContainText(['Text 1', 'Text 4', 'Text 5']);
assertThat(page.locator("list > .list-item")).containsText(new String[] {"Text 1", "Text 4", "Text 5"});
import re
from playwright.async_api import expect
locator = page.locator("list > .list-item")
await expect(locator).to_contain_text(["Text 1", "Text 4", "Text 5"])
import re
from playwright.sync_api import expect
locator = page.locator("list > .list-item")
expect(locator).to_contain_text(["Text 1", "Text 4", "Text 5"])
var locator = Page.Locator("list > .list-item");
await Expect(locator).ToContainTextAsync(new string[] { "Text 1", "Text 4", "Text 5" });
param: LocatorAssertions.toContainText.expected
- langs: python, js
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected substring or RegExp or a list of those.
param: LocatorAssertions.toContainText.expected
- langs: java, csharp
expected
<[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
option: LocatorAssertions.toContainText.ignoreCase
ignoreCase
<[boolean]>
Whether to perform case-insensitive match. [option: ignoreCase
] option takes precedence over the corresponding regular expression flag if specified.
option: LocatorAssertions.toContainText.useInnerText
useInnerText
<[boolean]>
Whether to use element.innerText
instead of element.textContent
when retrieving DOM node text.
option: LocatorAssertions.toContainText.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toContainText.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveAttribute
- langs:
- alias-java: hasAttribute
Ensures the [Locator] points to an element with given attribute.
const locator = page.locator('input');
await expect(locator).toHaveAttribute('type', 'text');
assertThat(page.locator("input")).hasAttribute("type", "text");
from playwright.async_api import expect
locator = page.locator("input")
await expect(locator).to_have_attribute("type", "text")
from playwright.sync_api import expect
locator = page.locator("input")
expect(locator).to_have_attribute("type", "text")
var locator = Page.Locator("input");
await Expect(locator).ToHaveAttributeAsync("type", "text");
param: LocatorAssertions.toHaveAttribute.name
name
<[string]>
Attribute name.
param: LocatorAssertions.toHaveAttribute.value
value
<[string]|[RegExp]>
Expected attribute value.
option: LocatorAssertions.toHaveAttribute.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveAttribute.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveClass
- langs:
- alias-java: hasClass
Ensures the [Locator] points to an element with given CSS class.
const locator = page.locator('#component');
await expect(locator).toHaveClass(/selected/);
assertThat(page.locator("#component")).hasClass(Pattern.compile("selected"));
from playwright.async_api import expect
locator = page.locator("#component")
await expect(locator).to_have_class(re.compile(r"selected"))
from playwright.sync_api import expect
locator = page.locator("#component")
expect(locator).to_have_class(re.compile(r"selected"))
var locator = Page.Locator("#component");
await Expect(locator).ToHaveClassAsync(new Regex("selected"));
Note that if array is passed as an expected value, entire lists of elements can be asserted:
const locator = page.locator('list > .component');
await expect(locator).toHaveClass(['component', 'component selected', 'component']);
assertThat(page.locator("list > .component")).hasClass(new String[] {"component", "component selected", "component"});
from playwright.async_api import expect
locator = page.locator("list > .component")
await expect(locator).to_have_class(["component", "component selected", "component"])
from playwright.sync_api import expect
locator = page.locator("list > .component")
expect(locator).to_have_class(["component", "component selected", "component"])
var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveClassAsync(new string[]{"component", "component selected", "component"});
param: LocatorAssertions.toHaveClass.expected
- langs: python, js
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected class or RegExp or a list of those.
param: LocatorAssertions.toHaveClass.expected
- langs: java, csharp
expected
<[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected class or RegExp or a list of those.
option: LocatorAssertions.toHaveClass.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveClass.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveCount
- langs:
- alias-java: hasCount
Ensures the [Locator] resolves to an exact number of DOM nodes.
const list = page.locator('list > .component');
await expect(list).toHaveCount(3);
assertThat(page.locator("list > .component")).hasCount(3);
from playwright.async_api import expect
locator = page.locator("list > .component")
await expect(locator).to_have_count(3)
from playwright.sync_api import expect
locator = page.locator("list > .component")
expect(locator).to_have_count(3)
var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveCountAsync(3);
param: LocatorAssertions.toHaveCount.count
count
<[int]>
Expected count.
option: LocatorAssertions.toHaveCount.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveCount.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveCSS
- langs:
- alias-java: hasCSS
Ensures the [Locator] resolves to an element with the given computed CSS style.
const locator = page.locator('button');
await expect(locator).toHaveCSS('display', 'flex');
assertThat(page.locator("button")).hasCSS("display", "flex");
from playwright.async_api import expect
locator = page.locator("button")
await expect(locator).to_have_css("display", "flex")
from playwright.sync_api import expect
locator = page.locator("button")
expect(locator).to_have_css("display", "flex")
var locator = Page.Locator("button");
await Expect(locator).ToHaveCSSAsync("display", "flex");
param: LocatorAssertions.toHaveCSS.name
name
<[string]>
CSS property name.
param: LocatorAssertions.toHaveCSS.value
value
<[string]|[RegExp]>
CSS property value.
option: LocatorAssertions.toHaveCSS.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveCSS.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveId
- langs:
- alias-java: hasId
Ensures the [Locator] points to an element with the given DOM Node ID.
const locator = page.locator('input');
await expect(locator).toHaveId('lastname');
assertThat(page.locator("input")).hasId("lastname");
from playwright.async_api import expect
locator = page.locator("input")
await expect(locator).to_have_id("lastname")
from playwright.sync_api import expect
locator = page.locator("input")
expect(locator).to_have_id("lastname")
var locator = Page.Locator("input");
await Expect(locator).ToHaveIdAsync("lastname");
param: LocatorAssertions.toHaveId.id
id
<[string]|[RegExp]>
Element id.
option: LocatorAssertions.toHaveId.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveId.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveJSProperty
- langs:
- alias-java: hasJSProperty
Ensures the [Locator] points to an element with given JavaScript property. Note that this property can be of a primitive type as well as a plain serializable JavaScript object.
const locator = page.locator('.component');
await expect(locator).toHaveJSProperty('loaded', true);
assertThat(page.locator("input")).hasJSProperty("loaded", true);
from playwright.async_api import expect
locator = page.locator(".component")
await expect(locator).to_have_js_property("loaded", True)
from playwright.sync_api import expect
locator = page.locator(".component")
expect(locator).to_have_js_property("loaded", True)
var locator = Page.Locator(".component");
await Expect(locator).ToHaveJSPropertyAsync("loaded", true);
param: LocatorAssertions.toHaveJSProperty.name
name
<[string]>
Property name.
param: LocatorAssertions.toHaveJSProperty.value
value
<[any]>
Property value.
option: LocatorAssertions.toHaveJSProperty.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveJSProperty.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveScreenshot#1
- langs: js
This function will wait until two consecutive locator screenshots yield the same result, and then compare the last screenshot with the expectation.
const locator = page.locator('button');
await expect(locator).toHaveScreenshot('image.png');
param: LocatorAssertions.toHaveScreenshot#1.name
name
<[string]|[Array]<[string]>>
Snapshot name.
option: LocatorAssertions.toHaveScreenshot#1.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveScreenshot#1.animations = %%-screenshot-option-animations-default-disabled-%%
option: LocatorAssertions.toHaveScreenshot#1.caret = %%-screenshot-option-caret-%%
option: LocatorAssertions.toHaveScreenshot#1.mask = %%-screenshot-option-mask-%%
option: LocatorAssertions.toHaveScreenshot#1.omitBackground = %%-screenshot-option-omit-background-%%
option: LocatorAssertions.toHaveScreenshot#1.scale = %%-screenshot-option-scale-default-css-%%
option: LocatorAssertions.toHaveScreenshot#1.maxDiffPixels = %%-assertions-max-diff-pixels-%%
option: LocatorAssertions.toHaveScreenshot#1.maxDiffPixelRatio = %%-assertions-max-diff-pixel-ratio-%%
option: LocatorAssertions.toHaveScreenshot#1.threshold = %%-assertions-threshold-%%
async method: LocatorAssertions.toHaveScreenshot#2
- langs: js
This function will wait until two consecutive locator screenshots yield the same result, and then compare the last screenshot with the expectation.
const locator = page.locator('button');
await expect(locator).toHaveScreenshot();
option: LocatorAssertions.toHaveScreenshot#2.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveScreenshot#2.animations = %%-screenshot-option-animations-default-disabled-%%
option: LocatorAssertions.toHaveScreenshot#2.caret = %%-screenshot-option-caret-%%
option: LocatorAssertions.toHaveScreenshot#2.mask = %%-screenshot-option-mask-%%
option: LocatorAssertions.toHaveScreenshot#2.omitBackground = %%-screenshot-option-omit-background-%%
option: LocatorAssertions.toHaveScreenshot#2.scale = %%-screenshot-option-scale-default-css-%%
option: LocatorAssertions.toHaveScreenshot#2.maxDiffPixels = %%-assertions-max-diff-pixels-%%
option: LocatorAssertions.toHaveScreenshot#2.maxDiffPixelRatio = %%-assertions-max-diff-pixel-ratio-%%
option: LocatorAssertions.toHaveScreenshot#2.threshold = %%-assertions-threshold-%%
async method: LocatorAssertions.toHaveText
- langs:
- alias-java: hasText
Ensures the [Locator] points to an element with the given text. You can use regular expressions for the value as well.
const locator = page.locator('.title');
await expect(locator).toHaveText(/Welcome, Test User/);
await expect(locator).toHaveText(/Welcome, .*/);
assertThat(page.locator(".title")).hasText("Welcome, Test User");
assertThat(page.locator(".title")).hasText(Pattern.compile("Welcome, .*"));
import re
from playwright.async_api import expect
locator = page.locator(".title")
await expect(locator).to_have_text(re.compile(r"Welcome, Test User"))
await expect(locator).to_have_text(re.compile(r"Welcome, .*"))
import re
from playwright.sync_api import expect
locator = page.locator(".title")
expect(locator).to_have_text(re.compile(r"Welcome, Test User"))
expect(locator).to_have_text(re.compile(r"Welcome, .*"))
var locator = Page.Locator(".title");
await Expect(locator).ToHaveTextAsync(new Regex("Welcome, Test User"));
await Expect(locator).ToHaveTextAsync(new Regex("Welcome, .*"));
Note that if array is passed as an expected value, entire lists of elements can be asserted:
const locator = page.locator('list > .component');
await expect(locator).toHaveText(['Text 1', 'Text 2', 'Text 3']);
assertThat(page.locator("list > .component")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
from playwright.async_api import expect
locator = page.locator("list > .component")
await expect(locator).to_have_text(["Text 1", "Text 2", "Text 3"])
from playwright.sync_api import expect
locator = page.locator("list > .component")
expect(locator).to_have_text(["Text 1", "Text 2", "Text 3"])
var locator = Page.Locator("list > .component");
await Expect(locator).toHaveTextAsync(new string[]{ "Text 1", "Text 2", "Text 3" });
param: LocatorAssertions.toHaveText.expected
- langs: python, js
expected
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected substring or RegExp or a list of those.
param: LocatorAssertions.toHaveText.expected
- langs: java, csharp
expected
<[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
option: LocatorAssertions.toHaveText.ignoreCase
ignoreCase
<[boolean]>
Whether to perform case-insensitive match. [option: ignoreCase
] option takes precedence over the corresponding regular expression flag if specified.
option: LocatorAssertions.toHaveText.useInnerText
useInnerText
<[boolean]>
Whether to use element.innerText
instead of element.textContent
when retrieving DOM node text.
option: LocatorAssertions.toHaveText.timeout = %%-js-assertions-timeout-%%
option: LocatorAssertions.toHaveText.timeout = %%-csharp-java-python-assertions-timeout-%%
async method: LocatorAssertions.toHaveValue
- langs:
- alias-java: hasValue
Ensures the [Locator] points to an element with the given input value. You can use regular expressions for the value as well.
const locator = page.locator('input[type=number]');
await expect(locator).toHaveValue(/[0-9]/);
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
import re
from playwright.async_api import expect
locator = page.locator("input[type=number]")
await expect(locator).to_have_value(re.compile(r"[0-9]"))
import re
from playwright.sync_api import expect
locator = page.locator("input[type=number]")
expect(locator).to_have_value(re.compile(r"[0-9]"))
var locator = Page.Locator("input[type=number]");
await Expect(locator).ToHaveValueAsync(new Regex("[0-9]"));
param: LocatorAssertions.toHaveValue.value
value
<[string]|[RegExp]|[Array]<[string]|[RegExp]>>
Expected value. A list of expected values can be used if the Locator is a select
element with the multiple
attribute.