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.20Locator が、指定されたテキストを含む要素を指していることを保証します。要素のテキストコンテンツを計算する際には、すべての子要素が考慮されます。値には正規表現も使用できます。
使用法
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
String | Pattern | String[] | Pattern[]追加: v1.18#期待される部分文字列または RegExp、またはそれらのリスト。
-
options
LocatorAssertions.ContainsTextOptions
(任意)
戻り値
詳細
expected
パラメーターが文字列の場合、Playwright は、一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用されている場合、実際のテキストはそのまま一致されます。
hasAccessibleDescription
追加: v1.44Locator が、指定された アクセシブルな説明を持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleDescription("Save results to disk");
引数
-
期待されるアクセシブルな説明。
-
options
LocatorAssertions.HasAccessibleDescriptionOptions
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAccessibleErrorMessage
追加: v1.50Locator が、指定された aria errormessage を持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("username-input");
assertThat(locator).hasAccessibleErrorMessage("Username is required.");
引数
-
errorMessage
String | Pattern#期待されるアクセシブルなエラーメッセージ。
-
options
LocatorAssertions.HasAccessibleErrorMessageOptions
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAccessibleName
追加: v1.44Locator が、指定された アクセシブルな名前を持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleName("Save to disk");
引数
-
期待されるアクセシブルな名前。
-
options
LocatorAssertions.HasAccessibleNameOptions
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAttribute
追加: v1.20Locator が、指定された属性を持つ要素を指していることを保証します。
使用法
assertThat(page.locator("input")).hasAttribute("type", "text");
引数
-
属性名。
-
value
String | Pattern追加: v1.18#期待される属性値。
-
options
LocatorAssertions.HasAttributeOptions
(任意)-
setIgnoreCase
boolean (任意)追加: v1.40#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
setTimeout
double (任意)追加: v1.18#アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasClass
追加: v1.20Locator が、指定された 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
String | Pattern | String[] | Pattern[]追加: v1.18#期待されるクラスまたは RegExp、またはそれらのリスト。
-
options
LocatorAssertions.HasClassOptions
(任意)
戻り値
hasCount
追加: v1.20Locator が、DOM ノードの正確な数に解決されることを保証します。
使用法
assertThat(page.locator("list > .component")).hasCount(3);
引数
-
期待される数。
-
options
LocatorAssertions.HasCountOptions
(任意)
戻り値
hasCSS
追加: v1.20Locator が、指定された計算済み CSS スタイルを持つ要素に解決されることを保証します。
使用法
assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex");
引数
-
CSS プロパティ名。
-
value
String | Pattern追加: v1.18#CSS プロパティ値。
-
options
LocatorAssertions.HasCSSOptions
(任意)
戻り値
hasId
追加: v1.20Locator が、指定された DOM ノード ID を持つ要素を指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).hasId("lastname");
引数
-
要素 ID。
-
options
LocatorAssertions.HasIdOptions
(任意)
戻り値
hasJSProperty
追加: v1.20Locator が、指定された JavaScript プロパティを持つ要素を指していることを保証します。このプロパティは、プリミティブ型だけでなく、プレーンなシリアライズ可能な JavaScript オブジェクトにもなり得ることに注意してください。
使用法
assertThat(page.locator("input")).hasJSProperty("loaded", true);
引数
-
プロパティ名。
-
プロパティ値。
-
options
LocatorAssertions.HasJSPropertyOptions
(任意)
戻り値
hasRole
追加: v1.44Locator が、指定された 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.20Locator が、指定されたテキストを持つ要素を指していることを保証します。要素のテキストコンテンツを計算する際には、すべての子要素が考慮されます。値には正規表現も使用できます。
使用法
assertThat(page.locator(".title")).hasText("Welcome, Test User");
assertThat(page.locator(".title")).hasText(Pattern.compile("Welcome, .*"));
期待値として配列を渡した場合、期待されることは次のとおりです。
- Locator は要素のリストに解決されます。
- 要素の数は、配列内の期待される値の数と等しくなります。
- リストからの要素には、期待される配列の値と、順番に 1 つずつ一致するテキストがあります。
たとえば、次のリストを考えてみましょう。
<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
String | Pattern | String[] | Pattern[]追加: v1.18#期待される文字列または RegExp、またはそれらのリスト。
-
options
LocatorAssertions.HasTextOptions
(任意)
戻り値
詳細
expected
パラメーターが文字列の場合、Playwright は、一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用されている場合、実際のテキストはそのまま一致されます。
hasValue
追加: v1.20Locator が、指定された入力値を持つ要素を指していることを保証します。値には正規表現も使用できます。
使用法
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
引数
戻り値
hasValues
追加: v1.23Locator が、マルチセレクト/コンボボックス (つまり、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.33Locator が、Document または ShadowRoot に 接続 されている要素を指していることを保証します。
使用法
assertThat(page.getByText("Hidden text")).isAttached();
引数
options
LocatorAssertions.IsAttachedOptions
(任意)
戻り値
isChecked
追加: v1.20Locator が、チェックされた入力を指していることを保証します。
使用法
assertThat(page.getByLabel("Subscribe to newsletter")).isChecked();
引数
options
LocatorAssertions.IsCheckedOptions
(任意)-
setChecked
boolean (任意)追加: v1.18#アサートする状態を提供します。デフォルトで入力がチェックされることをアサートします。このオプションは、setIndeterminate が true に設定されている場合は使用できません。
-
setIndeterminate
boolean (任意)追加: v1.50#要素が不確定 (混合) 状態であることをアサートします。チェックボックスとラジオボタンでのみサポートされています。setChecked が指定されている場合、このオプションを true にすることはできません。
-
setTimeout
double (任意)追加: v1.18#アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
isDisabled
追加: v1.20Locator が、無効になっている要素を指していることを保証します。要素は、「disabled」属性を持っているか、'aria-disabled' を介して無効になっている場合に無効になります。HTML の button
、input
、select
、textarea
、option
、optgroup
などのネイティブコントロール要素のみが、「disabled」属性を設定することで無効にできることに注意してください。他の要素の「disabled」属性はブラウザによって無視されます。
使用法
assertThat(page.locator("button.submit")).isDisabled();
引数
options
LocatorAssertions.IsDisabledOptions
(任意)
戻り値
isEditable
追加: v1.20Locator が、編集可能な要素を指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isEditable();
引数
options
LocatorAssertions.IsEditableOptions
(任意)
戻り値
isEmpty
追加: v1.20Locator が、空の編集可能な要素、またはテキストを持たない DOM ノードを指していることを保証します。
使用法
assertThat(page.locator("div.warning")).isEmpty();
引数
options
LocatorAssertions.IsEmptyOptions
(任意)
戻り値
isEnabled
追加: v1.20Locator が、有効になっている要素を指していることを保証します。
使用法
assertThat(page.locator("button.submit")).isEnabled();
引数
options
LocatorAssertions.IsEnabledOptions
(任意)
戻り値
isFocused
追加: v1.20Locator が、フォーカスされた DOM ノードを指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isFocused();
引数
options
LocatorAssertions.IsFocusedOptions
(任意)
戻り値
isHidden
追加: v1.20Locator が、DOM ノードに解決されないか、非表示のノードに解決されることを保証します。
使用法
assertThat(page.locator(".my-element")).isHidden();
引数
options
LocatorAssertions.IsHiddenOptions
(任意)
戻り値
isInViewport
追加: v1.31Locator が、Intersection Observer API に従って、ビューポートと交差する要素を指していることを保証します。
使用法
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.20Locator が、アタッチされていて 表示 されている DOM ノードを指していることを保証します。
リストから少なくとも 1 つの要素が表示されていることを確認するには、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()
戻り値