跳至主要内容

LocatorAssertions

LocatorAssertions 类提供断言方法,可用于对 Locator 测试中的状态进行断言。

using Microsoft.Playwright;
using Microsoft.Playwright.MSTest;

namespace PlaywrightTests;

[TestClass]
public class ExampleTests : PageTest
{
[TestMethod]
public async Task StatusBecomesSubmitted()
{
// ...
await Page.GetByRole(AriaRole.Button, new() { Name = "Sign In" }).ClickAsync();
await Expect(Page.Locator(".status")).ToHaveTextAsync("Submitted");
}
}

方法

ToBeAttachedAsync

添加于:v1.33 locatorAssertions.ToBeAttachedAsync

确保 Locator 指向一个与 Document 或 ShadowRoot 连接 的元素。

用法

await Expect(Page.GetByText("Hidden text")).ToBeAttachedAsync();

参数

  • options LocatorAssertionsToBeAttachedOptions? (可选)
    • Attached bool? (可选)#

    • Timeout [float]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeCheckedAsync

添加于:v1.20 locatorAssertions.ToBeCheckedAsync

确保 Locator 指向一个已勾选的输入框。

用法

var locator = Page.GetByLabel("Subscribe to newsletter");
await Expect(locator).ToBeCheckedAsync();

参数

  • options LocatorAssertionsToBeCheckedOptions? (可选)
    • Checked bool? (可选)添加于:v1.18#

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeDisabledAsync

添加于:v1.20 locatorAssertions.ToBeDisabledAsync

确保 Locator 指向一个禁用的元素。如果元素具有 "disabled" 属性或通过 'aria-disabled' 被禁用,则该元素被禁用。请注意,只有像 HTML buttoninputselecttextareaoptionoptgroup 这样的原生控件元素可以通过设置 "disabled" 属性来禁用。浏览器忽略其他元素上的 "disabled" 属性。

用法

var locator = Page.Locator("button.submit");
await Expect(locator).ToBeDisabledAsync();

参数

  • options LocatorAssertionsToBeDisabledOptions? (可选)
    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeEditableAsync

添加于:v1.20 locatorAssertions.ToBeEditableAsync

确保 Locator 指向一个可编辑的元素。

用法

var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToBeEditableAsync();

参数

  • options LocatorAssertionsToBeEditableOptions? (可选)
    • Editable bool? (可选)添加于:v1.26#

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeEmptyAsync

添加于:v1.20 locatorAssertions.ToBeEmptyAsync

确保 Locator 指向一个空的、可编辑的元素或一个没有文本的 DOM 节点。

用法

var locator = Page.Locator("div.warning");
await Expect(locator).ToBeEmptyAsync();

参数

  • options LocatorAssertionsToBeEmptyOptions? (可选)
    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeEnabledAsync

添加于:v1.20 locatorAssertions.ToBeEnabledAsync

确保 Locator 指向一个启用的元素。

用法

var locator = Page.Locator("button.submit");
await Expect(locator).toBeEnabledAsync();

参数

  • options LocatorAssertionsToBeEnabledOptions? (可选)
    • Enabled bool? (可选)添加于:v1.26#

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeFocusedAsync

添加于:v1.20 locatorAssertions.ToBeFocusedAsync

确保 Locator 指向一个获得焦点的 DOM 节点。

用法

var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToBeFocusedAsync();

参数

  • options LocatorAssertionsToBeFocusedOptions? (可选)
    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeHiddenAsync

添加于:v1.20 locatorAssertions.ToBeHiddenAsync

确保 Locator 既不解析为任何 DOM 节点,也不解析为 不可见 的 DOM 节点。

用法

var locator = Page.Locator(".my-element");
await Expect(locator).ToBeHiddenAsync();

参数

  • options LocatorAssertionsToBeHiddenOptions? (可选)
    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeInViewportAsync

添加于:v1.31 locatorAssertions.ToBeInViewportAsync

确保 Locator 指向一个与视窗相交的元素,根据 相交观察者 API

用法

var locator = Page.GetByRole(AriaRole.Button);
// Make sure at least some part of element intersects viewport.
await Expect(locator).ToBeInViewportAsync();
// Make sure element is fully outside of viewport.
await Expect(locator).Not.ToBeInViewportAsync();
// Make sure that at least half of the element intersects viewport.
await Expect(locator).ToBeInViewportAsync(new() { Ratio = 0.5 });

参数

  • options LocatorAssertionsToBeInViewportOptions? (可选)
    • Ratio [float]? (可选)#

      元素与视窗相交的最小比例。如果等于 0,则元素应以任何正比例与视窗相交。默认值为 0

    • Timeout [float]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToBeVisibleAsync

添加于:v1.20 locatorAssertions.ToBeVisibleAsync

确保 Locator 指向一个已连接的且 可见 的 DOM 节点。

要检查列表中至少有一个元素是否可见,请使用 Locator.First

用法

// A specific element is visible.
await Expect(Page.GetByText("Welcome")).ToBeVisibleAsync();

// At least one item in the list is visible.
await Expect(Page.GetByTestId("todo-item").First).ToBeVisibleAsync();

// At least one of the two elements is visible, possibly both.
await Expect(
Page.GetByRole(AriaRole.Button, new() { Name = "Sign in" })
.Or(Page.GetByRole(AriaRole.Button, new() { Name = "Sign up" }))
.First
).ToBeVisibleAsync();

参数

  • options LocatorAssertionsToBeVisibleOptions? (可选)
    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

    • Visible bool? (可选)添加于:v1.26#

返回值


ToContainTextAsync

添加于:v1.20 locatorAssertions.ToContainTextAsync

确保 Locator 指向一个包含给定文本的元素。在计算元素的文本内容时,将考虑所有嵌套元素。您也可以使用正则表达式作为值。

用法

var locator = Page.Locator(".title");
await Expect(locator).ToContainTextAsync("substring");
await Expect(locator).ToContainTextAsync(new Regex("\\d messages"));

如果您传递一个数组作为预期值,则期望值是

  1. Locator 解析为一个元素列表。
  2. 来自此列表的 **子集** 的元素分别包含来自预期数组的文本。
  3. 元素的匹配子集与预期数组具有相同的顺序。
  4. 来自预期数组的每个文本值都由列表中的某个元素匹配。

例如,考虑以下列表

<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
await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Text 1", "Text 3", "Text 4"});

// ✖ Wrong order
await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Text 3", "Text 2"});

// ✖ No item contains this text
await Expect(Page.Locator("ul > li")).ToContainTextAsync(new string[] {"Some 33"});

// ✖ Locator points to the outer list element, not to the list items
await Expect(Page.Locator("ul")).ToContainTextAsync(new string[] {"Text 3"});

参数

  • expected 字符串 | 正则表达式 | IEnumerable<字符串> | IEnumerable<正则表达式>添加于:v1.18#

    预期子字符串或正则表达式或这些内容的列表。

  • options LocatorAssertionsToContainTextOptions? (可选)

    • IgnoreCase 布尔值? (可选)添加于:v1.23#

      是否执行不区分大小写的匹配。 如果指定了 IgnoreCase 选项,它将优先于相应的正则表达式标志。

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

    • UseInnerText 布尔值? (可选)添加于:v1.18#

      是否使用 element.innerText 而不是 element.textContent 来检索 DOM 节点文本。

返回值

详情

expected 参数为字符串时,Playwright 将在匹配之前对实际文本和预期字符串中的空格和换行符进行规范化。 当使用正则表达式时,实际文本按原样匹配。


ToHaveAccessibleDescriptionAsync

添加于:v1.44 locatorAssertions.ToHaveAccessibleDescriptionAsync

确保 定位器 指向具有给定 可访问描述 的元素。

用法

var locator = Page.GetByTestId("save-button");
await Expect(locator).toHaveAccessibleDescriptionAsync("Save results to disk");

参数

  • description 字符串 | 正则表达式#

    预期可访问描述。

  • options LocatorAssertionsToHaveAccessibleDescriptionOptions? (可选)

    • IgnoreCase 布尔值? (可选)#

      是否执行不区分大小写的匹配。 如果指定了 IgnoreCase 选项,它将优先于相应的正则表达式标志。

    • Timeout [浮点数]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveAccessibleNameAsync

添加于:v1.44 locatorAssertions.ToHaveAccessibleNameAsync

确保 定位器 指向具有给定 可访问名称 的元素。

用法

var locator = Page.GetByTestId("save-button");
await Expect(locator).toHaveAccessibleNameAsync("Save to disk");

参数

  • name 字符串 | 正则表达式#

    预期可访问名称。

  • options LocatorAssertionsToHaveAccessibleNameOptions? (可选)

    • IgnoreCase 布尔值? (可选)#

      是否执行不区分大小写的匹配。 如果指定了 IgnoreCase 选项,它将优先于相应的正则表达式标志。

    • Timeout [浮点数]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveAttributeAsync

添加于:v1.20 locatorAssertions.ToHaveAttributeAsync

确保 定位器 指向具有给定属性的元素。

用法

var locator = Page.Locator("input");
await Expect(locator).ToHaveAttributeAsync("type", "text");

参数

  • name 字符串添加于:v1.18#

    属性名称。

  • value 字符串 | 正则表达式添加于:v1.18#

    预期属性值。

  • options LocatorAssertionsToHaveAttributeOptions? (可选)

    • IgnoreCase 布尔值? (可选)添加于:v1.40#

      是否执行不区分大小写的匹配。 如果指定了 IgnoreCase 选项,它将优先于相应的正则表达式标志。

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveClassAsync

添加于:v1.20 locatorAssertions.ToHaveClassAsync

确保 定位器 指向具有给定 CSS 类别的元素。 这需要是完全匹配或使用宽松的正则表达式。

用法

<div class='selected row' id='component'></div>
var locator = Page.Locator("#component");
await Expect(locator).ToHaveClassAsync(new Regex("selected"));
await Expect(locator).ToHaveClassAsync("selected row");

注意,如果将数组作为预期值传递,则可以断言整个元素列表

var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveClassAsync(new string[]{"component", "component selected", "component"});

参数

返回值


ToHaveCountAsync

添加于:v1.20 locatorAssertions.ToHaveCountAsync

确保 定位器 解析为确切数量的 DOM 节点。

用法

var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveCountAsync(3);

参数

  • count 整数添加于:v1.18#

    预期计数。

  • options LocatorAssertionsToHaveCountOptions? (可选)

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveCSSAsync

添加于:v1.20 locatorAssertions.ToHaveCSSAsync

确保 定位器 解析为具有给定计算 CSS 样式的元素。

用法

var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveCSSAsync("display", "flex");

参数

  • name 字符串添加于:v1.18#

    CSS 属性名称。

  • value 字符串 | 正则表达式添加于:v1.18#

    CSS 属性值。

  • options LocatorAssertionsToHaveCSSOptions? (可选)

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveIdAsync

添加于:v1.20 locatorAssertions.ToHaveIdAsync

确保 定位器 指向具有给定 DOM 节点 ID 的元素。

用法

var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToHaveIdAsync("lastname");

参数

  • id 字符串 | 正则表达式添加于:v1.18#

    元素 ID。

  • options LocatorAssertionsToHaveIdOptions? (可选)

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveJSPropertyAsync

添加于:v1.20 locatorAssertions.ToHaveJSPropertyAsync

确保 定位器 指向具有给定 JavaScript 属性的元素。 注意,此属性可以是基本类型,也可以是简单的可序列化 JavaScript 对象。

用法

var locator = Page.Locator(".component");
await Expect(locator).ToHaveJSPropertyAsync("loaded", true);

参数

  • name 字符串添加于:v1.18#

    属性名称。

  • value [对象]添加于:v1.18#

    属性值。

  • options LocatorAssertionsToHaveJSPropertyOptions? (可选)

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveRoleAsync

添加于:v1.44 locatorAssertions.ToHaveRoleAsync

确保 定位器 指向具有给定 ARIA 角色 的元素。

注意,角色作为字符串匹配,不考虑 ARIA 角色层次结构。 例如,对具有子类角色 "switch" 的元素断言超类角色 "checkbox" 将失败。

用法

var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveRoleAsync(AriaRole.Button);

参数

  • role 枚举 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 }#

    必需的 ARIA 角色。

  • options LocatorAssertionsToHaveRoleOptions? (可选)

    • Timeout [浮点数]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveTextAsync

添加于:v1.20 locatorAssertions.ToHaveTextAsync

确保 定位器 指向具有给定文本的元素。 计算元素的文本内容时将考虑所有嵌套元素。 您也可以对值使用正则表达式。

用法

var locator = Page.Locator(".title");
await Expect(locator).ToHaveTextAsync(new Regex("Welcome, Test User"));
await Expect(locator).ToHaveTextAsync(new Regex("Welcome, .*"));

如果您传递一个数组作为预期值,则期望值是

  1. Locator 解析为一个元素列表。
  2. 元素的数量等于数组中预期值的數量。
  3. 列表中的元素的文本与预期的数组值一一匹配,按顺序排列。

例如,考虑以下列表

<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>

让我们看看如何使用断言

// ✓ Has the right items in the right order
await Expect(Page.Locator("ul > li")).ToHaveTextAsync(new string[] {"Text 1", "Text 2", "Text 3"});

// ✖ Wrong order
await Expect(Page.Locator("ul > li")).ToHaveTextAsync(new string[] {"Text 3", "Text 2", "Text 1"});

// ✖ Last item does not match
await Expect(Page.Locator("ul > li")).ToHaveTextAsync(new string[] {"Text 1", "Text 2", "Text"});

// ✖ Locator points to the outer list element, not to the list items
await Expect(Page.Locator("ul")).ToHaveTextAsync(new string[] {"Text 1", "Text 2", "Text 3"});

参数

  • expected 字符串 | 正则表达式 | IEnumerable<字符串> | IEnumerable<正则表达式>添加于:v1.18#

    预期字符串或正则表达式或其列表。

  • options LocatorAssertionsToHaveTextOptions? (可选)

    • IgnoreCase 布尔值? (可选)添加于:v1.23#

      是否执行不区分大小写的匹配。 如果指定了 IgnoreCase 选项,则优先于相应的正则表达式标志。

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

    • UseInnerText 布尔值? (可选)添加于:v1.18#

      是否使用 element.innerText 而不是 element.textContent 来检索 DOM 节点文本。

返回值

详情

expected 参数为字符串时,Playwright 将在匹配之前对实际文本和预期字符串中的空格和换行符进行规范化。 当使用正则表达式时,实际文本按原样匹配。


ToHaveValueAsync

添加于:v1.20 locatorAssertions.ToHaveValueAsync

确保 Locator 指向具有给定输入值的元素。 您也可以对值使用正则表达式。

用法

var locator = Page.Locator("input[type=number]");
await Expect(locator).ToHaveValueAsync(new Regex("[0-9]"));

参数

  • value 字符串 | 正则表达式添加于:v1.18#

    预期值。

  • options LocatorAssertionsToHaveValueOptions? (可选)

    • Timeout [float]? (可选)添加于:v1.18#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


ToHaveValuesAsync

添加于:v1.23 locatorAssertions.ToHaveValuesAsync

确保 Locator 指向多选/下拉框(即带有 multiple 属性的 select),并且指定的值已选中。

用法

例如,对于以下元素

<select id="favorite-colors" multiple>
<option value="R">Red</option>
<option value="G">Green</option>
<option value="B">Blue</option>
</select>
var locator = Page.Locator("id=favorite-colors");
await locator.SelectOptionAsync(new string[] { "R", "G" });
await Expect(locator).ToHaveValuesAsync(new Regex[] { new Regex("R"), new Regex("G") });

参数

  • values IEnumerable<string> | IEnumerable<Regex>#

    预期当前选中的选项。

  • options LocatorAssertionsToHaveValuesOptions? (可选)

    • Timeout [float]? (可选)#

      以毫秒为单位重试断言的时间。默认值为 5000

返回值


属性

Not

添加于:v1.20 locatorAssertions.Not

使断言检查相反的条件。 例如,这段代码测试 Locator 是否不包含文本 "error"

await Expect(locator).Not.ToContainTextAsync("error");

用法

Expect(Locator).Not

类型