定位器断言
这 定位器断言 类提供断言方法,可用于对 定位器 测试中的状态。
- 同步
- 异步
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)
参数
返回值
not_to_be_checked
添加于:v1.20与 expect(locator).to_be_checked() 相反。
用法
expect(locator).not_to_be_checked()
expect(locator).not_to_be_checked(**kwargs)
参数
返回值
not_to_be_disabled
添加于:v1.20与 expect(locator).to_be_disabled() 相反。
用法
expect(locator).not_to_be_disabled()
expect(locator).not_to_be_disabled(**kwargs)
参数
返回值
not_to_be_editable
添加于:v1.20与 expect(locator).to_be_editable() 相反。
用法
expect(locator).not_to_be_editable()
expect(locator).not_to_be_editable(**kwargs)
参数
返回值
not_to_be_empty
添加于:v1.20与 expect(locator).to_be_empty() 相反。
用法
expect(locator).not_to_be_empty()
expect(locator).not_to_be_empty(**kwargs)
参数
返回值
not_to_be_enabled
添加于:v1.20与 expect(locator).to_be_enabled() 相反。
用法
expect(locator).not_to_be_enabled()
expect(locator).not_to_be_enabled(**kwargs)
参数
返回值
not_to_be_focused
添加于:v1.20与 expect(locator).to_be_focused() 相反。
用法
expect(locator).not_to_be_focused()
expect(locator).not_to_be_focused(**kwargs)
参数
返回值
not_to_be_hidden
添加于:v1.20与 expect(locator).to_be_hidden() 相反。
用法
expect(locator).not_to_be_hidden()
expect(locator).not_to_be_hidden(**kwargs)
参数
返回值
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)
参数
返回值
not_to_be_visible
添加于:v1.20与 expect(locator).to_be_visible() 相反。
用法
expect(locator).not_to_be_visible()
expect(locator).not_to_be_visible(**kwargs)
参数
返回值
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#预期子字符串或 RegExp 或其列表。
-
ignore_case
bool (可选)添加于:v1.23#是否执行不区分大小写的匹配。如果指定了 ignore_case 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。 -
use_inner_text
bool (可选)添加于:v1.18#在检索 DOM 节点文本时,是否使用
element.innerText
而不是element.textContent
。
返回值
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 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
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 选项优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
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)
参数
-
属性名称。
-
预期的属性值。
-
ignore_case
bool (可选)添加于: v1.40#是否执行不区分大小写的匹配。 如果指定,ignore_case 选项优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
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#预期的类或正则表达式或它们的列表。
-
以毫秒为单位重试断言的时间。默认为
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)
参数
返回值
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 属性名称。
-
CSS 属性值。
-
以毫秒为单位重试断言的时间。默认为
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)
参数
返回值
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)
参数
-
属性名称。
-
属性值。
-
以毫秒为单位重试断言的时间。默认为
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 角色。
-
以毫秒为单位重试断言的时间。默认为
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 选项优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。 -
use_inner_text
bool (可选)添加于:v1.18#在检索 DOM 节点文本时,是否使用
element.innerText
而不是element.textContent
。
返回值
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)
参数
返回值
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)
参数
返回值
to_be_attached
添加于:v1.33确保 Locator 指向 已连接 到 Document 或 ShadowRoot 的元素。
用法
- 同步
- 异步
expect(page.get_by_text("Hidden text")).to_be_attached()
await expect(page.get_by_text("Hidden text")).to_be_attached()
参数
返回值
to_be_checked
添加于:v1.20确保 定位器 指向一个已选中的输入框。
用法
- 同步
- 异步
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()
参数
返回值
to_be_disabled
添加于:v1.20确保 定位器 指向一个被禁用的元素。如果元素具有 "disabled" 属性或通过 'aria-disabled' 被禁用,则该元素被禁用。注意,只有原生控件元素,例如 HTML button
、input
、select
、textarea
、option
、optgroup
,可以通过设置 "disabled" 属性来禁用。浏览器会忽略其他元素上的 "disabled" 属性。
用法
- 同步
- 异步
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()
参数
返回值
to_be_editable
添加于:v1.20确保 定位器 指向一个可编辑的元素。
用法
- 同步
- 异步
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()
参数
返回值
to_be_empty
添加于:v1.20确保 定位器 指向一个空的可编辑元素,或者指向一个没有文本的 DOM 节点。
用法
- 同步
- 异步
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()
参数
返回值
to_be_enabled
添加于:v1.20确保 定位器 指向一个启用的元素。
用法
- 同步
- 异步
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()
参数
返回值
to_be_focused
添加于:v1.20确保 定位器 指向一个获得焦点的 DOM 节点。
用法
- 同步
- 异步
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()
参数
返回值
to_be_hidden
添加于:v1.20确保 定位器 既不解析为任何 DOM 节点,也不解析为 不可见 的 DOM 节点。
用法
- 同步
- 异步
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()
参数
返回值
to_be_in_viewport
添加于:v1.31确保 定位器 指向一个与视窗相交的元素,根据 交叉观察者 API。
用法
- 同步
- 异步
from playwright.sync_api import expect
locator = page.get_by_role("button")
# Make sure at least some part of element intersects viewport.
expect(locator).to_be_in_viewport()
# Make sure element is fully outside of viewport.
expect(locator).not_to_be_in_viewport()
# Make sure that at least half of the element intersects viewport.
expect(locator).to_be_in_viewport(ratio=0.5)
from playwright.async_api import expect
locator = page.get_by_role("button")
# Make sure at least some part of element intersects viewport.
await expect(locator).to_be_in_viewport()
# Make sure element is fully outside of viewport.
await expect(locator).not_to_be_in_viewport()
# Make sure that at least half of the element intersects viewport.
await expect(locator).to_be_in_viewport(ratio=0.5)
参数
-
元素与视窗相交的最小比率。如果等于
0
,则元素应以任何正比率与视窗相交。默认值为0
。 -
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_be_visible
添加于:v1.20要检查列表中的至少一个元素是否可见,请使用 locator.first。
用法
- 同步
- 异步
# A specific element is visible.
expect(page.get_by_text("Welcome")).to_be_visible()
# At least one item in the list is visible.
expect(page.get_by_test_id("todo-item").first).to_be_visible()
# At least one of the two elements is visible, possibly both.
expect(
page.get_by_role("button", name="Sign in")
.or_(page.get_by_role("button", name="Sign up"))
.first
).to_be_visible()
# A specific element is visible.
await expect(page.get_by_text("Welcome")).to_be_visible()
# At least one item in the list is visible.
await expect(page.get_by_test_id("todo-item").first).to_be_visible()
# At least one of the two elements is visible, possibly both.
await expect(
page.get_by_role("button", name="Sign in")
.or_(page.get_by_role("button", name="Sign up"))
.first
).to_be_visible()
参数
返回值
to_contain_text
添加于:v1.20确保 定位器 指向一个包含给定文本的元素。在计算元素的文本内容时,将考虑所有嵌套元素。您也可以对值使用正则表达式。
用法
- 同步
- 异步
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>
让我们看看如何使用断言
- 同步
- 异步
from playwright.sync_api import expect
# ✓ Contains the right items in the right order
expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"])
# ✖ Wrong order
expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"])
# ✖ No item contains this text
expect(page.locator("ul > li")).to_contain_text(["Some 33"])
# ✖ Locator points to the outer list element, not to the list items
expect(page.locator("ul")).to_contain_text(["Text 3"])
from playwright.async_api import expect
# ✓ Contains the right items in the right order
await expect(page.locator("ul > li")).to_contain_text(["Text 1", "Text 3", "Text 4"])
# ✖ Wrong order
await expect(page.locator("ul > li")).to_contain_text(["Text 3", "Text 2"])
# ✖ No item contains this text
await expect(page.locator("ul > li")).to_contain_text(["Some 33"])
# ✖ Locator points to the outer list element, not to the list items
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 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。 -
use_inner_text
bool (可选)添加于:v1.18#在检索 DOM 节点文本时,是否使用
element.innerText
而不是element.textContent
。
返回值
细节
当 expected
参数为字符串时,Playwright 将在匹配之前对实际文本和预期字符串中的空白和换行符进行规范化。使用正则表达式时,将按原样匹配实际文本。
to_have_accessible_description
添加于:v1.44用法
- 同步
- 异步
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 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_accessible_name
添加于:v1.44用法
- 同步
- 异步
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 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_attribute
添加于:v1.20确保 定位器 指向一个具有给定属性的元素。
用法
- 同步
- 异步
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")
参数
-
属性名称。
-
预期的属性值。
-
ignore_case
bool (可选)添加于: v1.40#是否执行不区分大小写的匹配。如果指定了 ignore_case 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_class
添加于:v1.20确保 定位器 指向一个具有给定 CSS 类别的元素。这需要是一个完全匹配,或者使用一个宽松的正则表达式。
用法
<div class='selected row' id='component'></div>
- 同步
- 异步
from playwright.sync_api import expect
locator = page.locator("#component")
expect(locator).to_have_class(re.compile(r"selected"))
expect(locator).to_have_class("selected row")
from playwright.async_api import expect
locator = page.locator("#component")
await expect(locator).to_have_class(re.compile(r"selected"))
await expect(locator).to_have_class("selected row")
注意,如果传递数组作为预期值,则可以断言整个元素列表
- 同步
- 异步
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#预期的类或正则表达式或它们的列表。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_count
添加于:v1.20确保 定位器 解析为确切数量的 DOM 节点。
用法
- 同步
- 异步
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)
参数
返回值
to_have_css
添加于:v1.20确保 定位器 解析为具有给定计算 CSS 样式的元素。
用法
- 同步
- 异步
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 属性名称。
-
CSS 属性值。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_id
添加于:v1.20确保 定位器 指向具有给定 DOM 节点 ID 的元素。
用法
- 同步
- 异步
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")
参数
返回值
to_have_js_property
添加于:v1.20确保 定位器 指向具有给定 JavaScript 属性的元素。请注意,此属性可以是原始类型,也可以是可序列化的普通 JavaScript 对象。
用法
- 同步
- 异步
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)
参数
-
属性名称。
-
属性值。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_role
添加于:v1.44请注意,角色匹配为字符串,忽略 ARIA 角色层次结构。例如,在具有子类角色 "switch"
的元素上断言超类角色 "checkbox"
将失败。
用法
- 同步
- 异步
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 角色。
-
以毫秒为单位重试断言的时间。默认为
5000
。
返回值
to_have_text
添加于:v1.20确保 定位器 指向具有给定文本的元素。计算元素文本内容时将考虑所有嵌套元素。您也可以对值使用正则表达式。
用法
- 同步
- 异步
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>
让我们看看如何使用断言
- 同步
- 异步
from playwright.sync_api import expect
# ✓ Has the right items in the right order
expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text 3"])
# ✖ Wrong order
expect(page.locator("ul > li")).to_have_text(["Text 3", "Text 2", "Text 1"])
# ✖ Last item does not match
expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text"])
# ✖ Locator points to the outer list element, not to the list items
expect(page.locator("ul")).to_have_text(["Text 1", "Text 2", "Text 3"])
from playwright.async_api import expect
# ✓ Has the right items in the right order
await expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text 3"])
# ✖ Wrong order
await expect(page.locator("ul > li")).to_have_text(["Text 3", "Text 2", "Text 1"])
# ✖ Last item does not match
await expect(page.locator("ul > li")).to_have_text(["Text 1", "Text 2", "Text"])
# ✖ Locator points to the outer list element, not to the list items
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 选项,则优先于相应的正则表达式标志。
-
以毫秒为单位重试断言的时间。默认为
5000
。 -
use_inner_text
bool (可选)添加于:v1.18#在检索 DOM 节点文本时,是否使用
element.innerText
而不是element.textContent
。
返回值
细节
当 expected
参数为字符串时,Playwright 将在匹配之前对实际文本和预期字符串中的空白和换行符进行规范化。使用正则表达式时,将按原样匹配实际文本。
to_have_value
添加于:v1.20确保 定位器 指向具有给定输入值的元素。您也可以对值使用正则表达式。
用法
- 同步
- 异步
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]"))
参数
返回值
to_have_values
添加于:v1.23确保 定位器 指向多选/组合框(即具有 multiple
属性的 select
),并且选择了指定的 value。
用法
例如,给定以下元素
<select id="favorite-colors" multiple>
<option value="R">Red</option>
<option value="G">Green</option>
<option value="B">Blue</option>
</select>
- 同步
- 异步
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")])
参数
返回值