リリースノート
バージョン1.52
ハイライト
-
要素の個々のクラス名を人間工学的にアサートするための新しいメソッドExpect(Locator).ToContainClassAsync()が追加されました。
await Expect(Page.GetByRole(AriaRole.Listitem, new() { Name = "Ship v1.52" })).ToContainClassAsync("done");
-
Ariaスナップショットに、厳密なマッチングのための
/children
と、リンクのための/url
という2つの新しいプロパティが追加されました。await Expect(locator).ToMatchAriaSnapshotAsync(@"
- list
- /children: equal
- listitem: Feature A
- listitem:
- link ""Feature B"":
- /url: ""https://playwright.dokyumento.jp""
");
その他
- ApiRequest.NewContextAsync()に、リダイレクトの最大数を制御するための新しいオプションMaxRedirectsが追加されました。
- Locator.AriaSnapshotAsync()に、スナップショット内の各要素の参照を生成し、後で要素を特定するために使用できる新しいオプションRefが追加されました。
- HTMLレポーターが、
!@my-tag
、!my-file.spec.ts
、または!p:my-project
によるNOTフィルタリングをサポートするようになりました。
破壊的変更
- Page.Frame()ではベースURLのマッチングがサポートされなくなりました。より便利なAPIであるPage.FrameLocator()への移行を推奨します。
- Page.RouteAsync()などのメソッドにおけるグロブURLパターンは、
?
と[]
をサポートしなくなりました。代わりに正規表現を使用することを推奨します。 - メソッドRoute.ContinueAsync()では、
Cookie
ヘッダーをオーバーライドできなくなりました。Cookie
ヘッダーが提供された場合、それは無視され、クッキーはブラウザのクッキーストアからロードされます。カスタムクッキーを設定するには、BrowserContext.AddCookiesAsync()を使用してください。 - macOS 13は現在非推奨であり、WebKitのアップデートはこれ以上受け取れません。最新のWebKitの改善を引き続き利用するためには、より新しいmacOSバージョンにアップグレードしてください。
ブラウザバージョン
- Chromium 136.0.7103.25
- Mozilla Firefox 137.0
- WebKit 18.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 135
- Microsoft Edge 135
バージョン1.51
ハイライト
-
BrowserContext.StorageStateAsync()の新しいオプションIndexedDBにより、IndexedDBのコンテンツを保存および復元できます。アプリケーションがFirebase認証などの認証トークンを保存するためにIndexedDB APIを使用する場合に便利です。
認証ガイドに従った例を以下に示します
// Save storage state into the file. Make sure to include IndexedDB.
await context.StorageStateAsync(new()
{
Path = "../../../playwright/.auth/state.json",
IndexedDB = true
});
// Create a new context with the saved storage state.
var context = await browser.NewContextAsync(new()
{
StorageStatePath = "../../../playwright/.auth/state.json"
}); -
Locator.Filter()の新しいオプションVisibleにより、表示されている要素のみをマッチングできます。
// Ignore invisible todo items.
var todoItems = Page.GetByTestId("todo-item").Filter(new() { Visible = true });
// Check there are exactly 3 visible ones.
await Expect(todoItems).ToHaveCountAsync(3); -
メソッドPage.EmulateMediaAsync()とBrowser.NewContextAsync()に新しいオプション
Contrast
が追加され、prefers-contrast
メディア機能をエミュレートできます。 -
新しいオプションFailOnStatusCodeにより、APIRequestContextを介して行われるすべてのフェッチリクエストが、2xxおよび3xx以外の応答コードでエラーをスローするようになります。
ブラウザバージョン
- Chromium 134.0.6998.35
- Mozilla Firefox 135.0
- WebKit 18.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 133
- Microsoft Edge 133
バージョン1.50
Xunitのサポート
- Microsoft.Playwright.Xunit経由でxUnit 2.8+をサポートします。詳細については、はじめにガイドを参照してください。
その他
- Locatorが指定されたaria-errormessageを持つ要素を指していることをアサートするために、メソッドExpect(Locator).ToHaveAccessibleErrorMessageAsync()が追加されました。
UIの更新
- Codegenに、ariaスナップショットを生成するための要素選択ボタンが追加されました。
- トレース内のアクションAPI呼び出しに、追加の詳細(押されたキーなど)が表示されるようになりました。
- トレースにおける
canvas
コンテンツの表示はエラーが発生しやすいため、デフォルトで無効になりました。UI設定の「Display canvas content」で有効にすることができます。 - 「Call」および「Network」パネルで、追加の時間情報が表示されるようになりました。
破壊的変更
- Expect(Locator).ToBeEditableAsync()およびLocator.IsEditableAsync()は、ターゲット要素が
<input>
、<select>
、またはその他の編集可能な要素でない場合に例外をスローするようになりました。
ブラウザバージョン
- Chromium 133.0.6943.16
- Mozilla Firefox 134.0
- WebKit 18.2
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 132
- Microsoft Edge 132
バージョン1.49
Ariaスナップショット
新しいアサーションExpect(Locator).ToMatchAriaSnapshotAsync()は、YAMLで表現された期待されるアクセシビリティツリーと比較することでページ構造を検証します。
await page.GotoAsync("https://playwright.dokyumento.jp");
await Expect(page.Locator("body")).ToMatchAriaSnapshotAsync(@"
- banner:
- heading /Playwright enables reliable/ [level=1]
- link ""Get started""
- link ""Star microsoft/playwright on GitHub""
- main:
- img ""Browsers (Chromium, Firefox, WebKit)""
- heading ""Any browser • Any platform • One API""
");
このアサーションは、テストジェネレーターを使用するか、Locator.AriaSnapshotAsync()を呼び出すことで生成できます。
詳細については、ariaスナップショットガイドを参照してください。
トレースグループ
新しいメソッドTracing.GroupAsync()により、トレースビューアーでアクションを視覚的にグループ化できます。
// All actions between GroupAsync and GroupEndAsync
// will be shown in the trace viewer as a group.
await Page.Context.Tracing.GroupAsync("Open Playwright.dev > API");
await Page.GotoAsync("https://playwright.dokyumento.jp/");
await Page.GetByRole(AriaRole.Link, new() { Name = "API" }).ClickAsync();
await Page.Context.Tracing.GroupEndAsync();
破壊的変更: chrome
およびmsedge
チャネルが新しいヘッドレスモードに切り替わります
この変更は、playwright.config.ts
で以下のいずれかのチャネルを使用している場合に影響します。
chrome
、chrome-dev
、chrome-beta
、またはchrome-canary
msedge
、msedge-dev
、msedge-beta
、またはmsedge-canary
Playwright v1.49に更新後、テストスイートを実行してください。引き続きパスする場合は問題ありません。パスしない場合は、スナップショットを更新し、PDFビューアや拡張機能に関するテストコードを一部調整する必要があるかもしれません。詳細については、issue #33566を参照してください。
新しいChromiumヘッドレスを試す
'chromium'
チャネルを使用することで、新しいヘッドレスモードをオプトインできます。Chromeの公式ドキュメントによると
一方、新しいヘッドレスは実際のChromeブラウザであり、より本物で信頼性が高く、より多くの機能を提供します。これにより、高精度のエンドツーエンドWebアプリテストやブラウザ拡張機能テストに適しています。
発生しうる破壊的変更のリストとChromiumヘッドレスの詳細については、issue #33566を参照してください。オプトイン後に問題が見つかった場合は、issueを提出してください。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
<LaunchOptions>
<Channel>chromium</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
dotnet test -- Playwright.BrowserName=chromium Playwright.LaunchOptions.Channel=chromium
その他
- Ubuntu 20.04およびDebian 11でのWebKitのアップデートはこれ以上行われません。OSを新しいバージョンに更新することを推奨します。
- スナップショット内の
<canvas>
要素でプレビューが描画されるようになりました。
ブラウザバージョン
- Chromium 131.0.6778.33
- Mozilla Firefox 132.0
- WebKit 18.2
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 130
- Microsoft Edge 130
バージョン1.48
WebSocketルーティング
新しいメソッドPage.RouteWebSocketAsync()とBrowserContext.RouteWebSocketAsync()により、ページ内で開始されたWebSocket接続をインターセプト、変更、モックすることができます。以下は、"request"
に対して"response"
で応答することでWebSocket通信をモックする簡単な例です。
await page.RouteWebSocketAsync("/ws", ws => {
ws.OnMessage(frame => {
if (frame.Text == "request")
ws.Send("response");
});
});
詳細については、WebSocketRouteを参照してください。
UIの更新
- HTMLレポートに、アノテーションとテストロケーションの新しい「コピー」ボタンが追加されました。
- Route.FulfillAsync()のようなルートメソッド呼び出しは、レポートおよびトレースビューアーに表示されなくなりました。代わりにネットワークタブで、どのネットワークリクエストがルーティングされたかを確認できます。
- ネットワークタブの要求に、新しい「cURLとしてコピー」および「fetchとしてコピー」ボタンが追加されました。
その他
- 新しいメソッドPage.RequestGCAsync()はメモリリークの検出に役立つ場合があります。
- APIRequestContextによって行われたリクエストは、HARに詳細なタイミング情報とセキュリティ情報を記録するようになりました。
ブラウザバージョン
- Chromium 130.0.6723.19
- Mozilla Firefox 130.0
- WebKit 18.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 129
- Microsoft Edge 129
バージョン1.47
ネットワークタブの改善
トレースビューアーのネットワークタブにいくつかの素晴らしい改善が加えられました。
- アセットタイプとURLによるフィルタリング
- クエリ文字列パラメーターのより良い表示
- フォントアセットのプレビュー
その他
mcr.microsoft.com/playwright/dotnet:v1.47.0
は、Ubuntu 24.04 NobleをベースにしたPlaywrightイメージを提供するようになりました。22.04 jammyベースのイメージを使用するには、代わりにmcr.microsoft.com/playwright/dotnet:v1.47.0-jammy
を使用してください。- Playwright Dockerイメージの
:latest
/:focal
/:jammy
タグは公開されなくなりました。安定性と再現性を向上させるために、特定のバージョンにピン留めしてください。 - TLSクライアント証明書は、ファイルパスの代わりにClientCertificates.CertとClientCertificates.Keyをバイト配列として渡すことで、メモリから渡せるようになりました。
- Locator.SelectOptionAsync()におけるNoWaitAfterは非推奨になりました。
- GitHub Actions
macos-13
上でWebKitのWebGLが誤動作するという報告が確認されています。GitHub Actionsをmacos-14
にアップグレードすることを推奨します。
ブラウザバージョン
- Chromium 129.0.6668.29
- Mozilla Firefox 130.0
- WebKit 18.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 128
- Microsoft Edge 128
バージョン1.46
TLSクライアント証明書
PlaywrightはTLSクライアント認証によって指定されたとおり、サーバーが検証できるようにクライアントサイド証明書を提供できるようになりました。
Browser.NewContextAsync()とApiRequest.NewContextAsync()のパラメータとしてクライアント証明書を提供できます。以下のスニペットはhttps://example.com
のクライアント証明書を設定します
var context = await Browser.NewContextAsync(new() {
ClientCertificates = [
new() {
Origin = "https://example.com",
CertPath = "client-certificates/cert.pem",
KeyPath = "client-certificates/key.pem",
}
]
});
トレースビューアーの更新
- テキスト添付ファイルの内容が、添付ファイルペインでインライン表示されるようになりました。
- Route.ContinueAsync()のようなルーティングアクションの表示/非表示を切り替える新しい設定が追加されました。
- ネットワーク詳細タブに、リクエストメソッドとステータスが表示されるようになりました。
- ソースファイルの場所をクリップボードにコピーする新しいボタンが追加されました。
- メタデータペインに
BaseURL
が表示されるようになりました。
その他
- ApiRequestContext.FetchAsync()に新しい
maxRetries
オプションが追加され、ECONNRESET
ネットワークエラー時に再試行します。
ブラウザバージョン
- Chromium 128.0.6613.18
- Mozilla Firefox 128.0
- WebKit 18.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 127
- Microsoft Edge 127
バージョン1.45
クロック
新しいClock APIを利用することで、時間関連の動作を検証するためにテスト内で時間を操作・制御できます。このAPIは、以下を含む多くの一般的なシナリオに対応しています。
- 事前定義された時間でのテスト;
- 一貫した時間とタイマーの維持;
- 非アクティブ状態の監視;
- 手動での時間経過。
// Initialize clock with some time before the test time and let the page load naturally.
// `Date.now` will progress as the timers fire.
await Page.Clock.InstallAsync(new()
{
TimeDate = new DateTime(2024, 2, 2, 8, 0, 0)
});
await Page.GotoAsync("https://:3333");
// Pretend that the user closed the laptop lid and opened it again at 10am.
// Pause the time once reached that point.
await Page.Clock.PauseAtAsync(new DateTime(2024, 2, 2, 10, 0, 0));
// Assert the page state.
await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:00:00 AM");
// Close the laptop lid again and open it at 10:30am.
await Page.Clock.FastForwardAsync("30:00");
await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:30:00 AM");
詳細については、クロックガイドを参照してください。
その他
-
メソッドLocator.SetInputFilesAsync()が、
<input type=file webkitdirectory>
要素のディレクトリアップロードをサポートするようになりました。await page.GetByLabel("Upload directory").SetInputFilesAsync("mydir");
-
Locator.ClickAsync()やLocator.PressAsync()など、複数のメソッドが
ControlOrMeta
修飾キーをサポートするようになりました。このキーはmacOSではMeta
に、WindowsとLinuxではControl
にマッピングされます。// Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation.
await page.Keyboard.PressAsync("ControlOrMeta+S"); -
ApiRequest.NewContextAsync()に新しいプロパティ
httpCredentials.send
が追加され、Authorization
ヘッダーを常に送信するか、401 Unauthorized
に応答してのみ送信するかを選択できるようになりました。 -
PlaywrightがUbuntu 24.04でChromium、Firefox、WebKitをサポートするようになりました。
-
v1.45はmacOS 12 MontereyのWebKitアップデートを受け取る最後のリリースです。最新のWebKitを使い続けるためにmacOSを更新してください。
ブラウザバージョン
- Chromium 127.0.6533.5
- Mozilla Firefox 127.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 126
- Microsoft Edge 126
バージョン1.44
新しいAPI
アクセシビリティアサーション
-
Expect(Locator).ToHaveAccessibleNameAsync()は、要素が指定されたアクセシブルネームを持っているかチェックします。
var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveAccessibleNameAsync("Submit"); -
Expect(Locator).ToHaveAccessibleDescriptionAsync()は、要素が指定されたアクセシブルディスクリプションを持っているかチェックします。
var locator = Page.GetByRole(AriaRole.Button);
await Expect(locator).ToHaveAccessibleDescriptionAsync("Upload a photo"); -
Expect(Locator).ToHaveRoleAsync()は、要素が指定されたARIAロールを持っているかチェックします。
var locator = Page.GetByTestId("save-button");
await Expect(locator).ToHaveRoleAsync(AriaRole.Button);
ロケーターハンドラー
- Page.AddLocatorHandlerAsync()で追加されたハンドラーを実行した後、Playwrightはハンドラーをトリガーしたオーバーレイがもはや表示されなくなるまで待機するようになりました。この動作は、新しい
NoWaitAfter
オプションでオプトアウトできます。 - Page.AddLocatorHandlerAsync()で新しい
Times
オプションを使用して、ハンドラーが実行される最大回数を指定できるようになりました。 - Page.AddLocatorHandlerAsync()のハンドラーが、引数としてロケーターを受け入れるようになりました。
- 以前追加されたロケーターハンドラーを削除するための新しいPage.RemoveLocatorHandlerAsync()メソッド。
var locator = Page.GetByText("This interstitial covers the button");
await Page.AddLocatorHandlerAsync(locator, async (overlay) =>
{
await overlay.Locator("#close").ClickAsync();
}, new() { Times = 3, NoWaitAfter = true });
// Run your tests that can be interrupted by the overlay.
// ...
await Page.RemoveLocatorHandlerAsync(locator);
その他のオプション
-
新しいメソッドFormData.Append()は、
APIRequestContext.FetchAsync()
のMultipart
オプションで同じ名前の繰り返しフィールドを指定できます。var formData = Context.APIRequest.CreateFormData();
formData.Append("file", new FilePayload()
{
Name = "f1.js",
MimeType = "text/javascript",
Buffer = System.Text.Encoding.UTF8.GetBytes("var x = 2024;")
});
formData.Append("file", new FilePayload()
{
Name = "f2.txt",
MimeType = "text/plain",
Buffer = System.Text.Encoding.UTF8.GetBytes("hello")
});
var response = await Context.APIRequest.PostAsync("https://example.com/uploadFiles", new() { Multipart = formData }); -
Expect(Page).ToHaveURLAsync()が
IgnoreCase
オプションをサポートするようになりました。
ブラウザバージョン
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 124
- Microsoft Edge 124
バージョン1.43
新しいAPI
-
メソッドBrowserContext.ClearCookiesAsync()が、一部のクッキーのみを削除するためのフィルターをサポートするようになりました。
// Clear all cookies.
await Context.ClearCookiesAsync();
// New: clear cookies with a particular name.
await Context.ClearCookiesAsync(new() { Name = "session-id" });
// New: clear cookies for a particular domain.
await Context.ClearCookiesAsync(new() { Domain = "my-origin.com" }); -
新しいプロパティLocator.ContentFrameは、LocatorオブジェクトをFrameLocatorに変換します。これは、どこかで取得したLocatorオブジェクトがあり、後でフレーム内のコンテンツと対話したい場合に便利です。
var locator = Page.Locator("iframe[name='embedded']");
// ...
var frameLocator = locator.ContentFrame;
await frameLocator.GetByRole(AriaRole.Button).ClickAsync(); -
新しいプロパティFrameLocator.Ownerは、FrameLocatorオブジェクトをLocatorに変換します。これは、どこかで取得したFrameLocatorオブジェクトがあり、後で
iframe
要素と対話したい場合に便利です。var frameLocator = page.FrameLocator("iframe[name='embedded']");
// ...
var locator = frameLocator.Owner;
await Expect(locator).ToBeVisibleAsync();
ブラウザバージョン
- Chromium 124.0.6367.8
- Mozilla Firefox 124.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 123
- Microsoft Edge 123
バージョン1.42
新しいロケーターハンドラー
新しいメソッドPage.AddLocatorHandlerAsync()は、指定された要素が表示され、Playwrightアクションをブロックする可能性がある場合に呼び出されるコールバックを登録します。このコールバックはオーバーレイを削除できます。以下は、クッキーダイアログが表示されたときにそれを閉じる例です。
// Setup the handler.
await Page.AddLocatorHandlerAsync(
Page.GetByRole(AriaRole.Heading, new() { Name = "Hej! You are in control of your cookies." }),
async () =>
{
await Page.GetByRole(AriaRole.Button, new() { Name = "Accept all" }).ClickAsync();
});
// Write the test as usual.
await Page.GotoAsync("https://www.ikea.com/");
await Page.GetByRole(AriaRole.Link, new() { Name = "Collection of blue and white" }).ClickAsync();
await Expect(Page.GetByRole(AriaRole.Heading, new() { Name = "Light and easy" })).ToBeVisibleAsync();
新しいAPI
- Page.PdfAsync()が、新しいオプションTaggedとOutlineを受け入れるようになりました。
アナウンス
- ⚠️ Ubuntu 18はサポートされなくなりました。
ブラウザバージョン
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 122
- Microsoft Edge 123
バージョン1.41
新しいAPI
- 新しいメソッドPage.UnrouteAllAsync()は、Page.RouteAsync()およびPage.RouteFromHARAsync()によって登録されたすべてのルートを削除します。オプションで、進行中のルートが終了するのを待機したり、それらからのエラーを無視したりできます。
- 新しいメソッドBrowserContext.UnrouteAllAsync()は、BrowserContext.RouteAsync()およびBrowserContext.RouteFromHARAsync()によって登録されたすべてのルートを削除します。オプションで、進行中のルートが終了するのを待機したり、それらからのエラーを無視したりできます。
- 新しいオプションStyleがPage.ScreenshotAsync()に、StyleがLocator.ScreenshotAsync()に追加され、スクリーンショットを撮る前にページにカスタムCSSを追加できるようになりました。
ブラウザバージョン
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 120
- Microsoft Edge 120
バージョン1.40
テストジェネレーターの更新
アサーションを生成するための新しいツール
- 「Assert visibility」ツールはExpect(Locator).ToBeVisibleAsync()を生成します。
- 「Assert value」ツールはExpect(Locator).ToHaveValueAsync()を生成します。
- 「Assert text」ツールはExpect(Locator).ToContainTextAsync()を生成します。
アサーションを含む生成されたテストの例を以下に示します
await Page.GotoAsync("https://playwright.dokyumento.jp/");
await Page.GetByRole(AriaRole.Link, new() { Name = "Get started" }).ClickAsync();
await Expect(Page.GetByLabel("Breadcrumbs").GetByRole(AriaRole.List)).ToContainTextAsync("Installation");
await Expect(Page.GetByLabel("Search")).ToBeVisibleAsync();
await Page.GetByLabel("Search").ClickAsync();
await Page.GetByPlaceholder("Search docs").FillAsync("locator");
await Expect(Page.GetByPlaceholder("Search docs")).ToHaveValueAsync("locator");
新しいAPI
- Page.CloseAsync()のオプションReason、BrowserContext.CloseAsync()のオプションReason、およびBrowser.CloseAsync()のオプションReason。クローズによって中断されたすべての操作について、クローズ理由が報告されます。
- BrowserType.LaunchPersistentContextAsync()のオプションFirefoxUserPrefs。
その他の変更
- メソッドDownload.PathAsync()とDownload.CreateReadStreamAsync()は、ダウンロードに失敗したりキャンセルされた場合にエラーをスローするようになりました。
- Playwrightのdockerイメージに.NET 8 (新しいLTS) が含まれるようになりました。
ブラウザバージョン
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 119
- Microsoft Edge 119
バージョン1.39
常緑ブラウザのアップデート。
ブラウザバージョン
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 118
- Microsoft Edge 118
バージョン1.38
トレースビューアーの更新
- 時間範囲のズーム。
- ネットワークパネルの再設計。
新しいAPI
非推奨
- 以下のメソッドは非推奨となりました: Page.TypeAsync(), Frame.TypeAsync(), Locator.TypeAsync(), およびElementHandle.TypeAsync()。代わりに、はるかに高速なLocator.FillAsync()を使用してください。ページに特別なキーボード処理があり、キーを1つずつ押す必要がある場合にのみLocator.PressSequentiallyAsync()を使用してください。
ブラウザバージョン
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 116
- Microsoft Edge 116
バージョン1.37
📚 Debian 12 Bookwormのサポート
PlaywrightはChromium、Firefox、WebKitにおいて、x86_64とarm64の両方でDebian 12 Bookwormをサポートするようになりました。何か問題が発生した場合はお知らせください!
Linuxのサポート状況は以下の通りです
Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 12 | |
---|---|---|---|---|
Chromium | ✅ | ✅ | ✅ | ✅ |
WebKit | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
ブラウザバージョン
- Chromium 116.0.5845.82
- Mozilla Firefox 115.0
- WebKit 17.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 115
- Microsoft Edge 115
バージョン1.36
🏝️ 夏季メンテナンスリリース。
ブラウザバージョン
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 114
- Microsoft Edge 114
バージョン1.35
ハイライト
-
メソッドPage.ScreenshotAsync()とLocator.ScreenshotAsync()に、デフォルトのマスキング色を変更するための新しいオプション
MaskColor
が追加されました。 -
ブラウザバイナリをアンインストールするための新しい
uninstall
CLIコマンド$ pwsh bin/Debug/netX/playwright.ps1 uninstall # remove browsers installed by this installation
$ pwsh bin/Debug/netX/playwright.ps1 uninstall --all # remove all ever-install Playwright browsers
ブラウザバージョン
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 114
- Microsoft Edge 114
バージョン1.34
ハイライト
-
両方のロケーターに一致するロケーターを作成するための新しいLocator.And()。
var button = page.GetByRole(AriaRole.BUTTON).And(page.GetByTitle("Subscribe"));
-
指定されたブラウザコンテキストからのすべてのダイアログとコンソールメッセージを購読するための新しいイベントBrowserContext.ConsoleとBrowserContext.Dialog。イベントソースを特定するには、新しいメソッドConsoleMessage.PageとDialog.Pageを使用してください。
ブラウザバージョン
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 113
- Microsoft Edge 113
バージョン1.33
ロケーターの更新
-
2つのロケーターのいずれかに一致するロケーターを作成するには、Locator.Or()を使用します。「新しいメール」ボタンをクリックしたいが、セキュリティ設定ダイアログが代わりに表示されることがあるというシナリオを考えてみてください。この場合、「新しいメール」ボタンまたはダイアログのいずれかを待ち、それに応じて行動することができます。
var newEmail = Page.GetByRole(AriaRole.Button, new() { Name = "New email" });
var dialog = Page.GetByText("Confirm security settings");
await Expect(newEmail.Or(dialog)).ToBeVisibleAsync();
if (await dialog.IsVisibleAsync())
await Page.GetByRole(AriaRole.Button, new() { Name = "Dismiss" }).ClickAsync();
await newEmail.ClickAsync(); -
Locator.Filter()で新しいオプションHasNotとHasNotText|HasNotTextRegexを使用して、特定の条件に**一致しない**要素を検索できます。
var rowLocator = Page.Locator("tr");
await rowLocator
.Filter(new() { HasNotText = "text in column 1" })
.Filter(new() { HasNot = Page.GetByRole(AriaRole.Button, new() { Name = "column 2 button" })})
.ScreenshotAsync(); -
新しいWebファーストアサーションExpect(Locator).ToBeAttachedAsync()を使用して、要素がページのDOMに存在することを確認します。Expect(Locator).ToBeVisibleAsync()とは混同しないでください。後者は要素が添付されていてかつ表示されていることを確認します。
新しいAPI
- Locator.Or()
- Locator.Filter()の新しいオプションHasNot
- Locator.Filter()の新しいオプションHasNotText|HasNotTextRegex
- Expect(Locator).ToBeAttachedAsync()
- Route.FetchAsync()の新しいオプションTimeout
⚠️ 破壊的変更
mcr.microsoft.com/playwright/dotnet:v1.33.0
は、Ubuntu JammyをベースにしたPlaywrightイメージを提供するようになりました。focalベースのイメージを使用するには、代わりにmcr.microsoft.com/playwright/dotnet:v1.33.0-focal
を使用してください。
ブラウザバージョン
- Chromium 113.0.5672.53
- Mozilla Firefox 112.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 112
- Microsoft Edge 112
バージョン1.32
新しいAPI
- Page.RouteFromHARAsync()とBrowserContext.RouteFromHARAsync()に新しいオプションUpdateModeとUpdateContentが追加されました。
- 既存のロケーターオブジェクトを連結する。詳細についてはロケーターのドキュメントを参照してください。
- メソッドTracing.StartChunkAsync()に新しいオプションNameが追加されました。
ブラウザバージョン
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 111
- Microsoft Edge 111
バージョン1.31
新しいAPI
-
新しいアサーションExpect(Locator).ToBeInViewportAsync()は、ロケーターが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 }); -
新しいメソッドBrowserContext.NewCDPSessionAsync()とBrowser.NewBrowserCDPSessionAsync()は、それぞれページとブラウザのChrome DevTools Protocolセッションを作成します。
その他
- トレースビューアーのDOMスナップショットが、別のウィンドウで開けるようになりました。
- メソッドRoute.FetchAsync()に新しいオプションMaxRedirectsが追加されました。
- PlaywrightがDebian 11 arm64をサポートするようになりました。
- 公式のdockerイメージにNode 16の代わりにNode 18が含まれるようになりました。
ブラウザバージョン
- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 110
- Microsoft Edge 110
バージョン1.30
ブラウザバージョン
- Chromium 110.0.5481.38
- Mozilla Firefox 108.0.2
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 109
- Microsoft Edge 109
バージョン1.29
新しいAPI
-
新しいメソッドRoute.FetchAsync()と、Route.FulfillAsync()の新しいオプション
Json
await Page.RouteAsync("**/api/settings", async route => {
// Fetch original settings.
var response = await route.FetchAsync();
// Force settings theme to a predefined value.
var json = await response.JsonAsync<MyDataType>();
json.Theme = "Solarized";
// Fulfill with modified data.
await route.FulfillAsync(new() {
Json = json
});
}); -
すべてのマッチング要素を反復処理するための新しいメソッドLocator.AllAsync()
// Check all checkboxes!
var checkboxes = Page.GetByRole(AriaRole.Checkbox);
foreach (var checkbox in await checkboxes.AllAsync())
await checkbox.CheckAsync(); -
Locator.SelectOptionAsync()が値またはラベルでマッチングするようになりました。
<select multiple>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>await element.SelectOptionAsync("Red");
ブラウザバージョン
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 108
- Microsoft Edge 108
バージョン1.28
Playwrightツール
- CodeGenでのライブロケーター。「Explore」ツールを使用して、ページ上の任意の要素のロケーターを生成します。
新しいAPI
ブラウザバージョン
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 107
- Microsoft Edge 107
バージョン1.27
ロケーター
これらの新しいAPIにより、ロケーターの記述が楽しくなりました。
- テキストコンテンツで要素を特定するPage.GetByText()。
- ARIAロール、ARIA属性、およびアクセシブルネームで要素を特定するPage.GetByRole()。
- 関連するラベルのテキストでフォームコントロールを特定するPage.GetByLabel()。
data-testid
属性に基づいて要素を特定するPage.GetByTestId()(他の属性を設定可能)。- プレースホルダーで入力を特定するPage.GetByPlaceholder()。
- テキスト代替で要素(通常は画像)を特定するPage.GetByAltText()。
- タイトルで要素を特定するPage.GetByTitle()。
await page.GetByLabel("User Name").FillAsync("John");
await page.GetByLabel("Password").FillAsync("secret-password");
await page.GetByRole(AriaRole.Button, new() { NameString = "Sign in" }).ClickAsync();
await Expect(Page.GetByText("Welcome, John!")).ToBeVisibleAsync();
同じメソッドは、Locator、FrameLocator、Frameクラスでも利用できます。
その他のハイライト
- v1.25で発表されたとおり、Ubuntu 18は2022年12月以降サポートされません。それに加えて、次期PlaywrightリリースからUbuntu 18でのWebKitアップデートは提供されません。
動作の変更
-
空の値を持つExpect(Locator).ToHaveAttributeAsync()は、属性の欠落と一致しなくなりました。例えば、以下のスニペットは、
button
がdisabled
属性を**持たない**場合に成功します。await Expect(Page.GetByRole(AriaRole.Button)).ToHaveAttributeAsync("disabled", "");
ブラウザバージョン
- Chromium 107.0.5304.18
- Mozilla Firefox 105.0.1
- WebKit 16.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 106
- Microsoft Edge 106
バージョン1.26
アサーション
- Expect(Locator).ToBeEnabledAsync()に新しいオプション
Enabled
が追加されました。 - Expect(Locator).ToHaveTextAsync()がオープンシャドウルートを透過するようになりました。
- Expect(Locator).ToBeEditableAsync()に新しいオプション
Editable
が追加されました。 - Expect(Locator).ToBeVisibleAsync()に新しいオプション
Visible
が追加されました。 - Expect(Response).ToBeOKAsync()が利用可能になりました。
その他のハイライト
- ApiRequestContext.GetAsync()などに、リダイレクト回数を制限するための新しいオプション
MaxRedirects
が追加されました。 - CodegenがMSTestとNUnitフレームワークをサポートするようになりました。
- ASP .NETがサポートされるようになりました。
動作変更
Playwrightの多くのAPIはすでにWaitUntil: WaitUntilState.DOMContentLoaded
オプションをサポートしています。例えば
await Page.GotoAsync("https://playwright.dokyumento.jp", new() { WaitUntil = WaitUntilState.DOMContentLoaded });
1.26以前は、これはすべてのiframeがDOMContentLoaded
イベントを発火するのを待機していました。
Web仕様に合わせるため、WaitUntilState.DOMContentLoaded
値はターゲットフレームが'DOMContentLoaded'
イベントを発火するのを待つだけになりました。すべてのiframeを待つにはWaitUntil: WaitUntilState.Load
を使用してください。
ブラウザバージョン
- Chromium 106.0.5249.30
- Mozilla Firefox 104.0
- WebKit 16.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 105
- Microsoft Edge 105
バージョン1.25
新しい.runsettingsファイルのサポート
Microsoft.Playwright.NUnit
とMicrosoft.Playwright.MSTest
は、エンドツーエンドテストの実行時に.runsettings
ファイルとCLI経由で渡された設定を考慮するようになりました。サポートされる設定の完全なリストについては、ドキュメントを参照してください。
以下が機能するようになりました
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Playwright -->
<Playwright>
<BrowserName>chromium</BrowserName>
<ExpectTimeout>5000</ExpectTimeout>
<LaunchOptions>
<Headless>true</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
<!-- General run configuration -->
<RunConfiguration>
<EnvironmentVariables>
<!-- For debugging selectors, it's recommend to set the following environment variable -->
<DEBUG>pw:api</DEBUG>
</EnvironmentVariables>
</RunConfiguration>
</RunSettings>
アナウンス
- 🪦 これはmacOS 10.15サポート(1.21で非推奨)を含む最後のリリースです。
- ⚠️ Ubuntu 18は現在非推奨であり、2022年12月以降はサポートされません。
ブラウザバージョン
- Chromium 105.0.5195.19
- Mozilla Firefox 103.0
- WebKit 16.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 104
- Microsoft Edge 104
バージョン1.24
🐂 Debian 11 Bullseyeのサポート
PlaywrightはChromium、Firefox、WebKitにおいてx86_64のDebian 11 Bullseyeをサポートするようになりました。何か問題が発生した場合はお知らせください!
Linuxのサポート状況は以下の通りです
| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ |
新しい導入ドキュメント
「はじめに」ドキュメントをエンドツーエンドテストに焦点を当てるように書き直しました。playwright.devで確認してください。
バージョン1.23
APIテスト
Playwright for .NET 1.23は、.NETから直接サーバーにリクエストを送信できる新しいAPIテストを導入しました!これで、以下のことが可能になります。
- サーバーAPIのテスト
- テストでウェブアプリケーションにアクセスする前にサーバーサイドの状態を準備
- ブラウザでいくつかのアクションを実行した後、サーバーサイドの事後条件を検証
PlaywrightのPageを介してリクエストを行うには、**新しいPage.APIRequest API**を使用してください。
// Do a GET request on behalf of page
var response = await Page.APIRequest.GetAsync("http://example.com/foo.json");
Console.WriteLine(response.Status);
Console.WriteLine(response.StatusText);
Console.WriteLine(response.Ok);
Console.WriteLine(response.Headers["Content-Type"]);
Console.WriteLine(await response.TextAsync());
Console.WriteLine((await response.JsonAsync())?.GetProperty("foo").GetString());
詳細については、APIテストガイドをご覧ください。
ネットワークリプレイ
これで、ネットワークトラフィックをHARファイルに記録し、そのトラフィックをテストで再利用できるようになりました。
HARファイルにネットワークを記録するには
pwsh bin/Debug/netX/playwright.ps1 open --save-har=example.har --save-har-glob="**/api/**" https://example.com
あるいは、HARをプログラムで記録することもできます。
var context = await browser.NewContextAsync(new()
{
RecordHarPath = harPath,
RecordHarUrlFilterString = "**/api/**",
});
// ... Perform actions ...
// Close context to ensure HAR is saved to disk.
context.CloseAsync();
新しいメソッドPage.RouteFromHARAsync()またはBrowserContext.RouteFromHARAsync()を使用して、HARファイルから一致する応答を提供します。
await context.RouteFromHARAsync("example.har");
詳細については、ドキュメントを参照してください。
高度なルーティング
これで、Route.FallbackAsync()を使用して、ルーティングを他のハンドラーに委ねることができるようになりました。
次の例を考えてみましょう
// Remove a header from all requests.
await page.RouteAsync("**/*", async route =>
{
var headers = route.Request.Headers;
headers.Remove("X-Secret");
await route.ContinueAsync(new() { Headers = headers });
});
// Abort all images.
await page.RouteAsync("**/*", async route =>
{
if (route.Request.ResourceType == "image")
{
await route.AbortAsync();
}
else
{
await route.FallbackAsync();
}
});
新しいメソッドPage.RouteFromHARAsync()とBrowserContext.RouteFromHARAsync()もルーティングに参加し、処理を委譲できることに注意してください。
Webファーストアサーションの更新
<select multiple>
要素のすべての選択された値をアサートする新しいメソッドExpect(Locator).ToHaveValuesAsync()。- メソッドExpect(Locator).ToContainTextAsync()とExpect(Locator).ToHaveTextAsync()が
ignoreCase
オプションを受け入れるようになりました。
その他
-
邪魔になるサービスワーカーがある場合、新しいコンテキストオプション
serviceWorkers
を使用して簡単に無効にできます。var context = await Browser.NewContextAsync(new()
{
ServiceWorkers = ServiceWorkerPolicy.Block
}); -
recordHar
コンテキストオプションに.zip
パスを使用すると、結果のHARが自動的にzip圧縮されます。var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har.zip" });
-
手動でHARを編集する予定がある場合は、リプレイに不可欠な情報のみを記録する
"minimal"
HAR記録モードの使用を検討してください。var context = await Browser.NewContextAsync(new() { RecordHarPath = "example.har", RecordHarMode = HarMode.Minimal });
-
PlaywrightがUbuntu 22 amd64とUbuntu 22 arm64で動作するようになりました。
-
Playwright for .NETは**linux-arm64**をサポートし、そのための**arm64 Ubuntu 20.04 Dockerイメージ**を提供します。
バージョン1.22
ハイライト
-
ARIAロール、ARIA属性、およびアクセシブルネームで要素を選択できるロールセレクター。
// Click a button with accessible name "log in"
await page.Locator("role=button[name='log in']").ClickAsync();詳細については、ドキュメントを参照してください。
-
既存のロケーターをフィルターするための新しいLocator.Filter() API。
var buttons = page.Locator("role=button");
// ...
var submitLocator = buttons.Filter(new() { HasText = "Sign up" });
await submitLocator.ClickAsync();
バージョン1.21
ハイライト
-
ARIAロール、ARIA属性、およびアクセシブルネームで要素を選択できる新しいロールセレクター。
// Click a button with accessible name "log in"
await page.Locator("role=button[name='log in']").ClickAsync();詳細については、ドキュメントを参照してください。
-
より小さなサイズのスクリーンショットを撮るためのPage.ScreenshotAsync()の新しい
scale
オプション。 -
Page.ScreenshotAsync()に、テキストカーソルを制御するための新しい
caret
オプションが追加されました。デフォルトは"hide"
です。 -
指定された.NET Dockerイメージ
mcr.microsoft.com/playwright/dotnet
をリリースしました。詳細については、ドキュメントを参照してください。
動作の変更
- PlaywrightはLocator.SetInputFilesAsync() API経由で大容量ファイル(数百MB)のアップロードをサポートするようになりました。
ブラウザバージョン
- Chromium 101.0.4951.26
- Mozilla Firefox 98.0.2
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 100
- Microsoft Edge 100
バージョン1.20
Webファーストアサーション
Playwright for .NET 1.20はWebファーストアサーションを導入します。
次の例を考えてみましょう
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;
namespace PlaywrightTests;
[TestFixture]
public class ExampleTests : PageTest
{
[Test]
public async Task StatusBecomesSubmitted()
{
await Expect(Page.Locator(".status")).ToHaveTextAsync("Submitted");
}
}
Playwrightは、取得したNodeが"Submitted"
テキストを持つまで、セレクター.status
を持つノードを再テストし続けます。条件が満たされるか、タイムアウトに達するまで、ノードを繰り返し取得してチェックします。このタイムアウトはオプションとして渡すことができます。
詳細については、ドキュメントを参照してください。
その他の更新
- メソッドPage.ScreenshotAsync()、Locator.ScreenshotAsync()、およびElementHandle.ScreenshotAsync()の新しいオプション
- オプション
ScreenshotAnimations.Disabled
は、すべてのCSSアニメーションとトランジションを一貫した状態に巻き戻します。 - オプション
mask: Locator[]
は、指定された要素をピンク色(#FF00FF
)のボックスで覆い隠します。
- オプション
- Locator.HighlightAsync()は、デバッグを容易にするために要素を視覚的に強調表示します。
アナウンス
- v1.20はmacOS 10.15 CatalinaのWebKitアップデートを受け取る最後のリリースです。最新かつ最高のWebKitを使い続けるためにmacOSを更新してください!
ブラウザバージョン
- Chromium 101.0.4921.0
- Mozilla Firefox 97.0.1
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 99
- Microsoft Edge 99
バージョン1.19
ハイライト
-
Locatorが、別のロケーターを内部に含むことを確認する
has
オプションをサポートするようになりました。await Page.Locator("article", new() { Has = Page.Locator(".highlight") }).ClickAsync();
詳細については、ロケーターのドキュメントを参照してください。
-
新しいLocator.Page
-
Page.ScreenshotAsync()とLocator.ScreenshotAsync()が自動的に点滅するキャレットを隠すようになりました。
-
Playwright Codegenがロケーターとフレームロケーターを生成するようになりました。
ブラウザバージョン
- Chromium 100.0.4863.0
- Mozilla Firefox 96.0.1
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 98
- Microsoft Edge 98
バージョン1.18
ロケーターの改善
-
各ロケーターは、含まれるテキストによってオプションでフィルターできるようになりました。
await Page.Locator("li", new() { HasTextString = "My Item" })
.Locator("button").click();詳細については、ロケーターのドキュメントを参照してください。
新しいAPIと変更
AcceptDownloads
オプションのデフォルト値がtrue
になりました。- ソースをトレースに埋め込むための
Sources
オプション。
ブラウザバージョン
- Chromium 99.0.4812.0
- Mozilla Firefox 95.0
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 97
- Microsoft Edge 97
バージョン1.17
フレームロケーター
Playwright 1.17はフレームロケーターを導入しました。これはページ上のiframeを特定するためのロケーターです。フレームロケーターは、iframe
を取得し、そのiframe内の要素を特定するのに十分なロジックをキャプチャします。フレームロケーターはデフォルトで厳密であり、iframe
の出現を待ち、Webファーストアサーションで使用できます。
フレームロケーターはPage.FrameLocator()またはLocator.FrameLocator()メソッドで作成できます。
var locator = page.FrameLocator("#my-frame").Locator("text=Submit");
await locator.ClickAsync();
詳細については、ドキュメントを参照してください。
トレースビューアーの更新
Playwrightトレースビューアーが、https://trace.playwright.devで**オンラインで利用可能**になりました!trace.zip
ファイルをドラッグ&ドロップするだけで、その内容を検査できます。
**注**: トレースファイルはどこにもアップロードされません。trace.playwright.devは、トレースをローカルで処理するプログレッシブウェブアプリケーションです。
- Playwright Testトレースにデフォルトでソースが含まれるようになりました(トレースオプションで無効にすることもできます)。
- トレースビューアーにテスト名が表示されるようになりました。
- ブラウザの詳細を含む新しいトレースメタデータタブ。
- スナップショットにURLバーが追加されました。
HTMLレポートの更新
- HTMLレポートが動的フィルタリングをサポートするようになりました。
- レポートが**単一の静的HTMLファイル**になり、メールやSlackの添付ファイルとして送信できるようになりました。
Ubuntu ARM64のサポートなど
-
Playwrightが**Ubuntu 20.04 ARM64**をサポートするようになりました。Apple M1およびRaspberry Pi上のDocker内でPlaywrightテストを実行できるようになりました。
-
Linux上でEdgeの安定版をインストールするためにPlaywrightを使用できるようになりました。
pwsh bin/Debug/netX/playwright.ps1 install msedge
新しいAPI
バージョン1.16
🎭 Playwrightライブラリ
Locator.WaitForAsync
指定された状態を持つ単一の要素にロケーターが解決されるのを待ちます。デフォルトはstate: 'visible'
です。
var orderSent = page.Locator("#order-sent");
orderSent.WaitForAsync();
Locator.WaitForAsync()の詳細はこちら。
🎭 Playwrightトレースビューアー
pwsh bin/Debug/netX/playwright.ps1 show-trace
でトレースビューアーを実行し、トレースファイルをトレースビューアーPWAにドラッグ&ドロップします。- アクションターゲットの視覚的な属性表示の改善
トレースビューアーの詳細はこちら。
ブラウザバージョン
- Chromium 97.0.4666.0
- Mozilla Firefox 93.0
- WebKit 15.4
このバージョンのPlaywrightは、以下の安定版チャネルでもテストされました。
- Google Chrome 94
- Microsoft Edge 94
バージョン1.15
🖱️ マウスホイール
Mouse.WheelAsync() を使用することで、垂直方向または水平方向にスクロールできるようになりました。
📜 新しいHeaders API
これまではレスポンスの複数のヘッダー値を取得することはできませんでしたが、これが可能になり、追加のヘルパー関数が利用できるようになりました。
- Request.AllHeadersAsync()
- Request.HeadersArrayAsync()
- Request.HeaderValueAsync()
- Response.AllHeadersAsync()
- Response.HeadersArrayAsync()
- Response.HeaderValueAsync()
- Response.HeaderValuesAsync()
🌈 強制カラーエミュレーション
Browser.NewContextAsync() に渡すか、Page.EmulateMediaAsync() を呼び出すことで、forced-colors
CSSメディア機能をエミュレートできるようになりました。
新しいAPI
- Page.RouteAsync() は、このルートが何回一致する必要があるかを指定するための新しい
times
オプションを受け入れます。 - Page.SetCheckedAsync() と Locator.SetCheckedAsync() が、チェックボックスのチェック状態を設定するために導入されました。
- Request.SizesAsync() は、与えられたHTTPリクエストのリソースサイズ情報を返します。
- Tracing.StartChunkAsync() - 新しいトレースチャンクを開始します。
- Tracing.StopChunkAsync() - 新しいトレースチャンクを停止します。
重要 ⚠
- ⬆ .NET Core Apps 2.1 は、当社のCLIツールではサポートされなくなりました。2021年8月31日現在、.NET Core 2.1 はサポートが終了しており、セキュリティ更新プログラムも提供されません。CLIを前進させ、最小要件を.NET Core 3.1とすることに決定しました。
ブラウザバージョン
- Chromium 96.0.4641.0
- Mozilla Firefox 92.0
- WebKit 15.0
バージョン 1.14
⚡️ 新しい「strict」モード
セレクターの曖昧さは、自動化テストでよくある問題です。「strict」モードは、セレクターが単一の要素を指すことを保証し、そうでない場合はエラーをスローします。
オプトインするには、アクション呼び出しで setStrict(true)
を設定します。
// This will throw if you have more than one button!
await page.Locator("button", new() { Strict = true });
📍 新しいLocators API
Locatorは、ページ上の要素へのビューを表します。特定の瞬間に要素を取得するのに十分なロジックをカプセル化します。
Locator と ElementHandle の違いは、後者が特定の要素を指すのに対し、前者はその要素を取得する方法のロジックをカプセル化することです。
また、ロケーターはデフォルトで「strict」です!
var locator = page.Locator("button");
await locator.ClickAsync();
詳細についてはドキュメントをご覧ください。
🧩 実験的なReactおよびVueセレクターエンジン
ReactおよびVueセレクターは、コンポーネント名やプロパティ値で要素を選択できます。構文は属性セレクターと非常によく似ており、すべての属性セレクター演算子をサポートします。
await page.Locator("_react=SubmitButton[enabled=true]").ClickAsync();
await page.Locator("_vue=submit-button[enabled=true]").ClickAsync();
詳細については、ReactセレクターのドキュメントおよびVueセレクターのドキュメントをご覧ください。
✨ 新しいnth
およびvisible
セレクターエンジン
nth
セレクターエンジンは:nth-match
擬似クラスと同等ですが、他のセレクターエンジンと組み合わせることができます。visible
セレクターエンジンは:visible
擬似クラスと同等ですが、他のセレクターエンジンと組み合わせることができます。
// select the first button among all buttons
await button.ClickAsync("button >> nth=0");
// or if you are using locators, you can use First, Nth() and Last
await page.Locator("button").First.ClickAsync();
// click a visible button
await button.ClickAsync("button >> visible=true");
ブラウザバージョン
- Chromium 94.0.4595.0
- Mozilla Firefox 91.0
- WebKit 15.0
バージョン 1.13
Playwright
- Page.DragAndDropAsync() APIによる🖖 プログラムでのドラッグ&ドロップサポート。
- リクエストとレスポンスのボディサイズを含む🔎 拡張されたHAR。 Browser.NewContextAsync() の
recordHar
オプションを使用して利用できます。
ツール
- Playwright Trace Viewerは、パラメータ、戻り値、および
console.log()
の呼び出しを表示するようになりました。
新しく刷新されたガイド
ブラウザバージョン
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
新しいPlaywright API
- Browser.NewContextAsync() および Browser.NewPageAsync() の新しい
baseURL
オプション - Response.SecurityDetailsAsync() および Response.ServerAddrAsync()
- Page.DragAndDropAsync() および Frame.DragAndDropAsync()
- Download.CancelAsync()
- Page.InputValueAsync(), Frame.InputValueAsync() および ElementHandle.InputValueAsync()
- Page.FillAsync(), Frame.FillAsync(), および ElementHandle.FillAsync() の新しい
force
オプション - Page.SelectOptionAsync(), Frame.SelectOptionAsync(), および ElementHandle.SelectOptionAsync() の新しい
force
オプション
バージョン 1.12
ハイライト
- .NET v1.12 用 Playwright が安定版になりました!
- codegen および trace viewer ツールが標準で付属します。
ブラウザバージョン
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
このバージョンのPlaywrightは、以下の安定版チャネルでもテストされました。
- Google Chrome 91
- Microsoft Edge 91