テストの作成
はじめに
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 は、そのためにロケーター 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();
}
}