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");
}
}
方法
containsText
新增於:v1.20確保 Locator 指向的元素包含指定的文字。在計算元素的文字內容時,將會考慮所有巢狀元素。您也可以對值使用正規表示式。
用法
assertThat(page.locator(".title")).containsText("substring");
如果您傳遞陣列作為預期值,則預期為
- Locator 解析為元素列表。
- 此列表子集中的元素分別包含來自預期陣列的文字。
- 匹配的元素子集與預期陣列的順序相同。
- 預期陣列中的每個文字值都由列表中的某些元素匹配。
例如,考慮以下列表
<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"});
引數
-
expected
字串 | Pattern | 字串[] | Pattern[]新增於:v1.18#預期的子字串或 RegExp 或其列表。
-
options
LocatorAssertions.ContainsTextOptions
(選用)
傳回
詳細資訊
當 expected
參數是字串時,Playwright 將在匹配之前,正規化實際文字和預期字串中的空白字元和換行符號。當使用正規表示式時,實際文字將按原樣匹配。
hasAccessibleDescription
新增於:v1.44用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleDescription("Save results to disk");
引數
-
預期的無障礙描述。
-
options
LocatorAssertions.HasAccessibleDescriptionOptions
(選用)-
是否執行不區分大小寫的匹配。setIgnoreCase 選項優先於對應的正規表示式旗標(如果指定)。
-
重試斷言的時間(以毫秒為單位)。預設為
5000
。
-
傳回
hasAccessibleErrorMessage
新增於:v1.50確保 Locator 指向的元素具有指定的 aria 錯誤訊息。
用法
Locator locator = page.getByTestId("username-input");
assertThat(locator).hasAccessibleErrorMessage("Username is required.");
引數
-
預期的無障礙錯誤訊息。
-
options
LocatorAssertions.HasAccessibleErrorMessageOptions
(選用)-
是否執行不區分大小寫的匹配。setIgnoreCase 選項優先於對應的正規表示式旗標(如果指定)。
-
重試斷言的時間(以毫秒為單位)。預設為
5000
。
-
傳回
hasAccessibleName
新增於:v1.44用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleName("Save to disk");
引數
-
預期的無障礙名稱。
-
options
LocatorAssertions.HasAccessibleNameOptions
(選用)-
是否執行不區分大小寫的匹配。setIgnoreCase 選項優先於對應的正規表示式旗標(如果指定)。
-
重試斷言的時間(以毫秒為單位)。預設為
5000
。
-
傳回
hasAttribute
新增於:v1.20確保 Locator 指向的元素具有指定的屬性。
用法
assertThat(page.locator("input")).hasAttribute("type", "text");
引數
-
屬性名稱。
-
預期的屬性值。
-
options
LocatorAssertions.HasAttributeOptions
(選用)-
setIgnoreCase
布林值 (選用)新增於:v1.40#是否執行不區分大小寫的匹配。setIgnoreCase 選項優先於對應的正規表示式旗標(如果指定)。
-
setTimeout
雙精度浮點數 (選用)新增於:v1.18#重試斷言的時間(以毫秒為單位)。預設為
5000
。
-
傳回
hasClass
新增於:v1.20確保 Locator 指向的元素具有指定的 CSS 類別。當提供字串時,它必須完全匹配元素的 class
屬性。若要匹配個別類別或執行部分匹配,請使用正規表示式
用法
<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");
當傳遞陣列時,此方法會斷言找到的元素列表是否與預期的類別值列表相符。每個元素的 class 屬性都會與陣列中對應的字串或正規表示式匹配
assertThat(page.locator("list > .component")).hasClass(new String[] {"component", "component selected", "component"});
引數
-
expected
字串 | Pattern | 字串[] | Pattern[]新增於:v1.18#預期的類別或 RegExp 或其列表。
-
options
LocatorAssertions.HasClassOptions
(選用)
傳回
hasCount
新增於:v1.20確保 Locator 解析為精確數量的 DOM 節點。
用法
assertThat(page.locator("list > .component")).hasCount(3);
引數
-
預期的計數。
-
options
LocatorAssertions.HasCountOptions
(選用)
傳回
hasCSS
新增於:v1.20確保 Locator 解析為具有指定計算 CSS 樣式的元素。
用法
assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex");
引數
-
CSS 屬性名稱。
-
CSS 屬性值。
-
options
LocatorAssertions.HasCSSOptions
(選用)
傳回
hasId
新增於:v1.20確保 Locator 指向的元素具有指定的 DOM 節點 ID。
用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).hasId("lastname");
引數
-
元素 ID。
-
options
LocatorAssertions.HasIdOptions
(選用)
傳回
hasJSProperty
新增於:v1.20確保 Locator 指向的元素具有指定的 JavaScript 屬性。請注意,此屬性可以是基本類型,也可以是純粹可序列化的 JavaScript 物件。
用法
assertThat(page.locator("input")).hasJSProperty("loaded", true);
引數
-
屬性名稱。
-
屬性值。
-
options
LocatorAssertions.HasJSPropertyOptions
(選用)
傳回
hasRole
新增於:v1.44確保 Locator 指向的元素具有指定的 ARIA 角色。
請注意,角色是作為字串匹配的,忽略了 ARIA 角色階層。例如,在具有子類別角色 "switch"
的元素上斷言超類別角色 "checkbox"
將會失敗。
用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasRole(AriaRole.BUTTON);
引數
-
role
enum 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
LocatorAssertions.HasRoleOptions
(選用)
傳回
hasText
新增於:v1.20確保 Locator 指向的元素具有指定的文字。在計算元素的文字內容時,將會考慮所有巢狀元素。您也可以對值使用正規表示式。
用法
assertThat(page.locator(".title")).hasText("Welcome, Test User");
assertThat(page.locator(".title")).hasText(Pattern.compile("Welcome, .*"));
如果您傳遞陣列作為預期值,則預期為
- Locator 解析為元素列表。
- 元素的數量等於陣列中預期值的數量。
- 列表中的元素具有與預期陣列值匹配的文字,依序逐一匹配。
例如,考慮以下列表
<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>
讓我們看看如何使用斷言
// ✓ 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"});
引數
-
expected
字串 | Pattern | 字串[] | Pattern[]新增於:v1.18#預期的字串或 RegExp 或其列表。
-
options
LocatorAssertions.HasTextOptions
(選用)
傳回
詳細資訊
當 expected
參數是字串時,Playwright 將在匹配之前,正規化實際文字和預期字串中的空白字元和換行符號。當使用正規表示式時,實際文字將按原樣匹配。
hasValue
新增於:v1.20確保 Locator 指向的元素具有指定的輸入值。您也可以對值使用正規表示式。
用法
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
引數
-
預期的值。
-
options
LocatorAssertions.HasValueOptions
(選用)
傳回
hasValues
新增於:v1.23確保 Locator 指向多選/組合方塊(即具有 multiple
屬性的 select
),並且已選取指定的值。
用法
例如,假設有以下元素
<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") });
引數
-
目前選取的預期選項。
-
options
LocatorAssertions.HasValuesOptions
(選用)
傳回
isAttached
新增於:v1.33確保 Locator 指向的元素已連接到 Document 或 ShadowRoot。
用法
assertThat(page.getByText("Hidden text")).isAttached();
引數
options
LocatorAssertions.IsAttachedOptions
(選用)
傳回
isChecked
新增於:v1.20確保 Locator 指向已勾選的輸入。
用法
assertThat(page.getByLabel("Subscribe to newsletter")).isChecked();
引數
options
LocatorAssertions.IsCheckedOptions
(選用)-
提供要斷言的狀態。預設會斷言輸入是否已勾選。當 setIndeterminate 設定為 true 時,無法使用此選項。
-
setIndeterminate
布林值 (選用)新增於:v1.50#斷言元素是否處於不確定(混合)狀態。僅支援核取方塊和單選按鈕。當提供 setChecked 時,此選項不能為 true。
-
setTimeout
雙精度浮點數 (選用)新增於: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();
引數
options
LocatorAssertions.IsDisabledOptions
(選用)
傳回
isEditable
新增於:v1.20確保 Locator 指向可編輯的元素。
用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isEditable();
引數
options
LocatorAssertions.IsEditableOptions
(選用)
傳回
isEmpty
新增於:v1.20確保 Locator 指向空的、可編輯的元素,或指向沒有文字的 DOM 節點。
用法
assertThat(page.locator("div.warning")).isEmpty();
引數
options
LocatorAssertions.IsEmptyOptions
(選用)
傳回
isEnabled
新增於:v1.20確保 Locator 指向已啟用的元素。
用法
assertThat(page.locator("button.submit")).isEnabled();
引數
options
LocatorAssertions.IsEnabledOptions
(選用)
傳回
isFocused
新增於:v1.20確保 Locator 指向已聚焦的 DOM 節點。
用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isFocused();
引數
options
LocatorAssertions.IsFocusedOptions
(選用)
傳回
isHidden
新增於:v1.20確保 Locator 要么不解析為任何 DOM 節點,要么解析為非可見的節點。
用法
assertThat(page.locator(".my-element")).isHidden();
引數
options
LocatorAssertions.IsHiddenOptions
(選用)
傳回
isInViewport
新增於:v1.31確保 Locator 指向的元素根據 intersection observer API 與可視viewport相交。
用法
Locator locator = page.getByRole(AriaRole.BUTTON);
// Make sure at least some part of element intersects viewport.
assertThat(locator).isInViewport();
// Make sure element is fully outside of viewport.
assertThat(locator).not().isInViewport();
// Make sure that at least half of the element intersects viewport.
assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));
引數
options
LocatorAssertions.IsInViewportOptions
(選用)
傳回
isVisible
新增於:v1.20若要檢查列表中的至少一個元素是否可見,請使用 Locator.first()。
用法
// A specific element is visible.
assertThat(page.getByText("Welcome")).isVisible();
// At least one item in the list is visible.
assertThat(page.getByTestId("todo-item").first()).isVisible();
// At least one of the two elements is visible, possibly both.
assertThat(
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in"))
.or(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up")))
.first()
).isVisible();
引數
options
LocatorAssertions.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()
傳回