LocatorAssertions
The LocatorAssertions class provides assertion methods that can be used to make assertions about the Locator state in the tests.
// ...
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
public class TestLocator {
// ...
@Test
void statusBecomesSubmitted() {
// ...
page.getByRole(AriaRole.BUTTON).click();
assertThat(page.locator(".status")).hasText("Submitted");
}
}
Methods
containsText
Added in: v1.20Ensures the Locator points to an element that contains the given text. All nested elements will be considered when computing the text content of the element. You can use regular expressions for the value as well.
Usage
assertThat(page.locator(".title")).containsText("substring");
If you pass an array as an expected value, the expectations are:
- Locator resolves to a list of elements.
- Elements from a subset of this list contain text from the expected array, respectively.
- The matching subset of elements has the same order as the expected array.
- Each text value from the expected array is matched by some element from the list.
For example, consider the following list:
<ul>
<li>Item Text 1</li>
<li>Item Text 2</li>
<li>Item Text 3</li>
</ul>
Let's see how we can use the assertion:
// ✓ Contains the right items in the right order
assertThat(page.locator("ul > li")).containsText(new String[] {"Text 1", "Text 3", "Text 4"});
// ✖ Wrong order
assertThat(page.locator("ul > li")).containsText(new String[] {"Text 3", "Text 2"});
// ✖ No item contains this text
assertThat(page.locator("ul > li")).containsText(new String[] {"Some 33"});
// ✖ Locator points to the outer list element, not to the list items
assertThat(page.locator("ul")).containsText(new String[] {"Text 3"});
Arguments
-
expectedString | Pattern | String[] | Pattern[] Added in: v1.18#Expected substring or RegExp or a list of those.
-
optionsLocatorAssertions.ContainsTextOptions(optional)-
setIgnoreCaseboolean (optional) Added in: v1.23#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
setTimeoutdouble (optional) Added in: v1.18#Time to retry the assertion for in milliseconds. Defaults to
5000. -
setUseInnerTextboolean (optional) Added in: v1.18#Whether to use
element.innerTextinstead ofelement.textContentwhen retrieving DOM node text.
-
Returns
Details
When expected parameter is a string, Playwright will normalize whitespaces and line breaks both in the actual text and in the expected string before matching. When regular expression is used, the actual text is matched as is.
hasAccessibleDescription
Added in: v1.44Ensures the Locator points to an element with a given accessible description.
Usage
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleDescription("Save results to disk");
Arguments
-
Expected accessible description.
-
optionsLocatorAssertions.HasAccessibleDescriptionOptions(optional)-
setIgnoreCaseboolean (optional)#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
Time to retry the assertion for in milliseconds. Defaults to
5000.
-
Returns
hasAccessibleErrorMessage
Added in: v1.50Ensures the Locator points to an element with a given aria errormessage.
Usage
Locator locator = page.getByTestId("username-input");
assertThat(locator).hasAccessibleErrorMessage("Username is required.");
Arguments
-
errorMessageString | Pattern#Expected accessible error message.
-
optionsLocatorAssertions.HasAccessibleErrorMessageOptions(optional)-
setIgnoreCaseboolean (optional)#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
Time to retry the assertion for in milliseconds. Defaults to
5000.
-
Returns
hasAccessibleName
Added in: v1.44Ensures the Locator points to an element with a given accessible name.
Usage
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleName("Save to disk");
Arguments
-
Expected accessible name.
-
optionsLocatorAssertions.HasAccessibleNameOptions(optional)-
setIgnoreCaseboolean (optional)#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
Time to retry the assertion for in milliseconds. Defaults to
5000.
-
Returns
hasAttribute
Added in: v1.20Ensures the Locator points to an element with given attribute.
Usage
assertThat(page.locator("input")).hasAttribute("type", "text");
Arguments
-
Attribute name.
-
valueString | Pattern Added in: v1.18#Expected attribute value.
-
optionsLocatorAssertions.HasAttributeOptions(optional)-
setIgnoreCaseboolean (optional) Added in: v1.40#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
setTimeoutdouble (optional) Added in: v1.18#Time to retry the assertion for in milliseconds. Defaults to
5000.
-
Returns
hasClass
Added in: v1.20Ensures 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
<div class='middle selected row' id='component'></div>
assertThat(page.locator("#component")).hasClass(Pattern.compile("(^|\\s)selected(\\s|$)"));
assertThat(page.locator("#component")).hasClass("middle selected row");
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:
assertThat(page.locator("list > .component")).hasClass(new String[] {"component", "component selected", "component"});
Arguments
-
expectedString | Pattern | String[] | Pattern[] Added in: v1.18#Expected class or RegExp or a list of those.
-
optionsLocatorAssertions.HasClassOptions(optional)
Returns
hasCount
Added in: v1.20Ensures the Locator resolves to an exact number of DOM nodes.
Usage
assertThat(page.locator("list > .component")).hasCount(3);
Arguments
-
Expected count.
-
optionsLocatorAssertions.HasCountOptions(optional)
Returns
hasCSS
Added in: v1.20Ensures the Locator resolves to an element with the given computed CSS style.
Usage
assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex");
Arguments
-
CSS property name.
-
valueString | Pattern Added in: v1.18#CSS property value.
-
optionsLocatorAssertions.HasCSSOptions(optional)
Returns
hasId
Added in: v1.20Ensures the Locator points to an element with the given DOM Node ID.
Usage
assertThat(page.getByRole(AriaRole.TEXTBOX)).hasId("lastname");
Arguments
Returns
hasJSProperty
Added in: v1.20Ensures 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.
Usage
assertThat(page.locator("input")).hasJSProperty("loaded", true);
Arguments
-
Property name.
-
Property value.
-
optionsLocatorAssertions.HasJSPropertyOptions(optional)
Returns
hasRole
Added in: v1.44Ensures the Locator points to an element with a given ARIA role.
Note that role is matched as a string, disregarding the ARIA role hierarchy. For example, asserting a superclass role "checkbox" on an element with a subclass role "switch" will fail.
Usage
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasRole(AriaRole.BUTTON);
Arguments
-
roleenum AriaRole { ALERT, ALERTDIALOG, APPLICATION, ARTICLE, BANNER, BLOCKQUOTE, BUTTON, CAPTION, CELL, CHECKBOX, CODE, COLUMNHEADER, COMBOBOX, COMPLEMENTARY, CONTENTINFO, DEFINITION, DELETION, DIALOG, DIRECTORY, DOCUMENT, EMPHASIS, FEED, FIGURE, FORM, GENERIC, GRID, GRIDCELL, GROUP, HEADING, IMG, INSERTION, LINK, LIST, LISTBOX, LISTITEM, LOG, MAIN, MARQUEE, MATH, METER, MENU, MENUBAR, MENUITEM, MENUITEMCHECKBOX, MENUITEMRADIO, NAVIGATION, NONE, NOTE, OPTION, PARAGRAPH, PRESENTATION, PROGRESSBAR, RADIO, RADIOGROUP, REGION, ROW, ROWGROUP, ROWHEADER, SCROLLBAR, SEARCH, SEARCHBOX, SEPARATOR, SLIDER, SPINBUTTON, STATUS, STRONG, SUBSCRIPT, SUPERSCRIPT, SWITCH, TAB, TABLE, TABLIST, TABPANEL, TERM, TEXTBOX, TIME, TIMER, TOOLBAR, TOOLTIP, TREE, TREEGRID, TREEITEM }#Required aria role.
-
optionsLocatorAssertions.HasRoleOptions(optional)
Returns
hasText
Added in: v1.20Ensures the Locator points to an element with the given text. All nested elements will be considered when computing the text content of the element. You can use regular expressions for the value as well.
Usage
assertThat(page.locator(".title")).hasText("Welcome, Test User");
assertThat(page.locator(".title")).hasText(Pattern.compile("Welcome, .*"));
If you pass an array as an expected value, the expectations are:
- Locator resolves to a list of elements.
- The number of elements equals the number of expected values in the array.
- Elements from the list have text matching expected array values, one by one, in order.
For example, consider the following list:
<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>
Let's see how we can use the assertion:
// ✓ Has the right items in the right order
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
// ✖ Wrong order
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 3", "Text 2", "Text 1"});
// ✖ Last item does not match
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 1", "Text 2", "Text"});
// ✖ Locator points to the outer list element, not to the list items
assertThat(page.locator("ul")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
Arguments
-
expectedString | Pattern | String[] | Pattern[] Added in: v1.18#Expected string or RegExp or a list of those.
-
optionsLocatorAssertions.HasTextOptions(optional)-
setIgnoreCaseboolean (optional) Added in: v1.23#Whether to perform case-insensitive match. setIgnoreCase option takes precedence over the corresponding regular expression flag if specified.
-
setTimeoutdouble (optional) Added in: v1.18#Time to retry the assertion for in milliseconds. Defaults to
5000. -
setUseInnerTextboolean (optional) Added in: v1.18#Whether to use
element.innerTextinstead ofelement.textContentwhen retrieving DOM node text.
-
Returns
Details
When expected parameter is a string, Playwright will normalize whitespaces and line breaks both in the actual text and in the expected string before matching. When regular expression is used, the actual text is matched as is.
hasValue
Added in: v1.20Ensures the Locator points to an element with the given input value. You can use regular expressions for the value as well.
Usage
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
Arguments
-
valueString | Pattern Added in: v1.18#Expected value.
-
optionsLocatorAssertions.HasValueOptions(optional)
Returns
hasValues
Added in: v1.23Ensures the Locator points to multi-select/combobox (i.e. a select with the multiple attribute) and the specified values are selected.
Usage
For example, given the following element:
<select id="favorite-colors" multiple>
<option value="R">Red</option>
<option value="G">Green</option>
<option value="B">Blue</option>
</select>
page.locator("id=favorite-colors").selectOption(new String[]{"R", "G"});
assertThat(page.locator("id=favorite-colors")).hasValues(new Pattern[] { Pattern.compile("R"), Pattern.compile("G") });
Arguments
-
Expected options currently selected.
-
optionsLocatorAssertions.HasValuesOptions(optional)
Returns
isAttached
Added in: v1.33Убеждается, что Locator указывает на элемент, который подключен к Document или ShadowRoot.
Usage
assertThat(page.getByText("Hidden text")).isAttached();
Arguments
optionsLocatorAssertions.IsAttachedOptions(optional)
Returns
isChecked
Added in: v1.20Убеждается, что Locator указывает на отмеченный input.
Usage
assertThat(page.getByLabel("Subscribe to newsletter")).isChecked();
Arguments
optionsLocatorAssertions.IsCheckedOptions(optional)-
setCheckedboolean (optional) Added in: v1.18#Предоставляет состояние для утверждения. По умолчанию утверждает, что input отмечен. Этот параметр нельзя использовать, когда setIndeterminate установлен в true.
-
setIndeterminateboolean (optional) Added in: v1.50#Утверждает, что элемент находится в неопределенном (смешанном) состоянии. Поддерживается только для чекбоксов и радиокнопок. Этот параметр не может быть true, когда setChecked предоставлен.
-
setTimeoutdouble (optional) Added in: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000.
-
Returns
isDisabled
Added in: v1.20Убеждается, что Locator указывает на отключенный элемент. Элемент отключен, если у него есть атрибут "disabled" или он отключен через 'aria-disabled'. Обратите внимание, что только элементы управления, такие как HTML button, input, select, textarea, option, optgroup могут быть отключены установкой атрибута "disabled". Атрибут "disabled" на других элементах игнорируется браузером.
Usage
assertThat(page.locator("button.submit")).isDisabled();
Arguments
optionsLocatorAssertions.IsDisabledOptions(optional)
Returns
isEditable
Added in: v1.20Убеждается, что Locator указывает на редактируемый элемент.
Usage
assertThat(page.getByRole(AriaRole.TEXTBOX)).isEditable();
Arguments
optionsLocatorAssertions.IsEditableOptions(optional)
Returns
isEmpty
Added in: v1.20Убеждается, что Locator указывает на пустой редактируемый элемент или на DOM-узел, который не содержит текста.
Usage
assertThat(page.locator("div.warning")).isEmpty();
Arguments
optionsLocatorAssertions.IsEmptyOptions(optional)
Returns
isEnabled
Added in: v1.20Убеждается, что Locator указывает на включенный элемент.
Usage
assertThat(page.locator("button.submit")).isEnabled();
Arguments
optionsLocatorAssertions.IsEnabledOptions(optional)
Returns
isFocused
Added in: v1.20Убеждается, что Locator указывает на сфокусированный DOM-узел.
Usage
assertThat(page.getByRole(AriaRole.TEXTBOX)).isFocused();
Arguments
optionsLocatorAssertions.IsFocusedOptions(optional)
Returns
isHidden
Added in: v1.20Убеждается, что Locator либо не разрешается ни в один DOM-узел, либо разрешается в невидимый узел.
Usage
assertThat(page.locator(".my-element")).isHidden();
Arguments
optionsLocatorAssertions.IsHiddenOptions(optional)
Returns
isInViewport
Added in: v1.31Убеждается, что Locator указывает на элемент, который пересекает область просмотра, согласно API наблюдателя пересечений.
Usage
Locator locator = page.getByRole(AriaRole.BUTTON);
// Убедитесь, что хотя бы часть элемента пересекает область просмотра.
assertThat(locator).isInViewport();
// Убедитесь, что элемент полностью вне области просмотра.
assertThat(locator).not().isInViewport();
// Убедитесь, что хотя бы половина элемента пересекает область просмотра.
assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));
Arguments
optionsLocatorAssertions.IsInViewportOptions(optional)-
Минимальное соотношение элемента для пересечения области просмотра. Если равно
0, то элемент должен пересекать область просмотра при любом положительном соотношении. По умолчанию0. -
Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000.
-
Returns
isVisible
Added in: v1.20Убеждается, что Locator указывает на подключенный и видимый DOM-узел.
Чтобы проверить, что хотя бы один элемент из списка виден, используйте Locator.first().
Usage
// Конкретный элемент виден.
assertThat(page.getByText("Welcome")).isVisible();
// По крайней мере один элемент в списке виден.
assertThat(page.getByTestId("todo-item").first()).isVisible();
// По крайней мере один из двух элементов виден, возможно, оба.
assertThat(
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in"))
.or(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up")))
.first()
).isVisible();
Arguments
optionsLocatorAssertions.IsVisibleOptions(optional)
Returns
matchesAriaSnapshot
Added in: v1.49Утверждает, что целевой элемент соответствует данному снимку доступности.
Usage
page.navigate("https://demo.playwright.dev/todomvc/");
assertThat(page.locator("body")).matchesAriaSnapshot("""
- heading "todos"
- textbox "What needs to be done?"
""");
Arguments
Returns
Properties
not()
Added in: v1.20Делает проверку утверждения на противоположное условие. Например, этот код проверяет, что Locator не содержит текст "error":
assertThat(locator).not().containsText("error");
Usage
assertThat(locator).not()
Returns