LocatorAssertions
LocatorAssertions クラスは、テストで Locator の状態についてアサーションを行うために使用できるアサーションメソッドを提供します。
import { test, expect } from '@playwright/test';
test('status becomes submitted', async ({ page }) => {
// ...
await page.getByRole('button').click();
await expect(page.locator('.status')).toHaveText('Submitted');
});
メソッド
toBeAttached
追加: v1.33Locator が Document または ShadowRoot に接続されている要素を指していることを保証します。
使用法
await expect(page.getByText('Hidden text')).toBeAttached();
引数
options
Object (オプション)
戻り値
toBeChecked
追加: v1.20Locator がチェックされた入力要素を指していることを保証します。
使用法
const locator = page.getByLabel('Subscribe to newsletter');
await expect(locator).toBeChecked();
引数
options
Object (オプション)-
checked
boolean (オプション)追加: v1.18#アサートする状態を提供します。デフォルトでは、入力要素がチェックされていることをアサートします。このオプションは、indeterminate が true に設定されている場合は使用できません。
-
indeterminate
boolean (オプション)追加: v1.50#要素が indeterminate (混合) 状態であることをアサートします。チェックボックスとラジオボタンでのみサポートされています。このオプションは、checked が指定されている場合は true にできません。
-
timeout
number (オプション)追加: v1.18#アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toBeDisabled
追加: v1.20Locator が無効な要素を指していることを保証します。要素は、"disabled" 属性を持っているか、'aria-disabled' を介して無効になっている場合に無効になります。 "disabled" 属性によって無効にできるのは、HTML button
、input
、select
、textarea
、option
、optgroup
などのネイティブコントロール要素のみであることに注意してください。他の要素の "disabled" 属性はブラウザによって無視されます。
使用法
const locator = page.locator('button.submit');
await expect(locator).toBeDisabled();
引数
options
Object (オプション)
戻り値
toBeEditable
追加: v1.20Locator が編集可能な要素を指していることを保証します。
使用法
const locator = page.getByRole('textbox');
await expect(locator).toBeEditable();
引数
options
Object (オプション)
戻り値
toBeEmpty
追加: v1.20Locator が空の編集可能な要素、またはテキストを持たない DOM ノードを指していることを保証します。
使用法
const locator = page.locator('div.warning');
await expect(locator).toBeEmpty();
引数
options
Object (オプション)
戻り値
toBeEnabled
追加: v1.20Locator が有効な要素を指していることを保証します。
使用法
const locator = page.locator('button.submit');
await expect(locator).toBeEnabled();
引数
options
Object (オプション)
戻り値
toBeFocused
追加: v1.20Locator がフォーカスされた DOM ノードを指していることを保証します。
使用法
const locator = page.getByRole('textbox');
await expect(locator).toBeFocused();
引数
options
Object (オプション)
戻り値
toBeHidden
追加: v1.20Locator が DOM ノードに解決されないか、または 非表示 の DOM ノードに解決されることを保証します。
使用法
const locator = page.locator('.my-element');
await expect(locator).toBeHidden();
引数
options
Object (オプション)
戻り値
toBeInViewport
追加: v1.31Locator が Intersection Observer API に従って、ビューポートと交差する要素を指していることを保証します。
使用法
const locator = page.getByRole('button');
// Make sure at least some part of element intersects viewport.
await expect(locator).toBeInViewport();
// Make sure element is fully outside of viewport.
await expect(locator).not.toBeInViewport();
// Make sure that at least half of the element intersects viewport.
await expect(locator).toBeInViewport({ ratio: 0.5 });
引数
options
Object (オプション)
戻り値
toBeVisible
追加: v1.20Locator がアタッチされていて、表示されている DOM ノードを指していることを保証します。
リストから少なくとも 1 つの要素が表示されていることを確認するには、locator.first() を使用してください。
使用法
// A specific element is visible.
await expect(page.getByText('Welcome')).toBeVisible();
// At least one item in the list is visible.
await expect(page.getByTestId('todo-item').first()).toBeVisible();
// At least one of the two elements is visible, possibly both.
await expect(
page.getByRole('button', { name: 'Sign in' })
.or(page.getByRole('button', { name: 'Sign up' }))
.first()
).toBeVisible();
引数
options
Object (オプション)
戻り値
toContainText
追加: v1.20Locator が指定されたテキストを含む要素を指していることを保証します。要素のテキストコンテンツを計算する際には、すべてのネストされた要素が考慮されます。値には正規表現も使用できます。
使用法
const locator = page.locator('.title');
await expect(locator).toContainText('substring');
await expect(locator).toContainText(/\d messages/);
期待値として配列を渡すと、期待される動作は次のとおりです。
- 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
await expect(page.locator('ul > li')).toContainText(['Text 1', 'Text 3']);
// ✖ Wrong order
await expect(page.locator('ul > li')).toContainText(['Text 3', 'Text 2']);
// ✖ No item contains this text
await expect(page.locator('ul > li')).toContainText(['Some 33']);
// ✖ Locator points to the outer list element, not to the list items
await expect(page.locator('ul')).toContainText(['Text 3']);
引数
-
expected
string | RegExp | Array<string | RegExp>追加: v1.18#期待される部分文字列、RegExp、またはそれらのリスト。
-
options
Object (オプション)-
ignoreCase
boolean (オプション)追加: v1.23#大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
timeout
number (オプション)追加: v1.18#アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。 -
useInnerText
boolean (オプション)追加: v1.18#DOM ノードテキストを取得するときに、
element.textContent
の代わりにelement.innerText
を使用するかどうか。
-
戻り値
詳細
expected
パラメーターが文字列の場合、Playwright は、一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用されている場合、実際のテキストはそのまま一致されます。
toHaveAccessibleDescription
追加: v1.44Locator が、指定されたアクセシブルな説明を持つ要素を指していることを保証します。
使用法
const locator = page.getByTestId('save-button');
await expect(locator).toHaveAccessibleDescription('Save results to disk');
引数
-
期待されるアクセシブルな説明。
-
options
Object (オプション)-
大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveAccessibleErrorMessage
追加: v1.50Locator が、指定されたaria errormessage を持つ要素を指していることを保証します。
使用法
const locator = page.getByTestId('username-input');
await expect(locator).toHaveAccessibleErrorMessage('Username is required.');
引数
-
期待されるアクセシブルなエラーメッセージ。
-
options
Object (オプション)-
大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveAccessibleName
追加: v1.44Locator が、指定されたアクセシブルな名前を持つ要素を指していることを保証します。
使用法
const locator = page.getByTestId('save-button');
await expect(locator).toHaveAccessibleName('Save to disk');
引数
-
期待されるアクセシブルな名前。
-
options
Object (オプション)-
大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveAttribute(name, value)
追加: v1.20Locator が指定された属性を持つ要素を指していることを保証します。
使用法
const locator = page.locator('input');
await expect(locator).toHaveAttribute('type', 'text');
引数
-
属性名。
-
value
string | RegExp追加: v1.18#期待される属性値。
-
options
Object (オプション)-
ignoreCase
boolean (オプション)追加: v1.40#大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
timeout
number (オプション)追加: v1.18#アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveAttribute(name)
追加: v1.39Locator が指定された属性を持つ要素を指していることを保証します。このメソッドは属性の存在をアサートします。
const locator = page.locator('input');
// Assert attribute existence.
await expect(locator).toHaveAttribute('disabled');
await expect(locator).not.toHaveAttribute('open');
使用法
await expect(locator).toHaveAttribute(name);
await expect(locator).toHaveAttribute(name, options);
引数
-
属性名。
-
options
Object (オプション)
戻り値
toHaveClass
追加: v1.20Locator が指定された CSS クラスを持つ要素を指していることを保証します。文字列が指定された場合、要素の class
属性と完全に一致する必要があります。個々のクラスに一致させるか、部分一致を実行するには、正規表現を使用してください。
使用法
<div class='middle selected row' id='component'></div>
const locator = page.locator('#component');
await expect(locator).toHaveClass('middle selected row');
await expect(locator).toHaveClass(/(^|\s)selected(\s|$)/);
配列が渡された場合、このメソッドは、配置された要素のリストが、期待されるクラス値の対応するリストと一致することをアサートします。各要素の class 属性は、配列内の対応する文字列または正規表現と照合されます。
const locator = page.locator('list > .component');
await expect(locator).toHaveClass(['component', 'component selected', 'component']);
引数
-
expected
string | RegExp | Array<string | RegExp>追加: v1.18#期待されるクラス、RegExp、またはそれらのリスト。
-
options
Object (オプション)
戻り値
toHaveCount
追加: v1.20Locator が正確な数の DOM ノードに解決されることを保証します。
使用法
const list = page.locator('list > .component');
await expect(list).toHaveCount(3);
引数
-
期待される数。
-
options
Object (オプション)
戻り値
toHaveCSS
追加: v1.20Locator が、指定された計算済みの CSS スタイルを持つ要素に解決されることを保証します。
使用法
const locator = page.getByRole('button');
await expect(locator).toHaveCSS('display', 'flex');
引数
戻り値
toHaveId
追加: v1.20Locator が、指定された DOM ノード ID を持つ要素を指していることを保証します。
使用法
const locator = page.getByRole('textbox');
await expect(locator).toHaveId('lastname');
引数
-
要素 ID。
-
options
Object (オプション)
戻り値
toHaveJSProperty
追加: v1.20Locator が、指定された JavaScript プロパティを持つ要素を指していることを保証します。このプロパティは、プリミティブ型でも、プレーンなシリアライズ可能な JavaScript オブジェクトでもかまいません。
使用法
const locator = page.locator('.component');
await expect(locator).toHaveJSProperty('loaded', true);
引数
-
プロパティ名。
-
プロパティ値。
-
options
Object (オプション)
戻り値
toHaveRole
追加: v1.44Locator が、指定されたARIA ロールを持つ要素を指していることを保証します。
ロールは、ARIA ロール階層を無視して文字列として一致することに注意してください。たとえば、サブクラスロール "switch"
を持つ要素に対して、スーパークラスロール "checkbox"
をアサートすると失敗します。
使用法
const locator = page.getByTestId('save-button');
await expect(locator).toHaveRole('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 ロール。
-
options
Object (オプション)
戻り値
toHaveScreenshot(name)
追加: v1.23この関数は、2 回連続で同じロケータースクリーンショットが得られるまで待機し、最後のスクリーンショットを期待値と比較します。
使用法
const locator = page.getByRole('button');
await expect(locator).toHaveScreenshot('image.png');
スクリーンショットのアサーションは、Playwright テストランナーでのみ機能することに注意してください。
引数
-
スナップショット名。
-
options
Object (オプション)-
animations
"disabled" | "allow" (オプション)#"disabled"
に設定すると、CSS アニメーション、CSS トランジション、および Web Animations が停止します。アニメーションは、その期間に応じて異なる扱いを受けます。- 有限のアニメーションは完了まで早送りされ、
transitionend
イベントが発生します。 - 無限のアニメーションは初期状態にキャンセルされ、スクリーンショット後に再生されます。
デフォルトはアニメーションを無効にする
"disabled"
です。 - 有限のアニメーションは完了まで早送りされ、
-
caret
"hide" | "initial" (オプション)#"hide"
に設定すると、スクリーンショットはテキストキャレットを非表示にします。"initial"
に設定すると、テキストキャレットの動作は変更されません。デフォルトは"hide"
です。 -
スクリーンショットを撮るときにマスクする必要があるロケーターを指定します。マスクされた要素は、そのバウンディングボックスを完全に覆うピンク色のボックス
#FF00FF
(maskColor でカスタマイズ) でオーバーレイされます。マスクは非表示の要素にも適用されます。それを無効にするには、可視要素のみをマッチングを参照してください。 -
maskColor
string (オプション)Added in: v1.35#マスクされた要素のオーバーレイボックスの色を、CSS カラー形式で指定します。デフォルトの色はピンク
#FF00FF
です。 -
maxDiffPixelRatio
number (オプション)#異なるピクセルの、ピクセル総量に対する許容可能な比率。
0
から1
の間です。デフォルトはTestConfig.expect
で設定可能です。デフォルトでは未設定です。 -
異なる可能性のあるピクセルの許容可能な量。デフォルトは
TestConfig.expect
で設定可能です。デフォルトでは未設定です。 -
omitBackground
boolean (オプション)#デフォルトの白い背景を非表示にし、透明度のあるスクリーンショットをキャプチャできるようにします。
jpeg
画像には適用されません。デフォルトはfalse
です。 -
scale
"css" | "device" (オプション)#"css"
に設定すると、スクリーンショットはページ上の CSS ピクセルごとに 1 ピクセルになります。高 DPI デバイスの場合、これによりスクリーンショットが小さく保たれます。"device"
オプションを使用すると、デバイスピクセルごとに 1 ピクセルが生成されるため、高 DPI デバイスのスクリーンショットは 2 倍またはそれ以上に大きくなります。デフォルトは
"css"
です。 -
stylePath
string | Array<string> (オプション)Added in: v1.41#スクリーンショットを作成中に適用するスタイルシートを含むファイル名。これは、動的な要素を非表示にしたり、要素を非表示にしたり、プロパティを変更したりして、再現可能なスクリーンショットを作成するのに役立ちます。このスタイルシートは Shadow DOM を貫通し、内部フレームに適用されます。
-
YIQ 色空間での、比較された画像内の同じピクセル間の許容可能な知覚的な色の違い。ゼロ (厳密) から 1 (緩い) の間です。デフォルトは
TestConfig.expect
で設定可能です。デフォルトは0.2
です。 -
アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveScreenshot(options)
追加: v1.23この関数は、2 回連続で同じロケータースクリーンショットが得られるまで待機し、最後のスクリーンショットを期待値と比較します。
使用法
const locator = page.getByRole('button');
await expect(locator).toHaveScreenshot();
スクリーンショットのアサーションは、Playwright テストランナーでのみ機能することに注意してください。
引数
options
Object (オプション)-
animations
"disabled" | "allow" (オプション)#"disabled"
に設定すると、CSS アニメーション、CSS トランジション、および Web Animations が停止します。アニメーションは、その期間に応じて異なる扱いを受けます。- 有限のアニメーションは完了まで早送りされ、
transitionend
イベントが発生します。 - 無限のアニメーションは初期状態にキャンセルされ、スクリーンショット後に再生されます。
デフォルトはアニメーションを無効にする
"disabled"
です。 - 有限のアニメーションは完了まで早送りされ、
-
caret
"hide" | "initial" (オプション)#"hide"
に設定すると、スクリーンショットはテキストキャレットを非表示にします。"initial"
に設定すると、テキストキャレットの動作は変更されません。デフォルトは"hide"
です。 -
スクリーンショットを撮るときにマスクする必要があるロケーターを指定します。マスクされた要素は、そのバウンディングボックスを完全に覆うピンク色のボックス
#FF00FF
(maskColor でカスタマイズ) でオーバーレイされます。マスクは非表示の要素にも適用されます。それを無効にするには、可視要素のみをマッチングを参照してください。 -
maskColor
string (オプション)Added in: v1.35#マスクされた要素のオーバーレイボックスの色を、CSS カラー形式で指定します。デフォルトの色はピンク
#FF00FF
です。 -
maxDiffPixelRatio
number (オプション)#異なるピクセルの、ピクセル総量に対する許容可能な比率。
0
から1
の間です。デフォルトはTestConfig.expect
で設定可能です。デフォルトでは未設定です。 -
異なる可能性のあるピクセルの許容可能な量。デフォルトは
TestConfig.expect
で設定可能です。デフォルトでは未設定です。 -
omitBackground
boolean (オプション)#デフォルトの白い背景を非表示にし、透明度のあるスクリーンショットをキャプチャできるようにします。
jpeg
画像には適用されません。デフォルトはfalse
です。 -
scale
"css" | "device" (オプション)#"css"
に設定すると、スクリーンショットはページ上の CSS ピクセルごとに 1 ピクセルになります。高 DPI デバイスの場合、これによりスクリーンショットが小さく保たれます。"device"
オプションを使用すると、デバイスピクセルごとに 1 ピクセルが生成されるため、高 DPI デバイスのスクリーンショットは 2 倍またはそれ以上に大きくなります。デフォルトは
"css"
です。 -
stylePath
string | Array<string> (オプション)Added in: v1.41#スクリーンショットを作成中に適用するスタイルシートを含むファイル名。これは、動的な要素を非表示にしたり、要素を非表示にしたり、プロパティを変更したりして、再現可能なスクリーンショットを作成するのに役立ちます。このスタイルシートは Shadow DOM を貫通し、内部フレームに適用されます。
-
YIQ 色空間での、比較された画像内の同じピクセル間の許容可能な知覚的な色の違い。ゼロ (厳密) から 1 (緩い) の間です。デフォルトは
TestConfig.expect
で設定可能です。デフォルトは0.2
です。 -
アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。
-
戻り値
toHaveText
追加: v1.20Locator が指定されたテキストを持つ要素を指していることを保証します。要素のテキストコンテンツを計算する際には、すべてのネストされた要素が考慮されます。値には正規表現も使用できます。
使用法
const locator = page.locator('.title');
await expect(locator).toHaveText(/Welcome, Test User/);
await expect(locator).toHaveText(/Welcome, .*/);
期待値として配列を渡すと、期待される動作は次のとおりです。
- Locator は要素のリストに解決されます。
- 要素の数は、配列内の期待値の数と等しくなります。
- リストの要素は、期待される配列の値と順番に一つずつ一致するテキストを持ちます。
たとえば、次のリストを考えてみましょう。
<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')).toHaveText(['Text 1', 'Text 2', 'Text 3']);
// ✖ Wrong order
await expect(page.locator('ul > li')).toHaveText(['Text 3', 'Text 2', 'Text 1']);
// ✖ Last item does not match
await expect(page.locator('ul > li')).toHaveText(['Text 1', 'Text 2', 'Text']);
// ✖ Locator points to the outer list element, not to the list items
await expect(page.locator('ul')).toHaveText(['Text 1', 'Text 2', 'Text 3']);
引数
-
expected
string | RegExp | Array<string | RegExp>追加: v1.18#期待される文字列または RegExp、またはそれらのリスト。
-
options
Object (オプション)-
ignoreCase
boolean (オプション)追加: v1.23#大文字と小文字を区別しない一致を実行するかどうか。ignoreCase オプションは、指定された場合、対応する正規表現フラグよりも優先されます。
-
timeout
number (オプション)追加: v1.18#アサーションを再試行する時間 (ミリ秒単位)。デフォルトは
TestConfig.expect
のtimeout
です。 -
useInnerText
boolean (オプション)追加: v1.18#DOM ノードテキストを取得するときに、
element.textContent
の代わりにelement.innerText
を使用するかどうか。
-
戻り値
詳細
expected
パラメーターが文字列の場合、Playwright は、一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用されている場合、実際のテキストはそのまま一致されます。
toHaveValue
追加: v1.20Locator が指定された入力値を持つ要素を指していることを保証します。値には正規表現も使用できます。
使用法
const locator = page.locator('input[type=number]');
await expect(locator).toHaveValue(/[0-9]/);
引数
戻り値
toHaveValues
追加: 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>
const locator = page.locator('id=favorite-colors');
await locator.selectOption(['R', 'G']);
await expect(locator).toHaveValues([/R/, /G/]);
引数
戻り値
toMatchAriaSnapshot(expected)
Added in: v1.49ターゲット要素が指定されたアクセシビリティスナップショットと一致することをアサートします。
使用法
await page.goto('https://demo.playwright.dev/todomvc/');
await expect(page.locator('body')).toMatchAriaSnapshot(`
- heading "todos"
- textbox "What needs to be done?"
`);
引数
戻り値
toMatchAriaSnapshot(options)
追加: v1.50ターゲット要素が指定されたアクセシビリティスナップショットと一致することをアサートします。
スナップショットは、構成ファイル内の expect.toMatchAriaSnapshot.pathTemplate
および/または snapshotPathTemplate
プロパティによって構成された場所にある、別の .aria.yml
ファイルに保存されます。
使用法
await expect(page.locator('body')).toMatchAriaSnapshot();
await expect(page.locator('body')).toMatchAriaSnapshot({ name: 'body.aria.yml' });
引数
options
Object (オプション)
戻り値
プロパティ
not
追加: v1.20アサーションが反対の条件をチェックするようにします。たとえば、次のコードは Locator がテキスト "error"
を含まないことをテストします。
await expect(locator).not.toContainText('error');
使用法
expect(locator).not
型