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.33LocatorがDocumentまたはShadowRootに接続されている要素を指していることを保証します。
使用方法
await Expect(Page.GetByText("Hidden text")).ToBeAttachedAsync();
引数
options
LocatorAssertionsToBeAttachedOptions?
(任意)
戻り値
ToBeCheckedAsync
追加バージョン: v1.20Locatorがチェックされた入力を指していることを保証します。
使用方法
var locator = Page.GetByLabel("Subscribe to newsletter");
await Expect(locator).ToBeCheckedAsync();
引数
options
LocatorAssertionsToBeCheckedOptions?
(任意)-
Checked
bool? (任意)追加バージョン: v1.18#アサートする状態を提供します。デフォルトで入力がチェックされていることをアサートします。このオプションは、Indeterminateがtrueに設定されている場合は使用できません。
-
Indeterminate
bool? (任意)追加バージョン: v1.50#要素が不確定(混合)状態であることをアサートします。チェックボックスとラジオボタンのみがサポートされます。このオプションは、Checkedが提供されている場合はtrueにできません。
-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToBeDisabledAsync
追加バージョン: v1.20Locatorが無効化された要素を指していることを保証します。要素は「disabled」属性を持つ場合、または'aria-disabled'を介して無効化されている場合に無効化されます。HTMLのbutton
、input
、select
、textarea
、option
、optgroup
などのネイティブコントロール要素のみが「disabled」属性を設定することで無効化できることに注意してください。他の要素の「disabled」属性はブラウザによって無視されます。
使用方法
var locator = Page.Locator("button.submit");
await Expect(locator).ToBeDisabledAsync();
引数
options
LocatorAssertionsToBeDisabledOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToBeEditableAsync
追加バージョン: v1.20Locatorが編集可能な要素を指していることを保証します。
使用方法
var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToBeEditableAsync();
引数
options
LocatorAssertionsToBeEditableOptions?
(任意)
戻り値
ToBeEmptyAsync
追加バージョン: v1.20Locatorが空の編集可能な要素、またはテキストを持たないDOMノードを指していることを保証します。
使用方法
var locator = Page.Locator("div.warning");
await Expect(locator).ToBeEmptyAsync();
引数
options
LocatorAssertionsToBeEmptyOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToBeEnabledAsync
追加バージョン: v1.20Locatorが有効化された要素を指していることを保証します。
使用方法
var locator = Page.Locator("button.submit");
await Expect(locator).ToBeEnabledAsync();
引数
options
LocatorAssertionsToBeEnabledOptions?
(任意)
戻り値
ToBeFocusedAsync
追加バージョン: v1.20LocatorがフォーカスされたDOMノードを指していることを保証します。
使用方法
var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToBeFocusedAsync();
引数
options
LocatorAssertionsToBeFocusedOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToBeHiddenAsync
追加バージョン: v1.20LocatorがいずれのDOMノードにも解決しないか、または非表示のDOMノードに解決することを保証します。
使用方法
var locator = Page.Locator(".my-element");
await Expect(locator).ToBeHiddenAsync();
引数
options
LocatorAssertionsToBeHiddenOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToBeInViewportAsync
追加バージョン: v1.31Locatorが、Intersection Observer 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?
(任意)
戻り値
ToBeVisibleAsync
追加バージョン: v1.20Locatorがアタッチされ、表示されているDOMノードを指していることを保証します。
リスト内の少なくとも1つの要素が表示されていることを確認するには、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?
(任意)
戻り値
ToContainClassAsync
追加バージョン: v1.52Locatorが指定されたCSSクラスを持つ要素を指していることを保証します。アサートされた値からのすべてのクラスは、スペースで区切られており、Element.classListに任意の順序で存在する必要があります。
使用方法
<div class='middle selected row' id='component'></div>
var locator = Page.Locator("#component");
await Expect(locator).ToContainClassAsync("middle selected row");
await Expect(locator).ToContainClassAsync("selected");
await Expect(locator).ToContainClassAsync("row middle");
配列が渡された場合、このメソッドは、特定された要素のリストが対応する期待されるクラスリストのリストと一致することをアサートします。各要素のクラス属性は、配列内の対応するクラスと照合されます
<div class='list'></div>
<div class='component inactive'></div>
<div class='component active'></div>
<div class='component inactive'></div>
</div>
var locator = Page.Locator("list > .component");
await Expect(locator).ToContainClassAsync(new string[]{"inactive", "active", "inactive"});
引数
-
expected
string | IEnumerable<string>#期待されるクラス名を含む文字列(スペース区切り)、または複数の要素をアサートするためのそのような文字列のリスト。
-
options
LocatorAssertionsToContainClassOptions?
(任意)-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToContainTextAsync
追加バージョン: v1.20Locatorが指定されたテキストを含む要素を指していることを保証します。要素のテキストコンテンツを計算する際、すべてのネストされた要素が考慮されます。値に正規表現を使用することもできます。
使用方法
var locator = Page.Locator(".title");
await Expect(locator).ToContainTextAsync("substring");
await Expect(locator).ToContainTextAsync(new Regex("\\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")).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
string | Regex | IEnumerable<string> | IEnumerable<Regex>追加バージョン: v1.18#期待される部分文字列または正規表現、またはそれらのリスト。
-
options
LocatorAssertionsToContainTextOptions?
(任意)
戻り値
詳細
expected
パラメーターが文字列の場合、Playwrightは一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用される場合、実際のテキストはそのまま一致します。
ToHaveAccessibleDescriptionAsync
追加バージョン: v1.44Locatorが指定されたアクセシブルな説明を持つ要素を指していることを保証します。
使用方法
var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveAccessibleDescriptionAsync("Save results to disk");
引数
-
期待されるアクセシブルな説明。
-
options
LocatorAssertionsToHaveAccessibleDescriptionOptions?
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。IgnoreCaseオプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveAccessibleErrorMessageAsync
追加バージョン: v1.50Locatorが指定されたaria errormessageを持つ要素を指していることを保証します。
使用方法
var locator = Page.GetByTestId("username-input");
await Expect(locator).ToHaveAccessibleErrorMessageAsync("Username is required.");
引数
-
期待されるアクセシブルなエラーメッセージ。
-
options
LocatorAssertionsToHaveAccessibleErrorMessageOptions?
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。IgnoreCaseオプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveAccessibleNameAsync
追加バージョン: v1.44Locatorが指定されたアクセシブルな名前を持つ要素を指していることを保証します。
使用方法
var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveAccessibleNameAsync("Save to disk");
引数
-
期待されるアクセシブルな名前。
-
options
LocatorAssertionsToHaveAccessibleNameOptions?
(任意)-
大文字と小文字を区別しない一致を実行するかどうか。IgnoreCaseオプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveAttributeAsync
追加バージョン: v1.20Locatorが指定された属性を持つ要素を指していることを保証します。
使用方法
var locator = Page.Locator("input");
await Expect(locator).ToHaveAttributeAsync("type", "text");
引数
-
属性名。
-
value
string | Regex追加バージョン: v1.18#期待される属性値。
-
options
LocatorAssertionsToHaveAttributeOptions?
(任意)-
IgnoreCase
bool? (任意)追加バージョン: v1.40#大文字と小文字を区別しない一致を実行するかどうか。IgnoreCaseオプションは、指定されている場合、対応する正規表現フラグよりも優先されます。
-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveClassAsync
追加バージョン: v1.20Locatorが指定されたCSSクラスを持つ要素を指していることを保証します。文字列が提供された場合、要素のclass
属性に完全に一致する必要があります。個々のクラスを一致させるには、Expect(Locator).ToContainClassAsync()を使用します。
使用方法
<div class='middle selected row' id='component'></div>
var locator = Page.Locator("#component");
await Expect(locator).ToHaveClassAsync("middle selected row");
await Expect(locator).ToHaveClassAsync(new Regex("(^|\\s)selected(\\s|$)"));
配列が渡された場合、このメソッドは、特定された要素のリストが対応する期待されるクラス値のリストと一致することをアサートします。各要素のクラス属性は、配列内の対応する文字列または正規表現と照合されます
var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveClassAsync(new string[]{"component", "component selected", "component"});
引数
-
expected
string | Regex | IEnumerable<string> | IEnumerable<Regex>追加バージョン: v1.18#期待されるクラスまたは正規表現、またはそれらのリスト。
-
options
LocatorAssertionsToHaveClassOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveCountAsync
追加バージョン: v1.20Locatorが正確な数のDOMノードに解決することを保証します。
使用方法
var locator = Page.Locator("list > .component");
await Expect(locator).ToHaveCountAsync(3);
引数
-
期待されるカウント。
-
options
LocatorAssertionsToHaveCountOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveCSSAsync
追加バージョン: v1.20Locatorが指定された計算済みCSSスタイルを持つ要素に解決することを保証します。
使用方法
var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveCSSAsync("display", "flex");
引数
-
CSSプロパティ名。
-
value
string | Regex追加バージョン: v1.18#CSSプロパティ値。
-
options
LocatorAssertionsToHaveCSSOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveIdAsync
追加バージョン: v1.20Locatorが指定されたDOMノードIDを持つ要素を指していることを保証します。
使用方法
var locator = Page.GetByRole(AriaRole.Textbox);
await Expect(locator).ToHaveIdAsync("lastname");
引数
-
id
string | Regex追加バージョン: v1.18#要素ID。
-
options
LocatorAssertionsToHaveIdOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveJSPropertyAsync
追加バージョン: v1.20Locatorが指定されたJavaScriptプロパティを持つ要素を指していることを保証します。このプロパティは、プリミティブ型だけでなく、プレーンなシリアライズ可能なJavaScriptオブジェクトでもよいことに注意してください。
使用方法
var locator = Page.Locator(".component");
await Expect(locator).ToHaveJSPropertyAsync("loaded", true);
引数
-
プロパティ名。
-
value
[object]追加バージョン: v1.18#プロパティ値。
-
options
LocatorAssertionsToHaveJSPropertyOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveRoleAsync
追加バージョン: v1.44Locatorが指定されたARIAロールを持つ要素を指していることを保証します。
ロールは文字列として一致し、ARIAロール階層は無視されることに注意してください。たとえば、サブクラスロール"switch"
を持つ要素に対してスーパークラスロール"checkbox"
をアサートすると失敗します。
使用方法
var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveRoleAsync(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
LocatorAssertionsToHaveRoleOptions?
(任意)-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveTextAsync
追加バージョン: v1.20Locatorが指定されたテキストを持つ要素を指していることを保証します。要素のテキストコンテンツを計算する際、すべてのネストされた要素が考慮されます。値に正規表現を使用することもできます。
使用方法
var locator = Page.Locator(".title");
await Expect(locator).ToHaveTextAsync(new Regex("Welcome, Test User"));
await Expect(locator).ToHaveTextAsync(new Regex("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
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
string | Regex | IEnumerable<string> | IEnumerable<Regex>追加バージョン: v1.18#期待される文字列または正規表現、またはそれらのリスト。
-
options
LocatorAssertionsToHaveTextOptions?
(任意)
戻り値
詳細
expected
パラメーターが文字列の場合、Playwrightは一致する前に、実際のテキストと期待される文字列の両方で空白と改行を正規化します。正規表現が使用される場合、実際のテキストはそのまま一致します。
ToHaveValueAsync
追加バージョン: v1.20Locatorが指定された入力値を持つ要素を指していることを保証します。値に正規表現を使用することもできます。
使用方法
var locator = Page.Locator("input[type=number]");
await Expect(locator).ToHaveValueAsync(new Regex("[0-9]"));
引数
-
value
string | Regex追加バージョン: v1.18#期待される値。
-
options
LocatorAssertionsToHaveValueOptions?
(任意)-
Timeout
[float]? (任意)追加バージョン: v1.18#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
ToHaveValuesAsync
追加バージョン: 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>
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
です。
-
戻り値
ToMatchAriaSnapshotAsync
追加バージョン: v1.49ターゲット要素が指定されたアクセシビリティスナップショットと一致することをアサートします。
使用方法
await page.GotoAsync("https://demo.playwright.dev/todomvc/");
await Expect(page.Locator("body")).ToMatchAriaSnapshotAsync(@"
- heading ""todos""
- textbox ""What needs to be done?""
");
引数
expected
string#options
LocatorAssertionsToMatchAriaSnapshotOptions?
(任意)-
Timeout
[float]? (任意)#アサーションを再試行するミリ秒単位の時間。デフォルトは
5000
です。
-
戻り値
プロパティ
Not
追加バージョン: v1.20アサーションを逆の条件でチェックします。例えば、このコードはLocatorがテキスト"error"
を含まないことをテストします。
await Expect(locator).Not.ToContainTextAsync("error");
使用方法
Expect(Locator).Not
型