LocatorAssertions
Класс LocatorAssertions предоставляет методы утверждений, которые можно использовать для проверки состояния Locator в тестах.
- Sync
- Async
from playwright.sync_api import Page, expect
def test_status_becomes_submitted(page: Page) -> None:
# ..
page.get_by_role("button").click()
expect(page.locator(".status")).to_have_text("Submitted")
from playwright.async_api import Page, expect
async def test_status_becomes_submitted(page: Page) -> None:
# ..
await page.get_by_role("button").click()
await expect(page.locator(".status")).to_have_text("Submitted")
Методы
not_to_be_attached
Добавлено в: v1.33Обратное к методу expect(locator).to_be_attached().
Использование
expect(locator).not_to_be_attached()
expect(locator).not_to_be_attached(**kwargs)
Аргументы
-
timeout
float (необязательно)#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_checked
Добавлено в: v1.20Обратное к методу expect(locator).to_be_checked().
Использование
expect(locator).not_to_be_checked()
expect(locator).not_to_be_checked(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_disabled
Добавлено в: v1.20Обратное к методу expect(locator).to_be_disabled().
Использование
expect(locator).not_to_be_disabled()
expect(locator).not_to_be_disabled(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_editable
Добавлено в: v1.20Обратное к методу expect(locator).to_be_editable().
Использование
expect(locator).not_to_be_editable()
expect(locator).not_to_be_editable(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_empty
Добавлено в: v1.20Обратное к методу expect(locator).to_be_empty().
Использование
expect(locator).not_to_be_empty()
expect(locator).not_to_be_empty(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_enabled
Добавлено в: v1.20Обратное к методу expect(locator).to_be_enabled().
Использование
expect(locator).not_to_be_enabled()
expect(locator).not_to_be_enabled(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_focused
Добавлено в: v1.20Обратное к методу expect(locator).to_be_focused().
Использование
expect(locator).not_to_be_focused()
expect(locator).not_to_be_focused(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_hidden
Добавлено в: v1.20Обратное к методу expect(locator).to_be_hidden().
Использование
expect(locator).not_to_be_hidden()
expect(locator).not_to_be_hidden(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_in_viewport
Добавлено в: v1.31Обратное к методу expect(locator).to_be_in_viewport().
Использование
expect(locator).not_to_be_in_viewport()
expect(locator).not_to_be_in_viewport(**kwargs)
Аргументы
-
timeout
float (необязательно)#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_be_visible
Добавлено в: v1.20Обратное к методу expect(locator).to_be_visible().
Использование
expect(locator).not_to_be_visible()
expect(locator).not_to_be_visible(**kwargs)
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_contain_text
Добавлено в: v1.20Обратное к методу expect(locator).to_contain_text().
Использование
expect(locator).not_to_contain_text(expected)
expect(locator).not_to_contain_text(expected, **kwargs)
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемая подстрока или регулярное выражение, либо список таких значений.
-
ignore_case
bool (необязательно) Добавлено в: v1.23#Выполнять ли проверку без учёта регистра. Параметр ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
. -
use_inner_text
bool (необязательно) Добавлено в: v1.18#Использовать ли
element.innerText
вместоelement.textContent
при получении текста DOM-узла.
Возвращает
not_to_have_accessible_description
Добавлено в: v1.44Обратное к методу expect(locator).to_have_accessible_description().
Использование
expect(locator).not_to_have_accessible_description(name)
expect(locator).not_to_have_accessible_description(name, **kwargs)
Аргументы
-
Ожидаемое доступное описание.
-
ignore_case
bool (необязательно)#Выполнять ли проверку без учёта регистра. Параметр ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если указан.
-
timeout
float (необязательно)#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_accessible_error_message
Добавлено в: v1.50Обратное к методу expect(locator).to_have_accessible_error_message().
Использование
expect(locator).not_to_have_accessible_error_message(error_message)
expect(locator).not_to_have_accessible_error_message(error_message, **kwargs)
Аргументы
-
Ожидаемое доступное сообщение об ошибке.
-
ignore_case
bool (необязательно)#Выполнять ли проверку без учёта регистра. Параметр ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если указан.
-
timeout
float (необязательно)#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_accessible_name
Добавлено в: v1.44Обратное к методу expect(locator).to_have_accessible_name().
Использование
expect(locator).not_to_have_accessible_name(name)
expect(locator).not_to_have_accessible_name(name, **kwargs)
Аргументы
-
Ожидаемое доступное имя.
-
ignore_case
bool (необязательно)#Выполнять ли проверку без учёта регистра. Параметр ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если указан.
-
timeout
float (необязательно)#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_attribute
Добавлено в: v1.20Обратное к методу expect(locator).to_have_attribute().
Использование
expect(locator).not_to_have_attribute(name, value)
expect(locator).not_to_have_attribute(name, value, **kwargs)
Аргументы
-
Имя атрибута.
-
value
str | Pattern Добавлено в: v1.18#Ожидаемое значение атрибута.
-
ignore_case
bool (необязательно) Добавлено в: v1.40#Выполнять ли проверку без учёта регистра. Параметр ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_class
Добавлено в: v1.20Обратное к методу expect(locator).to_have_class().
Использование
expect(locator).not_to_have_class(expected)
expect(locator).not_to_have_class(expected, **kwargs)
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемый класс или регулярное выражение, либо список таких значений.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_count
Добавлено в: v1.20Обратное к методу expect(locator).to_have_count().
Использование
expect(locator).not_to_have_count(count)
expect(locator).not_to_have_count(count, **kwargs)
Аргументы
-
Ожидаемое количество.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_css
Добавлено в: v1.20Обратное к методу expect(locator).to_have_css().
Использование
expect(locator).not_to_have_css(name, value)
expect(locator).not_to_have_css(name, value, **kwargs)
Аргументы
-
Имя CSS-свойства.
-
value
str | Pattern Добавлено в: v1.18#Значение CSS-свойства.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_id
Добавлено в: v1.20Обратное к методу expect(locator).to_have_id().
Использование
expect(locator).not_to_have_id(id)
expect(locator).not_to_have_id(id, **kwargs)
Аргументы
-
id
str | Pattern Добавлено в: v1.18#Идентификатор элемента.
-
timeout
float (необязательно) Добавлено в: v1.18#Время, в течение которого будет повторяться попытка проверки, в миллисекундах. По умолчанию —
5000
.
Возвращает
not_to_have_js_property
Добавлено в: v1.20Противоположность expect(locator).to_have_js_property().
Использование
expect(locator).not_to_have_js_property(name, value)
expect(locator).not_to_have_js_property(name, value, **kwargs)
Аргументы
-
Имя свойства.
-
Значение свойства.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
not_to_have_role
Добавлено в: v1.44Противоположность expect(locator).to_have_role().
Использование
expect(locator).not_to_have_role(role)
expect(locator).not_to_have_role(role, **kwargs)
Аргументы
-
role
"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"#Требуемая роль aria.
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
not_to_have_text
Добавлено в: v1.20Противоположность expect(locator).to_have_text().
Использование
expect(locator).not_to_have_text(expected)
expect(locator).not_to_have_text(expected, **kwargs)
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемая строка или регулярное выражение или список из них.
-
ignore_case
bool (необязательно) Добавлено в: v1.23#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
. -
use_inner_text
bool (необязательно) Добавлено в: v1.18#Использовать ли
element.innerText
вместоelement.textContent
при получении текста DOM-узла.
Возвращает
not_to_have_value
Добавлено в: v1.20Противоположность expect(locator).to_have_value().
Использование
expect(locator).not_to_have_value(value)
expect(locator).not_to_have_value(value, **kwargs)
Аргументы
-
value
str | Pattern Добавлено в: v1.18#Ожидаемое значение.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
not_to_have_values
Добавлено в: v1.23Противоположность expect(locator).to_have_values().
Использование
expect(locator).not_to_have_values(values)
expect(locator).not_to_have_values(values, **kwargs)
Аргументы
-
values
List[str] | List[Pattern] | List[str | Pattern]#Ожидаемые в данный момент выбранные опции.
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
not_to_match_aria_snapshot
Добавлено в: v1.49Противоположность expect(locator).to_match_aria_snapshot().
Использование
expect(locator).not_to_match_aria_snapshot(expected)
expect(locator).not_to_match_aria_snapshot(expected, **kwargs)
Аргументы
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_attached
Добавлено в: v1.33Убеждается, что Locator указывает на элемент, который подключен к Document или ShadowRoot.
Использование
- Sync
- Async
expect(page.get_by_text("Hidden text")).to_be_attached()
await expect(page.get_by_text("Hidden text")).to_be_attached()
Аргументы
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_checked
Добавлено в: v1.20Убеждается, что Locator указывает на отмеченный ввод.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_label("Subscribe to newsletter")
expect(locator).to_be_checked()
from playwright.async_api import expect
locator = page.get_by_label("Subscribe to newsletter")
await expect(locator).to_be_checked()
Аргументы
-
checked
bool (необязательно) Добавлено в: v1.18#Предоставляет состояние для утверждения. По умолчанию утверждает, что ввод отмечен. Эта опция не может быть использована, когда indeterminate установлено в true.
-
indeterminate
bool (необязательно) Добавлено в: v1.50#Утверждает, что элемент находится в неопределенном (смешанном) состоянии. Поддерживается только для флажков и радиокнопок. Эта опция не может быть true, когда checked предоставлено.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_disabled
Добавлено в: v1.20Убеждается, что Locator указывает на отключенный элемент. Элемент отключен, если у него есть атрибут "disabled" или он отключен через 'aria-disabled'. Обратите внимание, что только элементы управления, такие как HTML button
, input
, select
, textarea
, option
, optgroup
могут быть отключены путем установки атрибута "disabled". Атрибут "disabled" на других элементах игнорируется браузером.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("button.submit")
expect(locator).to_be_disabled()
from playwright.async_api import expect
locator = page.locator("button.submit")
await expect(locator).to_be_disabled()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_editable
Добавлено в: v1.20Убеждается, что Locator указывает на редактируемый элемент.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_role("textbox")
expect(locator).to_be_editable()
from playwright.async_api import expect
locator = page.get_by_role("textbox")
await expect(locator).to_be_editable()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_empty
Добавлено в: v1.20Убеждается, что Locator указывает на пустой редактируемый элемент или на DOM-узел, который не содержит текста.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("div.warning")
expect(locator).to_be_empty()
from playwright.async_api import expect
locator = page.locator("div.warning")
await expect(locator).to_be_empty()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_enabled
Добавлено в: v1.20Убеждается, что Locator указывает на включенный элемент.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("button.submit")
expect(locator).to_be_enabled()
from playwright.async_api import expect
locator = page.locator("button.submit")
await expect(locator).to_be_enabled()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_focused
Добавлено в: v1.20Убеждается, что Locator указывает на сфокусированный DOM-узел.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_role("textbox")
expect(locator).to_be_focused()
from playwright.async_api import expect
locator = page.get_by_role("textbox")
await expect(locator).to_be_focused()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_hidden
Добавлено в: v1.20Убеждается, что Locator либо не разрешается ни к одному DOM-узлу, либо разрешается к невидимому.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator('.my-element')
expect(locator).to_be_hidden()
from playwright.async_api import expect
locator = page.locator('.my-element')
await expect(locator).to_be_hidden()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_in_viewport
Добавлено в: v1.31Убеждается, что Locator указывает на элемент, который пересекает область просмотра, согласно intersection observer API.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_role("button")
# Убедитесь, что хотя бы часть элемента пересекает область просмотра.
expect(locator).to_be_in_viewport()
# Убедитесь, что элемент полностью вне области просмотра.
expect(locator).not_to_be_in_viewport()
# Убедитесь, что хотя бы половина элемента пересекает область просмотра.
expect(locator).to_be_in_viewport(ratio=0.5)
from playwright.async_api import expect
locator = page.get_by_role("button")
# Убедитесь, что хотя бы часть элемента пересекает область просмотра.
await expect(locator).to_be_in_viewport()
# Убедитесь, что элемент полностью вне области просмотра.
await expect(locator).not_to_be_in_viewport()
# Убедитесь, что хотя бы половина элемента пересекает область просмотра.
await expect(locator).to_be_in_viewport(ratio=0.5)
Аргументы
-
Минимальное соотношение элемента, пересекающего область просмотра. Если равно
0
, то элемент должен пересекать область просмотра при любом положительном соотношении. По умолчанию0
. -
timeout
float (необязательно)#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_be_visible
Добавлено в: v1.20Убеждается, что Locator указывает на прикрепленный и видимый DOM-узел.
Чтобы проверить, что хотя бы один элемент из списка видим, используйте locator.first.
Использование
- Sync
- Async
# Конкретный элемент видим.
expect(page.get_by_text("Welcome")).to_be_visible()
# По крайней мере один элемент в списке видим.
expect(page.get_by_test_id("todo-item").first).to_be_visible()
# По крайней мере один из двух элементов видим, возможно оба.
expect(
page.get_by_role("button", name="Sign in")
.or_(page.get_by_role("button", name="Sign up"))
.first
).to_be_visible()
# Конкретный элемент видим.
await expect(page.get_by_text("Welcome")).to_be_visible()
# По крайней мере один элемент в списке видим.
await expect(page.get_by_test_id("todo-item").first).to_be_visible()
# По крайней мере один из двух элементов видим, возможно оба.
await expect(
page.get_by_role("button", name="Sign in")
.or_(page.get_by_role("button", name="Sign up"))
.first
).to_be_visible()
Аргументы
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_contain_text
Добавлено в: v1.20Убеждается, что Locator указывает на элемент, содержащий заданный текст. Все вложенные элементы будут учитываться при вычислении текстового содержимого элемента. Вы также можете использовать регулярные выражения для значения.
Использование
- Sync
- Async
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"))
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"))
Если вы передаете массив в качестве ожидаемого значения, ожидания следующие:
- Локатор разрешается в список элементов.
- Элементы из подмножества этого списка содержат текст из ожидаемого массива соответственно.
- Подмножество совпадающих элементов имеет тот же порядок, что и ожидаемый массив.
- Каждое текстовое значение из ожидаемого массива совпадает с каким-то элементом из списка.
Например, рассмотрим следующий список:
<ul>
<li>Item Text 1</li>
<li>Item Text 2</li>
<li>Item Text 3</li>
</ul>
Давайте посмотрим, как мы можем использовать утверждение:
- Sync
- Async
from playwright.sync_api import expect
# ✓ Содержит правильные элементы в правильном порядке
expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"])
# ✖ Неправильный порядок
expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"])
# ✖ Ни один элемент не содержит этот текст
expect(page.locator("ul > li")).to_contain_text(["Some 33"])
# ✖ Локатор указывает на внешний элемент списка, а не на элементы списка
expect(page.locator("ul")).to_contain_text(["Text 3"])
from playwright.async_api import expect
# ✓ Содержит правильные элементы в правильном порядке
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 3", "Text 2"])
# ✖ Ни один элемент не содержит этот текст
await expect(page.locator("ul > li")).to_contain_text(["Some 33"])
# ✖ Локатор указывает на внешний элемент списка, а не на элементы списка
await expect(page.locator("ul")).to_contain_text(["Text 3"])
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемая подстрока или RegExp или список из них.
-
ignore_case
bool (необязательно) Добавлено в: v1.23#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
. -
use_inner_text
bool (необязательно) Добавлено в: v1.18#Использовать ли
element.innerText
вместоelement.textContent
при получении текста DOM-узла.
Возвращает
Details
Когда параметр expected
является строкой, Playwright нормализует пробелы и разрывы строк как в фактическом тексте, так и в ожидаемой строке перед сопоставлением. Когда используется регулярное выражение, фактический текст сопоставляется как есть.
to_have_accessible_description
Добавлено в: v1.44Убеждается, что Locator указывает на элемент с заданным доступным описанием.
Использование
- Sync
- Async
locator = page.get_by_test_id("save-button")
expect(locator).to_have_accessible_description("Save results to disk")
locator = page.get_by_test_id("save-button")
await expect(locator).to_have_accessible_description("Save results to disk")
Аргументы
-
Ожидаемое доступное описание.
-
ignore_case
bool (необязательно)#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно)#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_accessible_error_message
Добавлено в: v1.50Убеждается, что Locator указывает на элемент с заданным aria errormessage.
Использование
- Sync
- Async
locator = page.get_by_test_id("username-input")
expect(locator).to_have_accessible_error_message("Username is required.")
locator = page.get_by_test_id("username-input")
await expect(locator).to_have_accessible_error_message("Username is required.")
Аргументы
-
Ожидаемое доступное сообщение об ошибке.
-
ignore_case
bool (необязательно)#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно)#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_accessible_name
Добавлено в: v1.44Убеждается, что Locator указывает на элемент с заданным доступным именем.
Использование
- Sync
- Async
locator = page.get_by_test_id("save-button")
expect(locator).to_have_accessible_name("Save to disk")
locator = page.get_by_test_id("save-button")
await expect(locator).to_have_accessible_name("Save to disk")
Аргументы
-
Ожидаемое доступное имя.
-
ignore_case
bool (необязательно)#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно)#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_attribute
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным атрибутом.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("input")
expect(locator).to_have_attribute("type", "text")
from playwright.async_api import expect
locator = page.locator("input")
await expect(locator).to_have_attribute("type", "text")
Аргументы
-
Имя атрибута.
-
value
str | Pattern Добавлено в: v1.18#Ожидаемое значение атрибута.
-
ignore_case
bool (необязательно) Добавлено в: v1.40#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_class
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданными CSS-классами. Когда предоставляется строка, она должна полностью соответствовать атрибуту class
элемента. Чтобы сопоставить отдельные классы или выполнить частичные совпадения, используйте регулярное выражение:
Использование
<div class='middle selected row' id='component'></div>
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("#component")
expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
expect(locator).to_have_class("middle selected row")
from playwright.async_api import expect
locator = page.locator("#component")
await expect(locator).to_have_class(re.compile(r"(^|\\s)selected(\\s|$)"))
await expect(locator).to_have_class("middle selected row")
Когда передается массив, метод утверждает, что список найденных элементов соответствует соответствующему списку ожидаемых значений классов. Атрибут class каждого элемента сопоставляется с соответствующей строкой или регулярным выражением в массиве:
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("list > .component")
expect(locator).to_have_class(["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"])
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемый класс или RegExp или список из них.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной проверки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_count
Добавлено в: v1.20Убеждается, что Locator разрешается в точное количество DOM-узлов.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator("list > .component")
expect(locator).to_have_count(3)
from playwright.async_api import expect
locator = page.locator("list > .component")
await expect(locator).to_have_count(3)
Аргументы
-
Ожидаемое количество.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_css
Добавлено в: v1.20Убеждается, что Locator разрешается в элемент с заданным вычисленным стилем CSS.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_role("button")
expect(locator).to_have_css("display", "flex")
from playwright.async_api import expect
locator = page.get_by_role("button")
await expect(locator).to_have_css("display", "flex")
Аргументы
-
Имя CSS-свойства.
-
value
str | Pattern Добавлено в: v1.18#Значение CSS-свойства.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_id
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным ID DOM-узла.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.get_by_role("textbox")
expect(locator).to_have_id("lastname")
from playwright.async_api import expect
locator = page.get_by_role("textbox")
await expect(locator).to_have_id("lastname")
Аргументы
-
id
str | Pattern Добавлено в: v1.18#ID элемента.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_js_property
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным JavaScript-свойством. Обратите внимание, что это свойство может быть как примитивного типа, так и простым сериализуемым JavaScript-объектом.
Использование
- Sync
- Async
from playwright.sync_api import expect
locator = page.locator(".component")
expect(locator).to_have_js_property("loaded", True)
from playwright.async_api import expect
locator = page.locator(".component")
await expect(locator).to_have_js_property("loaded", True)
Аргументы
-
Имя свойства.
-
Значение свойства.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_role
Добавлено в: v1.44Убеждается, что Locator указывает на элемент с заданной ARIA ролью.
Обратите внимание, что роль сопоставляется как строка, игнорируя иерархию ARIA ролей. Например, утверждение о роли суперкласса "checkbox"
на элементе с ролью подкласса "switch"
завершится неудачей.
Использование
- Sync
- Async
locator = page.get_by_test_id("save-button")
expect(locator).to_have_role("button")
locator = page.get_by_test_id("save-button")
await expect(locator).to_have_role("button")
Аргументы
-
role
"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"#Требуемая aria роль.
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_text
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным текстом. Все вложенные элементы будут учтены при вычислении текстового содержимого элемента. Вы также можете использовать регулярные выражения для значения.
Использование
- Sync
- Async
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, .*"))
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, .*"))
Если вы передаете массив в качестве ожидаемого значения, ожидания следующие:
- Локатор разрешается в список элементов.
- Количество элементов равно количеству ожидаемых значений в массиве.
- Элементы из списка имеют текст, соответствующий ожидаемым значениям массива, один за другим, в порядке.
Например, рассмотрим следующий список:
<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>
Давайте посмотрим, как мы можем использовать утверждение:
- Sync
- Async
from playwright.sync_api import expect
# ✓ Имеет правильные элементы в правильном порядке
expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text 3"])
# ✖ Неправильный порядок
expect(page.locator("ul > li")).to_have_text(["Text 3", "Text 2", "Text 1"])
# ✖ Последний элемент не совпадает
expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text"])
# ✖ Локатор указывает на внешний элемент списка, а не на элементы списка
expect(page.locator("ul")).to_have_text(["Text 1", "Text 2", "Text 3"])
from playwright.async_api import expect
# ✓ Имеет правильные элементы в правильном порядке
await expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text 3"])
# ✖ Неправильный порядок
await expect(page.locator("ul > li")).to_have_text(["Text 3", "Text 2", "Text 1"])
# ✖ Последний элемент не совпадает
await expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text"])
# ✖ Локатор указывает на внешний элемент списка, а не на элементы списка
await expect(page.locator("ul")).to_have_text(["Text 1", "Text 2", "Text 3"])
Аргументы
-
expected
str | Pattern | List[str] | List[Pattern] | List[str | Pattern] Добавлено в: v1.18#Ожидаемая строка или регулярное выражение или список из них.
-
ignore_case
bool (необязательно) Добавлено в: v1.23#Выполнять ли сопоставление без учета регистра. Опция ignore_case имеет приоритет над соответствующим флагом регулярного выражения, если он указан.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
. -
use_inner_text
bool (необязательно) Добавлено в: v1.18#Использовать ли
element.innerText
вместоelement.textContent
при получении текста DOM-узла.
Возвращает
Детали
Когда параметр expected
является строкой, Playwright нормализует пробелы и разрывы строк как в фактическом тексте, так и в ожидаемой строке перед сопоставлением. Когда используется регулярное выражение, фактический текст сопоставляется как есть.
to_have_value
Добавлено в: v1.20Убеждается, что Locator указывает на элемент с заданным значением ввода. Вы также можете использовать регулярные выражения для значения.
Использование
- Sync
- Async
import re
from playwright.sync_api import expect
locator = page.locator("input[type=number]")
expect(locator).to_have_value(re.compile(r"[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]"))
Аргументы
-
value
str | Pattern Добавлено в: v1.18#Ожидаемое значение.
-
timeout
float (необязательно) Добавлено в: v1.18#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_have_values
Добавлено в: 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>
- Sync
- Async
import re
from playwright.sync_api import expect
locator = page.locator("id=favorite-colors")
locator.select_option(["R", "G"])
expect(locator).to_have_values([re.compile(r"R"), re.compile(r"G")])
import re
from playwright.async_api import expect
locator = page.locator("id=favorite-colors")
await locator.select_option(["R", "G"])
await expect(locator).to_have_values([re.compile(r"R"), re.compile(r"G")])
Аргументы
-
values
List[str] | List[Pattern] | List[str | Pattern]#Ожидаемые в данный момент выбранные опции.
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает
to_match_aria_snapshot
Добавлено в: v1.49Утверждает, что целевой элемент соответствует заданному снимку доступности.
Использование
- Sync
- Async
page.goto("https://demo.playwright.dev/todomvc/")
expect(page.locator('body')).to_match_aria_snapshot('''
- heading "todos"
- textbox "What needs to be done?"
''')
await page.goto("https://demo.playwright.dev/todomvc/")
await expect(page.locator('body')).to_match_aria_snapshot('''
- heading "todos"
- textbox "What needs to be done?"
''')
Аргументы
-
timeout
float (необязательно)#Время для повторной попытки утверждения в миллисекундах. По умолчанию
5000
.
Возвращает