LocatorAssertions
Класс LocatorAssertions предоставляет методы утверждений, которые можно использовать для проверки состояния Locator в тестах.
// ...
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");
}
}
Методы
containsClass
Добавлено в: v1.52Гарантирует, что Locator указывает на элемент с заданными CSS-классами. Все классы из проверяемого значения, разделённые пробелами, должны присутствовать в Element.classList в любом порядке.
Использование
<div class='middle selected row' id='component'></div>
assertThat(page.locator("#component")).containsClass("middle selected row");
assertThat(page.locator("#component")).containsClass("selected");
assertThat(page.locator("#component")).containsClass("row middle");
Когда передаётся массив, метод проверяет, что список найденных элементов соответствует соответствующему списку ожидаемых наборов классов. Атрибут class каждого элемента сопоставляется с соответствующим классом в массиве:
<div class='list'>
<div class='component inactive'></div>
<div class='component active'></div>
<div class='component inactive'></div>
</div>
assertThat(page.locator(".list > .component")).containsClass(new String[] {"inactive", "active", "inactive"});
Аргументы
-
expectedString | List<String>#Строка, содержащая ожидаемые имена классов, разделённые пробелами, или список таких строк, чтобы проверить несколько элементов.
-
optionsLocatorAssertions.ContainsClassOptions(опционально)
Возвращает
containsText
Добавлено в: v1.20Убеждается, что Locator указывает на элемент, содержащий заданный текст. При вычислении текстового содержимого элемента будут учитываться все вложенные элементы. В качестве значения также можно использовать регулярные выражения.
Использование
assertThat(page.locator(".title")).containsText("substring");
Если в качестве ожидаемого значения передаётся массив, ожидания следующие:
- Локатор разрешается в список элементов.
- Элементы из подмножества этого списка соответственно содержат текст из ожидаемого массива.
- Совпадающее подмножество элементов имеет тот же порядок, что и ожидаемый массив.
- Каждое текстовое значение из ожидаемого массива сопоставляется с некоторым элементом из списка.
Например, рассмотрим следующий список:
<ul>
<li>Item Text 1</li>
<li>Item Text 2</li>
<li>Item Text 3</li>
</ul>
Посмотрим, как можно использовать это утверждение:
// ✓ 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"});
Аргументы
-
expectedString | Pattern | String[] | Pattern[] Добавлено в: v1.18#Ожидаемая подстрока, регулярное выражение или список из них.
-
optionsLocatorAssertions.ContainsTextOptions(опционально)-
setIgnoreCaseboolean (опционально) Добавлено в: v1.23#Выполнять ли сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если она указана.
-
setTimeoutdouble (опционально) Добавлено в: v1.18#Время повторных попыток выполнения утверждения в миллисекундах. По умолчанию
5000. -
setUseInnerTextboolean (опционально) Добавлено в: v1.18#Использовать ли
element.innerTextвместоelement.textContentпри получении текста DOM-узла.
-
Возвращает
Детали
Когда параметр expected является строкой, Playwright нормализует пробелы и переводы строк как в фактическом тексте, так и в ожидаемой строке перед сопоставлением. При использовании регулярного выражения фактический текст сопоставляется как есть.
hasAccessibleDescription
Добавлено в: v1.44Убеждается, что Locator указывает на элемент с заданным accessible description.
Использование
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleDescription("Save results to disk");
Аргументы
-
Ожидаемое accessible description.
-
optionsLocatorAssertions.HasAccessibleDescriptionOptions(опционально)-
setIgnoreCaseboolean (опционально)#Нужно ли выполнять сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если задана.
-
setTimeoutdouble (опционально)#Время (в миллисекундах), в течение которого повторяются попытки выполнить проверку. Значение по умолчанию —
5000.
-
Возвращает
hasAccessibleErrorMessage
Добавлено в: v1.50Гарантирует, что Locator указывает на элемент с заданным aria errormessage.
Использование
Locator locator = page.getByTestId("username-input");
assertThat(locator).hasAccessibleErrorMessage("Username is required.");
Аргументы
-
errorMessageString | Pattern#Ожидаемое accessible error message.
-
optionsLocatorAssertions.HasAccessibleErrorMessageOptions(опционально)-
setIgnoreCaseboolean (опционально)#Нужно ли выполнять сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если задана.
-
setTimeoutdouble (опционально)#Время (в миллисекундах), в течение которого повторяются попытки выполнить проверку. Значение по умолчанию —
5000.
-
Возвращает
hasAccessibleName
Добавлено в: v1.44Убеждается, что Locator указывает на элемент с заданным accessible name.
Использование
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleName("Save to disk");
Аргументы
-
Expected accessible name.
-
optionsLocatorAssertions.HasAccessibleNameOptions(опционально)-
setIgnoreCaseboolean (опционально)#Выполнять ли сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если она указана.
-
setTimeoutdouble (опционально)#Время (в миллисекундах), в течение которого повторяются попытки выполнить проверку. Значение по умолчанию —
5000.
-
Возвращает
hasAttribute
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным атрибутом.
Использование
assertThat(page.locator("input")).hasAttribute("type", "text");
Аргументы
-
nameString Добавлено в: v1.18#Имя атрибута.
-
valueString | Pattern Добавлено в: v1.18#Ожидаемое значение атрибута.
-
optionsLocatorAssertions.HasAttributeOptions(опционально)-
setIgnoreCaseboolean (опционально) Добавлено в: v1.40#Выполнять ли сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если она указана.
-
setTimeoutdouble (опционально) Добавлено в: v1.18#Время повторных попыток выполнения утверждения в миллисекундах. По умолчанию
5000.
-
Возвращает
hasClass
Добавлено в: v1.20Гарантирует, что Locator указывает на элемент с заданными CSS-классами. Когда передаётся строка, она должна полностью соответствовать атрибуту class элемента. Для сопоставления отдельных классов используйте assertThat(locator).containsClass().
Использование
<div class='middle selected row' id='component'></div>
assertThat(page.locator("#component")).hasClass("middle selected row");
assertThat(page.locator("#component")).hasClass(Pattern.compile("(^|\\s)selected(\\s|$)"));
Когда передаётся массив, метод проверяет, что список найденных элементов соответствует соответствующему списку ожидаемых значений классов. Атрибут class каждого элемента сопоставляется с соответствующей строкой или регулярным выражением в массиве:
assertThat(page.locator(".list > .component")).hasClass(new String[] {"component", "component selected", "component"});
Аргументы
-
expectedString | Pattern | String[] | Pattern[] Добавлено в: v1.18#Expected class or RegExp or a list of those.
-
optionsLocatorAssertions.HasClassOptions(опционально)
Возвращает
hasCount
Добавлено в: v1.20Гарантирует, что Locator разрешается ровно в заданное количество DOM-узлов.
Использование
assertThat(page.locator("list > .component")).hasCount(3);
Аргументы
-
Ожидаемое количество.
-
optionsLocatorAssertions.HasCountOptions(опционально)
Возвращает
hasCSS
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным вычисленным CSS-стилем.
Использование
assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex");
Аргументы
-
nameString Добавлено в: v1.18#Имя CSS-свойства.
-
valueString | Pattern Добавлено в: v1.18#Значение CSS-свойства.
-
optionsLocatorAssertions.HasCSSOptions(опционально)
Возвращает
hasId
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным ID DOM-узла.
Использование
assertThat(page.getByRole(AriaRole.TEXTBOX)).hasId("lastname");
Аргументы
-
idString | Pattern Добавлено в: v1.18#Идентификатор элемента.
-
optionsLocatorAssertions.HasIdOptions(опционально)
Возвращает
hasJSProperty
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным JavaScript-свойством. Обратите внимание, что это свойство может быть как примитивным типом, так и простым сериализуемым JavaScript-объектом.
Использование
assertThat(page.locator("input")).hasJSProperty("loaded", true);
Аргументы
-
nameString Добавлено в: v1.18#Имя свойства.
-
valueObject Добавлено в: v1.18#Значение свойства.
-
optionsLocatorAssertions.HasJSPropertyOptions(опционально)
Возвращает
hasRole
Добавлено в: v1.44Гарантирует, что Locator указывает на элемент с заданной ролью ARIA.
Обратите внимание, что роль сопоставляется как строка, без учёта иерархии ролей ARIA. Например, проверка роли суперкласса "checkbox" для элемента с ролью подкласса "switch" завершится неудачей.
Использование
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasRole(AriaRole.BUTTON);
Аргументы
-
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(опционально)
Возвращает
hasText
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным текстом. При вычислении текстового содержимого элемента будут учитываться все вложенные элементы. В качестве значения также можно использовать регулярные выражения.
Использование
assertThat(page.locator(".title")).hasText("Welcome, Test User");
assertThat(page.locator(".title")).hasText(Pattern.compile("Welcome, .*"));
Если передать массив в качестве ожидаемого значения, ожидания такие:
- Локатор разрешается в список элементов.
- Количество элементов равно количеству ожидаемых значений в массиве.
- Текст элементов из списка по очереди, в заданном порядке, соответствует ожидаемым значениям из массива.
Например, рассмотрим следующий список:
<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>
Посмотрим, как можно использовать эту проверку:
// ✓ Содержит правильные элементы в правильном порядке
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
// ✖ Неверный порядок
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 3", "Text 2", "Text 1"});
// ✖ Последний элемент не совпадает
assertThat(page.locator("ul > li")).hasText(new String[] {"Text 1", "Text 2", "Text"});
// ✖ Локатор указывает на внешний элемент списка, а не на элементы списка
assertThat(page.locator("ul")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
Аргументы
-
expectedString | Pattern | String[] | Pattern[] Добавлено в: v1.18#Ожидаемая строка, регулярное выражение или список из них.
-
optionsLocatorAssertions.HasTextOptions(опционально)-
setIgnoreCaseboolean (опционально) Добавлено в: v1.23#Нужно ли выполнять сопоставление без учёта регистра. Опция setIgnoreCase имеет приоритет над соответствующим флагом регулярного выражения, если задана.
-
setTimeoutdouble (опционально) Добавлено в: v1.18#Время (в миллисекундах), в течение которого повторяются попытки выполнить проверку. Значение по умолчанию —
5000. -
setUseInnerTextboolean (опционально) Добавлено в: v1.18#Нужно ли использовать
element.innerTextвместоelement.textContentпри получении текста DOM-узла.
-
Возвращает
Детали
Если параметр expected — строка, Playwright перед сопоставлением нормализует пробельные символы и переносы строк и в фактическом тексте, и в ожидаемой строке. Если используется регулярное выражение, фактический текст сопоставляется как есть.
hasValue
Добавлено в: v1.20Гарантирует, что Locator указывает на элемент с заданным значением ввода. Для значения также можно использовать регулярные выражения.
Использование
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
Аргументы
-
valueString | Pattern Добавлено в: v1.18#Ожидаемое значение.
-
optionsLocatorAssertions.HasValueOptions(опционально)
Возвращает
hasValues
Добавлено в: v1.23Гарантирует, что Locator указывает на элемент с множественным выбором/комбобокс (т.е. select с атрибутом multiple) и что указанные значения выбраны.
Использование
Например, для следующего элемента:
<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") });
Аргументы
-
Ожидаемые параметры, выбранные в данный момент.
-
optionsLocatorAssertions.HasValuesOptions(опционально)
Возвращает
isAttached
Добавлено в: v1.33Убеждается, что Locator указывает на элемент, который подключен к Document или ShadowRoot.
Использование
assertThat(page.getByText("Hidden text")).isAttached();
Аргументы
optionsLocatorAssertions.IsAttachedOptions(опционально)
Возвращает
isChecked
Добавлено в: v1.20Убеждается, что Locator указывает на отмеченный input.
Использование
assertThat(page.getByLabel("Subscribe to newsletter")).isChecked();
Аргументы
optionsLocatorAssertions.IsCheckedOptions(опционально)-
setCheckedboolean (опционально) Добавлено в: v1.18#Предоставляет состояние для утверждения. По умолчанию утверждает, что input отмечен. Этот параметр нельзя использовать, когда setIndeterminate установлен в true.
-
setIndeterminateboolean (опционально) Добавлено в: v1.50#Утверждает, что элемент находится в неопределенном (смешанном) состоянии. Поддерживается только для чекбоксов и радиокнопок. Этот параметр не может быть true, когда setChecked предоставлен.
-
setTimeoutdouble (опционально) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000.
-
Возвращает
isDisabled
Добавлено в: v1.20Убеждается, что Locator указывает на отключенный элемент. Элемент отключен, если у него есть атрибут "disabled" или он отключен через 'aria-disabled'. Обратите внимание, что только элементы управления, такие как HTML button, input, select, textarea, option, optgroup могут быть отключены установкой атрибута "disabled". Атрибут "disabled" на других элементах игнорируется браузером.
Использование
assertThat(page.locator("button.submit")).isDisabled();
Аргументы
optionsLocatorAssertions.IsDisabledOptions(опционально)
Возвращает
isEditable
Добавлено в: v1.20Убеждается, что Locator указывает на редактируемый элемент.
Использование
assertThat(page.getByRole(AriaRole.TEXTBOX)).isEditable();
Аргументы
optionsLocatorAssertions.IsEditableOptions(опционально)
Возвращает
isEmpty
Добавлено в: v1.20Убеждается, что Locator указывает на пустой редактируемый элемент или на DOM-узел, который не содержит текста.
Использование
assertThat(page.locator("div.warning")).isEmpty();
Аргументы
optionsLocatorAssertions.IsEmptyOptions(опционально)
Возвращает
isEnabled
Добавлено в: v1.20Убеждается, что Locator указывает на включенный элемент.
Использование
assertThat(page.locator("button.submit")).isEnabled();
Аргументы
optionsLocatorAssertions.IsEnabledOptions(опционально)
Возвращает
isFocused
Добавлено в: v1.20Убеждается, что Locator указывает на сфокусированный DOM-узел.
Использование
assertThat(page.getByRole(AriaRole.TEXTBOX)).isFocused();
Аргументы
optionsLocatorAssertions.IsFocusedOptions(опционально)
Возвращает
isHidden
Добавлено в: v1.20Убеждается, что Locator либо не разрешается ни в один DOM-узел, либо разрешается в невидимый узел.
Использование
assertThat(page.locator(".my-element")).isHidden();
Аргументы
optionsLocatorAssertions.IsHiddenOptions(опционально)
Возвращает
isInViewport
Добавлено в: v1.31Убеждается, что Locator указывает на элемент, который пересекает область просмотра, согласно API наблюдателя пересечений.
Использование
Locator locator = page.getByRole(AriaRole.BUTTON);
// Убедитесь, что хотя бы часть элемента пересекает область просмотра.
assertThat(locator).isInViewport();
// Убедитесь, что элемент полностью вне области просмотра.
assertThat(locator).not().isInViewport();
// Убедитесь, что хотя бы половина элемента пересекает область просмотра.
assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));
Аргументы
optionsLocatorAssertions.IsInViewportOptions(опционально)-
setRatiodouble (опционально)#Минимальное соотношение элемента для пересечения области просмотра. Если равно
0, то элемент должен пересекать область просмотра при любом положительном соотношении. По умолчанию0. -
setTimeoutdouble (опционально)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000.
-
Возвращает
isVisible
Добавлено в: v1.20Убеждается, что Locator указывает на подключенный и видимый DOM-узел.
Чтобы проверить, что хотя бы один элемент из списка виден, используйте Locator.first().
Использование
// Конкретный элемент виден.
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();
Аргументы
optionsLocatorAssertions.IsVisibleOptions(опционально)
Возвращает
matchesAriaSnapshot
Добавлено в: v1.49Утверждает, что целевой элемент соответствует данному снимку доступности.
Использование
page.navigate("https://demo.playwright.dev/todomvc/");
assertThat(page.locator("body")).matchesAriaSnapshot("""
- heading "todos"
- textbox "What needs to be done?"
""");
Аргументы
Возвращает
Свойства
not()
Добавлено в: v1.20Делает проверку утверждения на противоположное условие. Например, этот код проверяет, что Locator не содержит текст "error":
assertThat(locator).not().containsText("error");
Использование
assertThat(locator).not()
Возвращает