テストの記述
はじめに
Playwrightのテストはシンプルで、以下のことを行います。
- アクションを実行し、
- 期待値に対して状態をアサートします。
アクションを実行する前に何かを待つ必要はありません。Playwrightは、各アクションを実行する前に、広範囲にわたるアクション可能性チェックがパスするのを自動的に待機します。
チェックを行う際の競合状態に対処する必要もありません。Playwrightのアサーションは、最終的に満たされる必要がある期待値を記述するように設計されています。
これだけです!これらの設計上の選択により、Playwrightユーザーはテストにおける不安定なタイムアウトや競合するチェックについて一切気にすることなくテストを作成できます。
学習内容
最初のテスト
テストの記述方法を見るには、以下の例をご覧ください。
- MSTest
- NUnit
- xUnit
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
[Parallelizable(ParallelScope.Self)]
[TestFixture]
public class ExampleTest : PageTest
{
[Test]
public async Task HasTitle()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Expect a title "to contain" a substring.
await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
}
[Test]
public async Task GetStartedLink()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Click the get started link.
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
// Expects page to have a heading with the name of Installation.
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Installation" })).ToBeVisibleAsync();
}
}
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PlaywrightTests;
[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task HasTitle()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Expect a title "to contain" a substring.
await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
}
[TestMethod]
public async Task GetStartedLink()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Click the get started link.
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
// Expects page to have a heading with the name of Installation.
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Installation" })).ToBeVisibleAsync();
}
}
using System.Text.RegularExpressions;
using Microsoft.Playwright;
using Microsoft.Playwright.Xunit;
namespace PlaywrightTests;
public class UnitTest1: PageTest
{
[Fact]
public async Task HasTitle()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Expect a title "to contain" a substring.
await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
}
[Fact]
public async Task GetStartedLink()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
// Click the get started link.
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
// Expects page to have a heading with the name of Installation.
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Installation" })).ToBeVisibleAsync();
}
}
アクション
ナビゲーション
ほとんどのテストは、ページをURLにナビゲートすることから始まります。その後、テストはページ要素と対話できるようになります。
await Page.GotoAsync("https://playwright.dokyumento.jp");
Playwrightは、先に進む前にページが読み込み状態に達するまで待機します。Page.GotoAsync() オプションの詳細については、こちらをご覧ください。
対話
アクションの実行は要素の特定から始まります。PlaywrightはこれにLocators APIを使用します。ロケーターは、いつでもページ上の要素を見つける方法を表します。利用可能なさまざまなタイプのロケーターについて詳しく学びましょう。Playwrightは、アクションを実行する前に要素がアクション可能になるまで待機するため、利用可能になるのを待つ必要はありません。
// Create a locator.
var getStarted = Page.GetByRole(AriaRole.Link, new() { Name = "Get started" });
// Click it.
await getStarted.ClickAsync();
ほとんどの場合、1行で記述されます。
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
基本的なアクション
これは最も一般的なPlaywrightアクションのリストです。他にも多くの種類があるので、それらの詳細についてはLocator APIセクションを必ず確認してください。
アクション | 説明 |
---|---|
Locator.CheckAsync() | 入力チェックボックスをチェック |
Locator.ClickAsync() | 要素をクリック |
Locator.UncheckAsync() | 入力チェックボックスのチェックを外す |
Locator.HoverAsync() | 要素の上にマウスをホバー |
Locator.FillAsync() | フォームフィールドにテキストを入力 |
Locator.FocusAsync() | 要素にフォーカス |
Locator.PressAsync() | 単一キーを押す |
Locator.SetInputFilesAsync() | アップロードするファイルを選択 |
Locator.SelectOptionAsync() | ドロップダウンでオプションを選択 |
アサーション
Playwrightは、期待される条件が満たされるまでアサートして待機する、Expectと呼ばれる非同期関数を提供します。
await Expect(Page).ToHaveTitleAsync(new Regex("Playwright"));
ここでは、最も一般的な非同期アサーションのリストを示します。他にも習得すべき多くのアサーションがあります。
アサーション | 説明 |
---|---|
Expect(Locator).ToBeCheckedAsync() | チェックボックスがチェックされている |
Expect(Locator).ToBeEnabledAsync() | コントロールが有効になっている |
Expect(Locator).ToBeVisibleAsync() | 要素が表示されている |
Expect(Locator).ToContainTextAsync() | 要素がテキストを含む |
Expect(Locator).ToHaveAttributeAsync() | 要素が属性を持つ |
Expect(Locator).ToHaveCountAsync() | 要素のリストが指定された長さを持つ |
Expect(Locator).ToHaveTextAsync() | 要素がテキストと一致する |
Expect(Locator).ToHaveValueAsync() | 入力要素が値を持つ |
Expect(Page).ToHaveTitleAsync() | ページがタイトルを持つ |
Expect(Page).ToHaveURLAsync() | ページがURLを持つ |
テストの分離
PlaywrightのNUnitおよびMSTestテストフレームワークの基底クラスは、個別のPage
インスタンスを提供することで、各テストを相互に分離します。ページはブラウザコンテキストによってテスト間で分離されます。これは、まったく新しいブラウザプロファイルに相当し、複数のテストが単一のブラウザで実行される場合でも、すべてのテストが新しい環境を取得します。
- MSTest
- NUnit
- xUnit
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
[Parallelizable(ParallelScope.Self)]
[TestFixture]
public class ExampleTest : PageTest
{
[Test]
public async Task BasicTest()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
}
using System.Threading.Tasks;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PlaywrightTests;
[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task BasicTest()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
}
using Microsoft.Playwright;
using Microsoft.Playwright.Xunit;
namespace PlaywrightTests;
public class UnitTest1: PageTest
{
[Fact]
public async Task BasicTest()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
}
テストフックの使用
- MSTest
- NUnit
- xUnit
SetUp
/TearDown
を使用してテスト環境を準備およびクリーンアップできます。
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
[Parallelizable(ParallelScope.Self)]
[TestFixture]
public class ExampleTest : PageTest
{
[Test]
public async Task MainNavigation()
{
// Assertions use the expect API.
await Expect(Page).ToHaveURLAsync("https://playwright.dokyumento.jp/");
}
[SetUp]
public async Task SetUp()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
}
TestInitialize
/TestCleanup
を使用してテスト環境を準備およびクリーンアップできます。
using System.Threading.Tasks;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PlaywrightTests;
[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task MainNavigation()
{
// Assertions use the expect API.
await Expect(Page).ToHaveURLAsync("https://playwright.dokyumento.jp/");
}
[TestInitialize]
public async Task TestInitialize()
{
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
}
InitializeAsync
/DisposeAsync
を使用してテスト環境を準備およびクリーンアップできます。
using Microsoft.Playwright;
using Microsoft.Playwright.Xunit;
namespace PlaywrightTests;
public class UnitTest1: PageTest
{
[Fact]
public async Task MainNavigation()
{
// Assertions use the expect API.
await Expect(Page).ToHaveURLAsync("https://playwright.dokyumento.jp/");
}
override public async Task InitializeAsync()
{
await base.InitializeAsync();
await Page.GotoAsync("https://playwright.dokyumento.jp");
}
public override async Task DisposeAsync()
{
Console.WriteLine("After each test cleanup");
await base.DisposeAsync();
}
}