LocatorAssertions
The 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");
}
}
メソッド
containsClass
追加バージョン: v1.52Locatorが指定されたCSSクラスを持つ要素を指していることを保証します。アサートされた値のすべてのクラス(スペースで区切られたもの)は、Element.classListに任意の順序で存在する必要があります。
使用法
<div class='middle selected row' id='component'></div>
assertThat(page.locator("#component")).containsClass("middle selected row");
assertThat(page.locator("#component")).containsClass("selected");
assertThat(page.locator("#component")).containsClass("row middle");
配列が渡された場合、このメソッドは、特定された要素のリストが、期待されるクラスリストの対応するリストと一致することをアサートします。各要素のクラス属性は、配列内の対応するクラスと一致します
<div class='list'></div>
<div class='component inactive'></div>
<div class='component active'></div>
<div class='component inactive'></div>
</div>
assertThat(page.locator("list > .component")).containsClass(new String[] {"inactive", "active", "inactive"});
引数
-
expected
String | List<String>#期待されるクラス名をスペースで区切った文字列、または複数の要素をアサートするためのそのような文字列のリスト。
-
options
LocatorAssertions.ContainsClassOptions
(optional)
戻り値
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#期待される部分文字列、正規表現、またはそれらのリスト。
-
options
LocatorAssertions.ContainsTextOptions
(optional)-
setIgnoreCase
boolean (optional)追加バージョン: v1.23#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
setTimeout
double (optional)追加バージョン: v1.18#アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。 -
setUseInnerText
boolean (optional)追加バージョン: v1.18#DOMノードのテキストを取得する際に、
element.textContent
ではなくelement.innerText
を使用するかどうか。
-
戻り値
詳細
expected
パラメータが文字列の場合、Playwrightは一致する前に実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用される場合、実際のテキストはそのまま一致します。
hasAccessibleDescription
追加バージョン: v1.44Locatorが指定されたアクセシブルな説明を持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleDescription("Save results to disk");
引数
-
期待されるアクセシブルな説明。
-
options
LocatorAssertions.HasAccessibleDescriptionOptions
(optional)-
setIgnoreCase
boolean (optional)#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAccessibleErrorMessage
追加バージョン: v1.50Locatorが指定されたARIAエラーメッセージを持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("username-input");
assertThat(locator).hasAccessibleErrorMessage("Username is required.");
引数
-
errorMessage
String | Pattern#期待されるアクセシブルなエラーメッセージ。
-
options
LocatorAssertions.HasAccessibleErrorMessageOptions
(optional)-
setIgnoreCase
boolean (optional)#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAccessibleName
追加バージョン: v1.44Locatorが指定されたアクセシブルな名前を持つ要素を指していることを保証します。
使用法
Locator locator = page.getByTestId("save-button");
assertThat(locator).hasAccessibleName("Save to disk");
引数
-
期待されるアクセシブルな名前。
-
options
LocatorAssertions.HasAccessibleNameOptions
(optional)-
setIgnoreCase
boolean (optional)#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasAttribute
追加バージョン: v1.20Locatorが指定された属性を持つ要素を指していることを保証します。
使用法
assertThat(page.locator("input")).hasAttribute("type", "text");
引数
-
属性名。
-
value
String | Pattern追加バージョン: v1.18#期待される属性値。
-
options
LocatorAssertions.HasAttributeOptions
(optional)-
setIgnoreCase
boolean (optional)追加バージョン: v1.40#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
setTimeout
double (optional)追加バージョン: v1.18#アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。
-
戻り値
hasClass
追加バージョン: v1.20Locatorが指定されたCSSクラスを持つ要素を指していることを保証します。文字列が提供された場合、要素のclass
属性と完全に一致する必要があります。個々のクラスを一致させるには、assertThat(locator).containsClass()を使用してください。
使用法
<div class='middle selected row' id='component'></div>
assertThat(page.locator("#component")).hasClass("middle selected row");
assertThat(page.locator("#component")).hasClass(Pattern.compile("(^|\\s)selected(\\s|$)"));
配列が渡された場合、このメソッドは、特定された要素のリストが、期待されるクラス値の対応するリストと一致することをアサートします。各要素のクラス属性は、配列内の対応する文字列または正規表現と一致します。
assertThat(page.locator("list > .component")).hasClass(new String[] {"component", "component selected", "component"});
引数
-
expected
String | Pattern | String[] | Pattern[]追加バージョン: v1.18#期待されるクラス、正規表現、またはそれらのリスト。
-
options
LocatorAssertions.HasClassOptions
(optional)
戻り値
hasCount
追加バージョン: v1.20Locatorが正確な数のDOMノードに解決されることを保証します。
使用法
assertThat(page.locator("list > .component")).hasCount(3);
引数
-
期待される数。
-
options
LocatorAssertions.HasCountOptions
(optional)
戻り値
hasCSS
追加バージョン: v1.20Locatorが、指定された計算済みCSSスタイルを持つ要素に解決されることを保証します。
使用法
assertThat(page.getByRole(AriaRole.BUTTON)).hasCSS("display", "flex");
引数
-
CSSプロパティ名。
-
value
String | Pattern追加バージョン: v1.18#CSSプロパティ値。
-
options
LocatorAssertions.HasCSSOptions
(optional)
戻り値
hasId
追加バージョン: v1.20Locatorが指定されたDOMノードIDを持つ要素を指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).hasId("lastname");
引数
戻り値
hasJSProperty
追加バージョン: v1.20Locatorが指定されたJavaScriptプロパティを持つ要素を指していることを保証します。このプロパティは、プリミティブ型である場合も、通常のシリアライズ可能なJavaScriptオブジェクトである場合もあります。
使用法
assertThat(page.locator("input")).hasJSProperty("loaded", true);
引数
-
プロパティ名。
-
プロパティ値。
-
options
LocatorAssertions.HasJSPropertyOptions
(optional)
戻り値
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
(optional)
戻り値
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#期待される文字列、正規表現、またはそれらのリスト。
-
options
LocatorAssertions.HasTextOptions
(optional)-
setIgnoreCase
boolean (optional)追加バージョン: v1.23#大文字と小文字を区別しない一致を実行するかどうか。setIgnoreCaseオプションは、対応する正規表現フラグが指定されている場合、そちらよりも優先されます。
-
setTimeout
double (optional)追加バージョン: v1.18#アサーションを再試行する時間(ミリ秒単位)。デフォルトは
5000
です。 -
setUseInnerText
boolean (optional)追加バージョン: v1.18#DOMノードのテキストを取得する際に、
element.textContent
ではなくelement.innerText
を使用するかどうか。
-
戻り値
詳細
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
(optional)
戻り値
isAttached
追加バージョン: v1.33LocatorがDocumentまたはShadowRootに接続されている要素を指していることを保証します。
使用法
assertThat(page.getByText("Hidden text")).isAttached();
引数
options
LocatorAssertions.IsAttachedOptions
(optional)
戻り値
isChecked
追加バージョン: v1.20Locatorがチェックされた入力要素を指していることを保証します。
使用法
assertThat(page.getByLabel("Subscribe to newsletter")).isChecked();
引数
options
LocatorAssertions.IsCheckedOptions
(optional)-
setChecked
boolean (optional)追加バージョン: v1.18#アサートする状態を提供します。デフォルトでは、入力がチェックされていることをアサートします。このオプションは、setIndeterminateがtrueに設定されている場合は使用できません。
-
setIndeterminate
boolean (optional)追加バージョン: v1.50#要素が不定(混合)状態であることをアサートします。チェックボックスとラジオボタンのみがサポートされます。このオプションは、setCheckedが指定されている場合はtrueにできません。
-
setTimeout
double (optional)追加バージョン: 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
(optional)
戻り値
isEditable
追加バージョン: v1.20Locatorが編集可能な要素を指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isEditable();
引数
options
LocatorAssertions.IsEditableOptions
(optional)
戻り値
isEmpty
追加バージョン: v1.20Locatorが空の編集可能な要素、またはテキストがないDOMノードを指していることを保証します。
使用法
assertThat(page.locator("div.warning")).isEmpty();
引数
options
LocatorAssertions.IsEmptyOptions
(optional)
戻り値
isEnabled
追加バージョン: v1.20Locatorが有効な要素を指していることを保証します。
使用法
assertThat(page.locator("button.submit")).isEnabled();
引数
options
LocatorAssertions.IsEnabledOptions
(optional)
戻り値
isFocused
追加バージョン: v1.20LocatorがフォーカスされたDOMノードを指していることを保証します。
使用法
assertThat(page.getByRole(AriaRole.TEXTBOX)).isFocused();
引数
options
LocatorAssertions.IsFocusedOptions
(optional)
戻り値
isHidden
追加バージョン: v1.20LocatorがどのDOMノードにも解決されないか、または非表示のDOMノードに解決されることを保証します。
使用法
assertThat(page.locator(".my-element")).isHidden();
引数
options
LocatorAssertions.IsHiddenOptions
(optional)
戻り値
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
(optional)
戻り値
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
(optional)
戻り値
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()
戻り値