リリースノート
バージョン 1.55
Codegen
- 自動
toBeVisible()アサーション: Codegen は、一般的な UI 操作に対して自動toBeVisible()アサーションを生成できるようになりました。この機能は Codegen 設定 UI で有効にできます。
破壊的変更
- ⚠️ Chromium 拡張機能マニフェスト v2 のサポートを終了しました。
その他
- Debian 13 "Trixie" のサポートを追加しました。
Microsoft.Playwright.Xunit.v3の一部としてXunit v3のサポートを追加しました。Microsoft.Playwright.MSTest.v4の一部としてMSTest v4のサポートを追加しました。
ブラウザバージョン
- Chromium 140.0.7339.16
- Mozilla Firefox 141.0
- WebKit 26.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 139
- Microsoft Edge 139
バージョン 1.54
ハイライト
-
BrowserContext.CookiesAsync() および BrowserContext.AddCookiesAsync() に新しいcookieプロパティ
PartitionKeyを追加しました。このプロパティにより、パーティション化されたcookieの保存と復元が可能になります。詳細については、CHIPS MDNの記事を参照してください。なお、ブラウザによってcookieのパーティション化のサポートとデフォルトは異なります。 -
複数のコマンドで新しいオプション
--user-data-dir。セッション間で認証などのブラウジング状態を再利用するために、同じユーザーデータディレクトリを指定できます。pwsh bin/Debug/netX/playwright.ps1 codegen --user-data-dir=./user-data -
pwsh bin/Debug/netX/playwright.ps1 openはテストレコーダーを開かなくなりました。代わりにpwsh bin/Debug/netX/playwright.ps1 codegenを使用してください。
ブラウザバージョン
- Chromium 139.0.7258.5
- Mozilla Firefox 140.0.2
- WebKit 26.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 140
- Microsoft Edge 140
バージョン 1.53
トレースビューアーとHTMLレポーターの更新
-
トレースビューアの新しいステップ:
-
ロケーターを記述する新しいメソッド Locator.Describe() を追加しました。トレースビューアで使用されます。
var button = Page.GetByTestId("btn-sub").Describe("Subscribe button");
await button.ClickAsync(); -
pwsh bin/Debug/netX/playwright.ps1 install --listは、インストールされているすべてのブラウザ、バージョン、および場所を一覧表示するようになりました。
ブラウザバージョン
- Chromium 138.0.7204.4
- Mozilla Firefox 139.0
- WebKit 18.5
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 137
- Microsoft Edge 137
バージョン 1.52
ハイライト
-
要素上の個々のクラス名を人間工学的にアサートする新しいメソッド Expect(Locator).ToContainClassAsync() を追加しました。
await Expect(Page.GetByRole(AriaRole.Listitem, new() { Name = "Ship v1.52" })).ToContainClassAsync("done"); -
Ariaスナップショット には2つの新しいプロパティが追加されました: 厳密なマッチングのための
/childrenとリンクのための/urlです。await Expect(locator).ToMatchAriaSnapshotAsync(@"
- list
- /children: equal
- listitem: Feature A
- listitem:
- link ""Feature B"":
- /url: ""https://playwright.dokyumento.jp""
");
その他
- ApiRequest.NewContextAsync() にリダイレクトの最大数を制御する新しいオプション MaxRedirects を追加しました。
破壊的変更
- Page.RouteAsync() などのメソッドにおけるグローバルURLパターンは
?と[]をサポートしなくなりました。代わりに正規表現を使用することをお勧めします。 - メソッド Route.ContinueAsync() は
Cookieヘッダーのオーバーライドを許可しなくなりました。Cookieヘッダーが指定された場合、それは無視され、Cookieはブラウザの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 Authenticationのように、アプリケーションが認証トークンを保存するために 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+ をサポートします。詳細については、はじめに ガイドを参照してください。
その他
- ロケーターが指定された aria errormessage を持つ要素を指していることをアサートするメソッド Expect(Locator).ToHaveAccessibleErrorMessageAsync() を追加しました。
UI の更新
- Codegen に、aria スナップショットを生成する要素を選択するための新しいボタンが追加されました。
- アクション API 呼び出しと一緒に、追加の詳細(押されたキーなど)がトレースに表示されるようになりました。
- トレースでの
canvasコンテンツの表示はエラーが発生しやすいです。表示はデフォルトで無効になり、Display canvas contentUI 設定で有効にできます。 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""
");
Test Generator を使用するか、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-canarymsedge,msedge-dev,msedge-beta, またはmsedge-canary
Playwright v1.49 にアップデートした後、テストスイートを実行してください。もし引き続き合格するなら問題ありません。そうでない場合は、スナップショットを更新し、PDF ビューアーと拡張機能に関するテストコードの一部を修正する必要があるでしょう。詳細については、issue #33566 を参照してください。
新しい Chromium ヘッドレスを試す
'chromium' チャネルを使用することで、新しいヘッドレスモードをオプトインできます。公式の Chrome ドキュメント にあるように、
一方、新しいヘッドレスは実際の Chrome ブラウザであり、より本格的で信頼性が高く、より多くの機能を提供します。これにより、高精度のエンドツーエンド Web アプリテストやブラウザ拡張機能テストに適しています。
発生する可能性のある破壊的変更のリストと Chromium ヘッドレスの詳細については、issue #33566 を参照してください。オプトイン後に問題が見られた場合は、イシューを提出してください。
<?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() は、一部のCookieのみを削除するためのフィルタをサポートするようになりました。
// 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のアクションをブロックする可能性がある場合に呼び出されるコールバックを登録します。コールバックはオーバーレイを取り除くことができます。以下は、Cookieダイアログが表示されたときに閉じる例です。
// 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() は、2つの新しいオプション 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() によって登録されたすべてのルートを削除します。オプションで、実行中のルートが終了するのを待つか、それらからのエラーを無視することができます。
- Page.ScreenshotAsync() の新しいオプション Style と Locator.ScreenshotAsync() の新しいオプション Style を使用して、スクリーンショットを撮る前にページにカスタムCSSを追加できます。
ブラウザバージョン
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 120
- Microsoft Edge 120
バージョン 1.40
テストジェネレータの更新
アサーションを生成する新しいツール
- "視認性をアサート" ツールは Expect(Locator).ToBeVisibleAsync() を生成します。
- "値をアサート" ツールは Expect(Locator).ToHaveValueAsync() を生成します。
- "テキストをアサート" ツールは 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 は現在、x86_64 および arm64 の両方で Debian 12 Bookworm を Chromium、Firefox、および WebKit でサポートしています。問題が発生した場合はお知らせください。
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を使用して、デフォルトのマスキング色を変更できます。 -
ブラウザバイナリをアンインストールする新しい
uninstallCLI コマンド。$ 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
ロケータの更新
-
Locator.Or() を使用して、2つのロケータのいずれかに一致するロケータを作成します。「新しいメール」ボタンをクリックしたいが、セキュリティ設定ダイアログが表示される場合があるというシナリオを考えてみてください。この場合、「新しいメール」ボタンまたはダイアログのいずれかを待ち、それに応じて対応できます。
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() の新しいオプション
Jsonawait 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でのライブロケーター。「探索」ツールを使用して、ページ上の任意の要素のロケーターを生成します。

新しいAPI
ブラウザのバージョン
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 107
- Microsoft Edge 107
バージョン 1.27
ロケーター
これらの新しいAPIにより、ロケーターの記述が楽しくなりました
- Page.GetByText() でテキストコンテンツによって要素を特定します。
- Page.GetByRole() で ARIAロール、ARIA属性、および アクセシブル名によって要素を特定します。
- Page.GetByLabel() で、関連するラベルのテキストによってフォームコントロールを特定します。
- Page.GetByTestId() で、
data-testid属性(他の属性も設定可能)に基づいて要素を特定します。 - 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 イベントを発火するまで待機していました。
ウェブ仕様に合わせるため、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 | ✅ | ✅ | ✅ |
新しい導入ドキュメント
私たちは、よりエンドツーエンドテストに焦点を当てるように、Getting Startedドキュメントを書き直しました。playwright.dev で確認してください。
バージョン 1.23
APIテスト
Playwright for .NET 1.23では、APIテスト が導入され、.NETから直接サーバーにリクエストを送信できるようになりました!これで、
- サーバーAPIをテストする
- テストでウェブアプリケーションにアクセスする前にサーバー側の状態を準備する
- ブラウザでいくつかのアクションを実行した後にサーバー側の事後条件を検証する
Playwrightのページに代わってリクエストを行うには、新しい 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-Firstアサーションの更新
- 新しいメソッド Expect(Locator).ToHaveValuesAsync() は、
<select multiple>要素の選択されたすべての値をアサートします。 - メソッド Expect(Locator).ToContainTextAsync() および Expect(Locator).ToHaveTextAsync() は、
ignoreCaseオプションを受け入れるようになりました。
その他
-
邪魔になるサービスワーカーがある場合、新しいコンテキストオプション
serviceWorkersを使用して簡単に無効にできるようになりました。var context = await Browser.NewContextAsync(new()
{
ServiceWorkers = ServiceWorkerPolicy.Block
}); -
recordHarコンテキストオプションに.zipパスを使用すると、結果の HAR が自動的に圧縮されます。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 は、選択子 .status を持つノードを再テストし、取得されたノードが "Submitted" テキストを持つまで続けます。このノードは、条件が満たされるかタイムアウトに達するまで、繰り返し取得およびチェックされます。このタイムアウトはオプションとして渡すことができます。
詳細については、私たちのドキュメント を参照してください。
その他の更新
- メソッド 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 Trace Viewer が https://trace.playwright.dev でオンラインで利用可能になりました!trace.zip ファイルをドラッグアンドドロップするだけで、その内容を検査できます。
注: トレースファイルはどこにもアップロードされません。trace.playwright.dev は、トレースをローカルで処理するプログレッシブウェブアプリケーションです。
- Playwright Test のトレースにデフォルトでソースが含まれるようになりました (トレースオプションでオフにできます)。
- Trace Viewer にテスト名が表示されるようになりました。
- ブラウザの詳細を含む新しいトレースメタデータタブ
- スナップショットにURLバーが追加されました

HTML レポートの更新
- HTML レポートが動的フィルタリングをサポートするようになりました。
- レポートは単一の静的HTMLファイルとなり、EメールやSlackの添付ファイルとして送信できます。

Ubuntu ARM64 のサポートなど
-
Playwright は Ubuntu 20.04 ARM64 をサポートするようになりました。Apple M1 や Raspberry Pi の Docker 内で Playwright テストを実行できるようになりました。
-
Playwright を使用して Linux に安定版の Edge をインストールできるようになりました。
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 Trace Viewer
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() を使用することで、垂直方向または水平方向にスクロールできるようになりました。
📜 新しいヘッダーAPI
以前は、応答の複数のヘッダー値を取得することはできませんでした。これが可能になり、追加のヘルパー関数が利用できるようになりました。
- Request.AllHeadersAsync()
- Request.HeadersArrayAsync()
- Request.HeaderValueAsync()
- Response.AllHeadersAsync()
- Response.HeadersArrayAsync()
- Response.HeaderValueAsync()
- Response.HeaderValuesAsync()
🌈 Forced-Colors エミュレーション
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
⚡️ 新しい「厳密」モード
セレクタの曖昧さは、自動化テストにおける一般的な問題です。「厳密」モードは、セレクタが単一の要素を指していることを保証し、そうでなければ例外をスローします。
アクション呼び出しで setStrict(true) を設定して、オプトインしてください。
// This will throw if you have more than one button!
await page.Locator("button", new() { Strict = true });
📍 新しい ロケータAPI
ロケーターは、ページ上の要素のビューを表します。特定の時点で要素を取得するのに十分なロジックをキャプチャします。
ロケータ と ElementHandle の違いは、後者が特定の要素を指すのに対し、ロケータ はその要素を取得する方法のロジックをキャプチャする点です。
また、ロケーターはデフォルトで「厳密」です!
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
ハイライト
- Playwright for .NET v1.12 が安定版になりました!
- codegen および trace viewer ツールが標準で付属しています。
ブラウザのバージョン
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
このバージョンの Playwright は、以下の安定版チャンネルでもテストされています。
- Google Chrome 91
- Microsoft Edge 91