リリースノート
バージョン 1.55
Codegen
- 自動 toBeVisible()アサーション: Codegen は、一般的な UI 操作に対して自動toBeVisible()アサーションを生成できるようになりました。この機能は Codegen 設定 UI で有効にできます。
破壊的変更
- ⚠️ Chromium 拡張機能マニフェスト v2 のサポートを終了しました。
その他
- Debian 13 "Trixie" のサポートを追加しました。
ブラウザバージョン
- Chromium 140.0.7339.16
- Mozilla Firefox 141.0
- WebKit 26.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 139
- Microsoft Edge 139
バージョン 1.54
ハイライト
- 
BrowserContext.cookies() および BrowserContext.addCookies() に新しいクッキープロパティ partitionKeyが追加されました。このプロパティを使用すると、パーティション化されたクッキーを保存および復元できます。詳細については、CHIPS MDN 記事を参照してください。なお、ブラウザによってクッキーのパーティション化のサポートとデフォルトは異なります。
- 
複数のコマンドで新しいオプション --user-data-dir。セッション間で認証などのブラウジング状態を再利用するために、同じユーザーデータディレクトリを指定できます。mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen --user-data-dir=./user-data"
- 
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=openコマンドではテストレコーダーが開かなくなりました。代わりにmvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args=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() が追加されました。トレースビューアで使用されます。 Locator button = page.getByTestId("btn-sub").describe("Subscribe button");
 button.click();
- 
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install --list"で、インストールされているすべてのブラウザ、バージョン、および場所が一覧表示されるようになりました。
ブラウザバージョン
- Chromium 138.0.7204.4
- Mozilla Firefox 139.0
- WebKit 18.5
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 137
- Microsoft Edge 137
バージョン 1.52
ハイライト
- 
要素の個々のクラス名を人間工学的にアサートするための新しいメソッド assertThat(locator).containsClass() が追加されました。 assertThat(page.getByRole(AriaRole.LISTITEM, new Page.GetByRoleOptions().setName("Ship v1.52"))).containsClass("done");
- 
Aria スナップショット には、厳密なマッチングのための /childrenとリンクのための/urlの 2 つの新しいプロパティが追加されました。assertThat(locator).toMatchAriaSnapshot("""
 - list
 - /children: equal
 - listitem: Feature A
 - listitem:
 - link "Feature B":
 - /url: "https://playwright.dokyumento.jp"
 """);
その他
- APIRequest.newContext() に最大リダイレクト数を制御する新しいオプション setMaxRedirects が追加されました。
破壊的変更
- Page.route() などのメソッドの Glob URL パターンは、?と[]をサポートしなくなりました。代わりに正規表現を使用することをお勧めします。
- メソッド Route.resume() は、Cookieヘッダーを上書きできなくなりました。Cookieヘッダーが指定されても無視され、クッキーはブラウザのクッキー保存場所から読み込まれます。カスタムクッキーを設定するには、BrowserContext.addCookies() を使用してください。
- 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.storageState() の新しいオプション setIndexedDB により、IndexedDB のコンテンツを保存および復元できます。これは、アプリケーションが Firebase Authentication などの認証トークンを保存するために IndexedDB API を使用する場合に便利です。 認証ガイド に従った例を以下に示します。 // Save storage state into the file. Make sure to include IndexedDB.
 context.storageState(new BrowserContext.StorageStateOptions()
 .setPath(Paths.get("state.json"))
 .setIndexedDB(true));
 // Create a new context with the saved storage state.
 BrowserContext context = browser.newContext(new Browser.NewContextOptions()
 .setStorageStatePath(Paths.get("state.json")));
- 
Locator.filter() の新しいオプション setVisible により、表示されている要素のみをマッチングできるようになりました。 // Ignore invisible todo items.
 Locator todoItems = page.getByTestId("todo-item")
 .filter(new Locator.FilterOptions().setVisible(true));
 // Check there are exactly 3 visible ones.
 assertThat(todoItems).hasCount(3);
- 
メソッド Page.emulateMedia() および Browser.newContext() の新しいオプション setContrastにより、prefers-contrastメディア機能をエミュレートできるようになりました。
- 
新しいオプション setFailOnStatusCode により、APIRequestContext を介して行われるすべてのフェッチリクエストで、2xx および 3xx 以外の応答コードでエラーがスローされるようになりました。 
ブラウザバージョン
- Chromium 134.0.6998.35
- Mozilla Firefox 135.0
- WebKit 18.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 133
- Microsoft Edge 133
バージョン 1.50
その他
- 指定された aria errormessage を持つ要素を Locator が指していることをアサートするためのメソッド assertThat(locator).hasAccessibleErrorMessage() が追加されました。
UI の更新
- Codegen に、aria スナップショットを生成する要素を選択するための新しいボタンが追加されました。
- アクション API 呼び出しと一緒に、追加の詳細(押されたキーなど)がトレースに表示されるようになりました。
- トレースでの canvasコンテンツの表示はエラーが発生しやすいです。表示はデフォルトで無効になり、Display canvas contentUI 設定で有効にできます。
- Callおよび- Networkパネルに、追加の時間情報が表示されるようになりました。
破壊的変更
- assertThat(locator).isEditable() および Locator.isEditable() は、ターゲット要素が <input>、<select>、またはその他の編集可能な要素でない場合に例外をスローするようになりました。
ブラウザバージョン
- Chromium 133.0.6943.16
- Mozilla Firefox 134.0
- WebKit 18.2
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 132
- Microsoft Edge 132
バージョン 1.49
Aria スナップショット
新しいアサーション assertThat(locator).matchesAriaSnapshot() は、ページの構造を YAML で表される期待されるアクセシビリティツリーと比較して検証します。
page.navigate("https://playwright.dokyumento.jp");
assertThat(page.locator("body")).matchesAriaSnapshot("""
  - 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.ariaSnapshot() を呼び出すことで、このアサーションを生成できます。
詳細については、aria スナップショットガイド を参照してください。
トレースグループ
新しいメソッド Tracing.group() を使用すると、トレースビューアでアクションを視覚的にグループ化できます。
// All actions between group and groupEnd
// will be shown in the trace viewer as a group.
page.context().tracing().group("Open Playwright.dev > API");
page.navigate("https://playwright.dokyumento.jp/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("API")).click();
page.context().tracing().groupEnd();
破壊的変更: 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 を参照してください。オプトイン後に問題が見られた場合は、イシューを提出してください。
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("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.routeWebSocket() および BrowserContext.routeWebSocket() を使用すると、ページで開始された WebSocket 接続をインターセプト、変更、およびモックできます。以下は、"request" に対して "response" で応答することで WebSocket 通信をモックする簡単な例です。
page.routeWebSocket("/ws", ws -> {
  ws.onMessage(frame -> {
    if ("request".equals(frame.text()))
      ws.send("response");
  });
});
詳細については、WebSocketRoute を参照してください。
UI の更新
- HTML レポートのアノテーションとテスト場所の新しい「コピー」ボタン。
- Route.fulfill() のようなルートメソッド呼び出しは、レポートやトレースビューアに表示されなくなりました。代わりに、ネットワークタブでどのネットワークリクエストがルーティングされたかを確認できます。
- ネットワークタブのリクエストに新しい「cURL としてコピー」および「fetch としてコピー」ボタン。
その他
- 新しいメソッド Page.requestGC() は、メモリリークの検出に役立つ場合があります。
- 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/java:v1.47.0は、Ubuntu 24.04 Noble ベースの Playwright イメージを提供するようになりました。22.02 jammy ベースのイメージを使用するには、代わりに- mcr.microsoft.com/playwright/java:v1.47.0-jammyを使用してください。
- Playwright Docker イメージの :latest/:focal/:jammyタグは公開されなくなりました。安定性と再現性を高めるために、特定のバージョンにピン留めしてください。
- TLS クライアント証明書をファイルパスの代わりにバイト配列として setClientCertificates.setCert および setClientCertificates.setKey を渡すことで、メモリから渡せるようになりました。
- Locator.selectOption() の setNoWaitAfter は非推奨になりました。
- 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.newContext() と APIRequest.newContext() のパラメータとしてクライアント証明書を指定できるようになりました。以下のスニペットは https://example.com のクライアント証明書を設定します。
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setClientCertificates(asList(new ClientCertificate("https://example.com")
          .setCertPath(Paths.get("client-certificates/cert.pem"))
          .setKeyPath(Paths.get("client-certificates/key.pem")))));
トレースビューアの更新
- テキストアタッチメントの内容がアタッチメントペインにインラインでレンダリングされるようになりました。
- Route.resume() などのルーティングアクションを表示/非表示にする新しい設定。
- リクエストメソッドとステータスがネットワーク詳細タブに表示されます。
- ソースファイルの場所をクリップボードにコピーする新しいボタン。
- メタデータペインに baseURLが表示されるようになりました。
その他
- APIRequestContext.fetch() に ECONNRESETネットワークエラーでリトライする新しいmaxRetriesオプションが追加されました。
ブラウザバージョン
- 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.
page.clock().install(new Clock.InstallOptions().setTime("2024-02-02T08:00:00"));
page.navigate("https://:3333");
Locator locator = page.getByTestId("current-time");
// Pretend that the user closed the laptop lid and opened it again at 10am.
// Pause the time once reached that point.
page.clock().pauseAt("2024-02-02T10:00:00");
// Assert the page state.
assertThat(locator).hasText("2/2/2024, 10:00:00 AM");
// Close the laptop lid again and open it at 10:30am.
page.clock().fastForward("30:00");
assertThat(locator).hasText("2/2/2024, 10:30:00 AM");
詳細については、クロックガイド を参照してください。
その他
- 
メソッド Locator.setInputFiles() は、 <input type=file webkitdirectory>要素のディレクトリのアップロードをサポートするようになりました。page.getByLabel("Upload directory").setInputFiles(Paths.get("mydir"));
- 
Locator.click() や Locator.press() などの複数のメソッドが、 ControlOrMeta修飾キーをサポートするようになりました。このキーは macOS ではMetaに、Windows および Linux ではControlにマッピングされます。// Press the common keyboard shortcut Control+S or Meta+S to trigger a "Save" operation.
 page.keyboard.press("ControlOrMeta+S");
- 
APIRequest.newContext() に新しいプロパティ 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
アクセシビリティアサーション
- 
assertThat(locator).hasAccessibleName() は、要素に指定されたアクセシブル名があるかどうかをチェックします。 Locator locator = page.getByRole(AriaRole.BUTTON);
 assertThat(locator).hasAccessibleName("Submit");
- 
assertThat(locator).hasAccessibleDescription() は、要素に指定されたアクセシブルな説明があるかどうかをチェックします。 Locator locator = page.getByRole(AriaRole.BUTTON);
 assertThat(locator).hasAccessibleDescription("Upload a photo");
- 
assertThat(locator).hasRole() は、要素に指定された ARIA ロールがあるかどうかをチェックします。 Locator locator = page.getByTestId("save-button");
 assertThat(locator).hasRole(AriaRole.BUTTON);
ロケータハンドラ
- Page.addLocatorHandler() で追加されたハンドラーを実行した後、Playwright は、ハンドラーをトリガーしたオーバーレイがもはや表示されなくなるまで待機するようになりました。この動作は、新しい setNoWaitAfterオプションでオプトアウトできます。
- Page.addLocatorHandler() の新しい setTimesオプションを使用して、ハンドラーが実行される最大回数を指定できます。
- Page.addLocatorHandler() のハンドラーがロケーターを引数として受け入れるようになりました。
- 以前追加されたロケーターハンドラーを削除するための新しいメソッド Page.removeLocatorHandler() が追加されました。
Locator locator = page.getByText("This interstitial covers the button");
page.addLocatorHandler(locator, overlay -> {
  overlay.locator("#close").click();
}, new Page.AddLocatorHandlerOptions().setTimes(3).setNoWaitAfter(true));
// Run your tests that can be interrupted by the overlay.
// ...
page.removeLocatorHandler(locator);
その他のオプション
- 
新しいメソッド FormData.append() により、 RequestOptionsのsetMultipartオプションで同じ名前の繰り返しフィールドを指定できるようになりました。FormData formData = FormData.create();
 formData.append("file", new FilePayload("f1.js", "text/javascript",
 "var x = 2024;".getBytes(StandardCharsets.UTF_8)));
 formData.append("file", new FilePayload("f2.txt", "text/plain",
 "hello".getBytes(StandardCharsets.UTF_8)));
 APIResponse response = context.request().post("https://example.com/uploadFile", RequestOptions.create().setMultipart(formData));
- 
expect(page).toHaveURL(url)が setIgnoreCase オプションをサポートするようになりました。
ブラウザバージョン
- Chromium 125.0.6422.14
- Mozilla Firefox 125.0.1
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 124
- Microsoft Edge 124
バージョン 1.43
新しいAPI
- 
メソッド BrowserContext.clearCookies() がフィルターをサポートし、特定のクッキーのみを削除できるようになりました。 // Clear all cookies.
 context.clearCookies();
 // New: clear cookies with a particular name.
 context.clearCookies(new BrowserContext.ClearCookiesOptions().setName("session-id"));
 // New: clear cookies for a particular domain.
 context.clearCookies(new BrowserContext.ClearCookiesOptions().setDomain("my-origin.com"));
- 
新しいメソッド Locator.contentFrame() は、Locator オブジェクトを FrameLocator に変換します。これは、どこかで取得した Locator オブジェクトがあり、後でフレーム内のコンテンツとやり取りしたい場合に便利です。 Locator locator = page.locator("iframe[name='embedded']");
 // ...
 FrameLocator frameLocator = locator.contentFrame();
 frameLocator.getByRole(AriaRole.BUTTON).click();
- 
新しいメソッド FrameLocator.owner() は、FrameLocator オブジェクトを Locator に変換します。これは、どこかで取得した FrameLocator オブジェクトがあり、後で iframe要素とやり取りしたい場合に便利です。FrameLocator frameLocator = page.frameLocator("iframe[name='embedded']");
 // ...
 Locator locator = frameLocator.owner();
 assertThat(locator).isVisible();
ブラウザバージョン
- Chromium 124.0.6367.8
- Mozilla Firefox 124.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 123
- Microsoft Edge 123
バージョン 1.42
実験的な JUnit 統合
テストクラスに新しい @UsePlaywright アノテーションを追加して、テストメソッドで Page、BrowserContext、Browser、APIRequestContext、Playwright の Playwright フィクスチャの使用を開始できます。
package org.example;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.junit.UsePlaywright;
import org.junit.jupiter.api.Test;
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
@UsePlaywright
public class TestExample {
  void shouldNavigateToInstallationGuide(Page page) {
    page.navigate("https://playwright.dokyumento.jp/java/");
    page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Docs")).click();
    assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Installation"))).isVisible();
  }
  @Test
  void shouldCheckTheBox(Page page) {
    page.setContent("<input id='checkbox' type='checkbox'></input>");
    page.locator("input").check();
    assertEquals(true, page.evaluate("window['checkbox'].checked"));
  }
  @Test
  void shouldSearchWiki(Page page) {
    page.navigate("https://www.wikipedia.org/");
    page.locator("input[name=\"search\"]").click();
    page.locator("input[name=\"search\"]").fill("playwright");
    page.locator("input[name=\"search\"]").press("Enter");
    assertThat(page).hasURL("https://en.wikipedia.org/wiki/Playwright");
  }
}
上記の例では、3 つすべてのテストメソッドが同じ Browser を使用しています。各テストは独自の BrowserContext と Page を使用しています。
カスタムオプション
独自の OptionsFactory を実装して、カスタム構成でフィクスチャを初期化します。
import com.microsoft.playwright.junit.Options;
import com.microsoft.playwright.junit.OptionsFactory;
import com.microsoft.playwright.junit.UsePlaywright;
@UsePlaywright(MyTest.CustomOptions.class)
public class MyTest {
  public static class CustomOptions implements OptionsFactory {
    @Override
    public Options getOptions() {
      return new Options()
          .setHeadless(false)
          .setContextOption(new Browser.NewContextOptions()
              .setBaseURL("https://github.com"))
          .setApiRequestOptions(new APIRequest.NewContextOptions()
              .setBaseURL("https://playwright.dokyumento.jp"));
    }
  }
  @Test
  public void testWithCustomOptions(Page page, APIRequestContext request) {
    page.navigate("/");
    assertThat(page).hasURL(Pattern.compile("github"));
    APIResponse response = request.get("/");
    assertTrue(response.text().contains("Playwright"));
  }
}
フィクスチャの詳細については、JUnit ガイド を参照してください。
新しいロケーターハンドラー
新しいメソッド Page.addLocatorHandler() は、指定された要素が表示され、Playwright のアクションをブロックする可能性がある場合に呼び出されるコールバックを登録します。コールバックはオーバーレイを取り除くことができます。以下は、クッキーダイアログが表示されたときに閉じる例です。
// Setup the handler.
page.addLocatorHandler(
    page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Hej! You are in control of your cookies.")),
    () -> {
        page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Accept all")).click();
    });
// Write the test as usual.
page.navigate("https://www.ikea.com/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Collection of blue and white")).click();
assertThat(page.getByRole(AriaRole.HEADING, new Page.GetByRoleOptions().setName("Light and easy"))).isVisible();
新しいAPI
- Page.pdf() は、setTagged と setOutline の 2 つの新しいオプションを受け入れます。
アナウンス
- ⚠️ Ubuntu 18 はサポートされなくなりました。
ブラウザバージョン
- Chromium 123.0.6312.4
- Mozilla Firefox 123.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 122
- Microsoft Edge 123
バージョン 1.41
新しいAPI
- 新しいメソッド Page.unrouteAll() は、Page.route() と Page.routeFromHAR() によって登録されたすべてのルートを削除します。
- 新しいメソッド BrowserContext.unrouteAll() は、BrowserContext.route() と BrowserContext.routeFromHAR() によって登録されたすべてのルートを削除します。
- Page.screenshot() の新しいオプション setStyle と Locator.screenshot() の setStyle により、スクリーンショットを撮る前にカスタム CSS をページに追加できるようになりました。
ブラウザバージョン
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 120
- Microsoft Edge 120
バージョン 1.40
テストジェネレータの更新
アサーションを生成する新しいツール
- "可視性をアサート" ツールは assertThat(locator).isVisible() を生成します。
- "値をアサート" ツールは assertThat(locator).hasValue() を生成します。
- "テキストをアサート" ツールは assertThat(locator).containsText() を生成します。
以下は、アサーション付きで生成されたテストの例です。
page.navigate("https://playwright.dokyumento.jp/");
page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get started")).click();
assertThat(page.getByLabel("Breadcrumbs").getByRole(AriaRole.LIST)).containsText("Installation");
assertThat(page.getByLabel("Search")).isVisible();
page.getByLabel("Search").click();
page.getByPlaceholder("Search docs").fill("locator");
assertThat(page.getByPlaceholder("Search docs")).hasValue("locator");
新しいAPI
- Page.close() のオプション setReason、BrowserContext.close() のオプション setReason、および Browser.close() のオプション setReason が追加されました。クローズ理由が、クローズによって中断されたすべての操作について報告されます。
- BrowserType.launchPersistentContext() のオプション setFirefoxUserPrefs。
その他の変更
- メソッド Download.path() および Download.createReadStream() は、失敗またはキャンセルされたダウンロードに対してエラーをスローするようになりました。
ブラウザバージョン
- 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.type()、Frame.type()、Locator.type()、および ElementHandle.type()。代わりに、はるかに高速な Locator.fill() を使用してください。ページのキーボード処理が特殊で、キーを 1 つずつ押す必要がある場合にのみ Locator.pressSequentially() を使用してください。
ブラウザバージョン
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 116
- Microsoft Edge 116
バージョン 1.37
新しいAPI
- 
新しいメソッド BrowserContext.newCDPSession() と Browser.newBrowserCDPSession() は、それぞれページとブラウザの Chrome DevTools Protocol セッションを作成します。 CDPSession cdpSession = page.context().newCDPSession(page);
 cdpSession.send("Runtime.enable");
 JsonObject params = new JsonObject();
 params.addProperty("expression", "window.foo = 'bar'");
 cdpSession.send("Runtime.evaluate", params);
 Object foo = page.evaluate("window['foo']");
 assertEquals("bar", foo);
📚 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.screenshot() および Locator.screenshot() の新しいオプション maskColorにより、デフォルトのマスキング色を変更できるようになりました。
- 
ブラウザバイナリをアンインストールする新しい uninstallCLI コマンド。$ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="uninstall" # remove browsers installed by this installation
 $ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="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() が追加され、両方のロケーターに一致するロケーターを作成できるようになりました。 Locator button = page.getByRole(AriaRole.BUTTON).and(page.getByTitle("Subscribe"));
- 
新しいイベント BrowserContext.onConsoleMessage(handler) および BrowserContext.onDialog(handler) により、指定されたブラウザコンテキストからの任意のページからのすべてのダイアログとコンソールメッセージを購読できるようになりました。新しいメソッド 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 つのロケーターのいずれかに一致するロケーターを作成します。「新しいメール」ボタンをクリックしたいが、セキュリティ設定ダイアログが表示される場合があるシナリオを考えてみてください。この場合、「新しいメール」ボタンまたはダイアログのいずれかを待機し、それに応じてアクションを実行できます。 Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New email"));
 Locator dialog = page.getByText("Confirm security settings");
 assertThat(newEmail.or(dialog)).isVisible();
 if (dialog.isVisible())
 page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
 newEmail.click();
- 
Locator.filter() の新しいオプション setHasNot と setHasNotText を使用して、特定の条件に**一致しない**要素を見つけます。 Locator rowLocator = page.locator("tr");
 rowLocator
 .filter(new Locator.FilterOptions().setHasNotText("text in column 1"))
 .filter(new Locator.FilterOptions().setHasNot(
 page.getByRole(AriaRole.BUTTON,
 new Page.GetByRoleOptions().setName("column 2 button" ))))
 .screenshot();
- 
新しい Web-First アサーション assertThat(locator).isAttached() を使用して、要素がページの DOM に存在することを確認します。要素がアタッチされており、かつ表示されていることを保証する assertThat(locator).isVisible() と混同しないでください。 
新しいAPI
- Locator.or()
- Locator.filter() の新しいオプション setHasNot
- Locator.filter() の新しいオプション setHasNotText
- assertThat(locator).isAttached()
- Route.fetch() の新しいオプション setTimeout
その他のハイライト
- Apple Silicon のネイティブサポート - Playwright は Rosetta なしで実行されるようになりました。
- Ubuntu 22.04 (Jammy) Docker イメージが追加されました。
⚠️ 破壊的変更
- mcr.microsoft.com/playwright/java:v1.33.0は、Ubuntu Jammy ベースの Playwright イメージを提供するようになりました。focal ベースのイメージを使用するには、代わりに- mcr.microsoft.com/playwright/java: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.routeFromHAR() および BrowserContext.routeFromHAR() の新しいオプション setUpdateMode と setUpdateContent。
- 既存のロケーターオブジェクトのチェインについては、ロケーターのドキュメントを参照してください。
- メソッド Tracing.startChunk() の新しいオプション setName。
ブラウザバージョン
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 111
- Microsoft Edge 111
バージョン 1.31
新しいAPI
- 
新しいアサーション assertThat(locator).isInViewport() は、ロケーターが Intersection Observer API に従って、ビューポートと交差する要素を指していることを保証します。 Locator locator = page.getByRole(AriaRole.BUTTON);
 // Make sure at least some part of element intersects viewport.
 assertThat(locator).isInViewport();
 // Make sure element is fully outside of viewport.
 assertThat(locator).not().isInViewport();
 // Make sure that at least half of the element intersects viewport.
 assertThat(locator).isInViewport(new LocatorAssertions.IsInViewportOptions().setRatio(0.5));
その他
- トレースビューアーのDOMスナップショットが別のウィンドウで開けるようになりました。
- メソッド Route.fetch() の新しいオプション setMaxRedirects。
- 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.fetch() page.route("**/api/settings", route -> {
 // Fetch original settings.
 APIResponse response = route.fetch();
 // Force settings theme to a predefined value.
 String body = response.text().replace("\"theme\":\"default\"",
 "\"theme\":\"Solorized\"");
 // Fulfill with modified data.
 route.fulfill(new Route.FulfillOptions().setResponse(response).setBody(body));
 });
- 
すべてのマッチする要素を反復処理するための新しいメソッド Locator.all() // Check all checkboxes!
 Locator checkboxes = page.getByRole(AriaRole.CHECKBOX);
 for (Locator checkbox : checkboxes.all())
 checkbox.check();
- 
Locator.selectOption() は、値またはラベルでマッチングするようになりました。 <select multiple>
 <option value="red">Red</option>
 <option value="green">Green</option>
 <option value="blue">Blue</option>
 </select>element.selectOption("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()。
- ARIA ロール、ARIA 属性、および アクセシブル名 で要素を検索する Page.getByRole()。
- 関連付けられたラベルのテキストでフォームコントロールを検索する Page.getByLabel()。
- data-testid属性 (他の属性も設定可能) に基づいて要素を検索する Page.getByTestId()。
- プレースホルダーで入力を検索する Page.getByPlaceholder()。
- テキスト代替で要素 (通常は画像) を検索する Page.getByAltText()。
- タイトルで要素を検索する Page.getByTitle()。
page.getByLabel("User Name").fill("John");
page.getByLabel("Password").fill("secret-password");
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in")).click();
assertThat(page.getByText("Welcome, John!")).isVisible();
これらすべてのメソッドは、Locator、FrameLocator、および Frame クラスでも利用できます。
その他のハイライト
- v1.25 で発表されたように、Ubuntu 18 は2022年12月以降サポートされません。それに加えて、次のPlaywrightリリースからはUbuntu 18でのWebKitの更新はありません。
動作の変更
- 
assertThat(locator).hasAttribute() に空の値を指定しても、属性が存在しない場合は一致しなくなりました。たとえば、以下のスニペットは、 buttonにdisabled属性が**ない**場合に成功します。assertThat(page.getByRole(AriaRole.BUTTON)).hasAttribute("disabled", "");
ブラウザのバージョン
- Chromium 107.0.5304.18
- Mozilla Firefox 105.0.1
- WebKit 16.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 106
- Microsoft Edge 106
バージョン 1.26
アサーション
- assertThat(locator).isEnabled() の新しいオプション enabled。
- assertThat(locator).hasText() が、オープンシャドウ DOM を通過するようになりました。
- assertThat(locator).isEditable() の新しいオプション editable。
- assertThat(locator).isVisible() の新しいオプション visible。
その他のハイライト
- APIRequestContext.get() などのメソッドに、リダイレクト回数を制限する新しいオプション setMaxRedirectsが追加されました。
- Docker イメージで OpenJDK 17 を使用するようになりました。
動作の変更
Playwright API の多くはすでに setWaitUntil(WaitUntilState.DOMCONTENTLOADED) オプションをサポートしています。例:
page.navigate("https://playwright.dokyumento.jp", new Page.NavigateOptions().setWaitUntil(WaitUntilState.DOMCONTENTLOADED));
1.26以前では、これはすべてのiframeが DOMContentLoaded イベントを発火するまで待機していました。
ウェブ仕様に合わせるため、WaitUntilState.DOMCONTENTLOADED の値は、ターゲットフレームが 'DOMContentLoaded' イベントを発火するまでのみ待機します。すべての iframe を待機するには、setWaitUntil(WaitUntilState.LOAD) を使用してください。
ブラウザのバージョン
- Chromium 106.0.5249.30
- Mozilla Firefox 104.0
- WebKit 16.0
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 105
- Microsoft Edge 105
バージョン 1.25
新しいAPIと変更点
- デフォルトのアサーションタイムアウトは、setDefaultAssertionTimeoutで変更できるようになりました。
お知らせ
- 🪦 これは 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 | ✅ | ✅ | ✅ |
バージョン 1.23
ネットワークリプレイ
HARファイルにネットワークトラフィックを記録し、そのトラフィックをテストで再利用できるようになりました。
HARファイルにネットワークを記録するには
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="open --save-har=example.har --save-har-glob='**/api/**' https://example.com"
または、HARをプログラムで記録することもできます。
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setRecordHarPath(Paths.get("example.har"))
    .setRecordHarUrlFilter("**/api/**"));
// ... Perform actions ...
// Close context to ensure HAR is saved to disk.
context.close();
新しいメソッド Page.routeFromHAR() または BrowserContext.routeFromHAR() を使用して、HAR ファイルから一致するレスポンスを提供します。
context.routeFromHAR(Paths.get("example.har"));
詳細については、ドキュメント を参照してください。
高度なルーティング
Route.fallback() を使用して、ルーティングを他のハンドラーに委譲できるようになりました。
次の例を考えてみましょう。
// Remove a header from all requests.
page.route("**/*", route -> {
  Map<String, String> headers = new HashMap<>(route.request().headers());
  headers.remove("X-Secret");
  route.resume(new Route.ResumeOptions().setHeaders(headers));
});
// Abort all images.
page.route("**/*", route -> {
  if ("image".equals(route.request().resourceType()))
    route.abort();
  else
    route.fallback();
});
新しいメソッド Page.routeFromHAR() と BrowserContext.routeFromHAR() もルーティングに参加し、委譲される可能性があることに注意してください。
Web-Firstアサーションの更新
- <select multiple>要素の選択されているすべての値をアサートする新しいメソッド assertThat(locator).hasValues()。
- メソッド assertThat(locator).containsText() と assertThat(locator).hasText() が ignoreCaseオプションを受け入れるようになりました。
その他
- 
邪魔になるサービスワーカーがある場合、新しいコンテキストオプション serviceWorkersを使用して簡単に無効にできるようになりました。BrowserContext context = browser.newContext(new Browser.NewContextOptions()
 .setServiceWorkers(ServiceWorkerPolicy.BLOCK));
- 
recordHarコンテキストオプションに.zipパスを使用すると、結果の HAR が自動的に圧縮されます。BrowserContext context = browser.newContext(new Browser.NewContextOptions()
 .setRecordHarPath(Paths.get("example.har.zip")));
- 
HARを手動で編集する場合は、リプレイに不可欠な情報のみを記録する "minimal"HAR記録モードの使用を検討してください。BrowserContext context = browser.newContext(new Browser.NewContextOptions()
 .setRecordHarPath(Paths.get("example.har"))
 .setRecordHarMode(HarMode.MINIMAL));
- 
Playwright が Ubuntu 22 amd64 および Ubuntu 22 arm64 で動作するようになりました。 
バージョン 1.22
ハイライト
- 
ARIAロール、ARIA属性、およびアクセシブルネームによって要素を選択できるロールセレクター。 // Click a button with accessible name "log in"
 page.locator("role=button[name='log in']").click();詳細については、ドキュメント を参照してください。 
- 
既存のロケーターをフィルターするための新しい Locator.filter() API Locator buttonsLocator = page.locator("role=button");
 // ...
 Locator submitButton = buttonsLocator.filter(new Locator.FilterOptions().setHasText("Submit"));
 submitButton.click();
- 
Playwright for Java は、Ubuntu 20.04 ARM64 および Apple M1 をサポートするようになりました。Apple M1 上、Apple M1 上の Docker 内、および Raspberry Pi で Playwright for Java テストを実行できるようになりました。 
バージョン 1.21
ハイライト
- 
ARIAロール、ARIA属性、およびアクセシブルネームによって要素を選択できる新しいロールセレクター。 // Click a button with accessible name "log in"
 page.locator("role=button[name='log in']").click();詳細については、ドキュメント を参照してください。 
- 
Page.screenshot() に、より小さなサイズのスクリーンショットを撮るための新しい scaleオプションが追加されました。
- 
Page.screenshot() に、テキストカーソルを制御するための新しい caretオプションが追加されました。デフォルトは"hide"です。
動作の変更
- Playwright は、Locator.setInputFiles() API を介した大規模ファイルアップロード (100MB 単位) をサポートするようになりました。
ブラウザのバージョン
- Chromium 101.0.4951.26
- Mozilla Firefox 98.0.2
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 100
- Microsoft Edge 100
バージョン 1.20
ハイライト
- メソッド Page.screenshot()、Locator.screenshot()、および ElementHandle.screenshot() の新しいオプション
- オプション ScreenshotAnimations.DISABLEDは、すべての CSS アニメーションとトランジションを一貫した状態に巻き戻します。
- オプション mask: Locator[]は、指定された要素をマスクし、ピンクの#FF00FFボックスでオーバーレイします。
 
- オプション 
- トレースビューア が API テストリクエスト を表示するようになりました。
- Locator.highlight() は、デバッグを容易にするために要素を視覚的に表示します。
お知らせ
- 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オプションをサポートするようになりました。page.locator("article", new Page.LocatorOptions().setHas(page.locator(".highlight"))).click();詳細については、ロケーターのドキュメント を参照してください。 
- 
新しい Locator.page() 
- 
Page.screenshot() と Locator.screenshot() は、点滅するカーソルを自動的に非表示にするようになりました。 
- 
Playwright Codegen がロケーターとフレームロケーターを生成するようになりました。 
ブラウザのバージョン
- Chromium 100.0.4863.0
- Mozilla Firefox 96.0.1
- WebKit 15.4
このバージョンは以下の安定版チャネルでもテストされました
- Google Chrome 98
- Microsoft Edge 98
バージョン 1.18
APIテスト
Playwright for Java 1.18 では、API テストが導入され、Java から直接サーバーにリクエストを送信できるようになりました!これで、以下のことが可能になります。
- サーバーAPIをテストする
- テストでウェブアプリケーションにアクセスする前にサーバー側の状態を準備する
- ブラウザでいくつかのアクションを実行した後にサーバー側の事後条件を検証する
Playwright のページに代わってリクエストを行うには、新しい Page.request() API を使用してください。
// Do a GET request on behalf of page
APIResponse res = page.request().get("http://example.com/foo.json");
詳細については、API テストガイド を参照してください。
Webファーストアサーション
Playwright for Java 1.18 では Web-First アサーションが導入されました。
次の例を考えてみましょう。
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
public class TestExample {
  @Test
  void statusBecomesSubmitted() {
    // ...
    page.locator("#submit-button").click();
    assertThat(page.locator(".status")).hasText("Submitted");
  }
}
Playwright は、選択子 .status を持つノードを再テストし、取得されたノードが "Submitted" テキストを持つまで続けます。このノードは、条件が満たされるかタイムアウトに達するまで、繰り返し取得およびチェックされます。このタイムアウトはオプションとして渡すことができます。
詳細については、ドキュメント を参照してください。
ロケーターの改善
- 
各ロケーターは、含むテキストでオプションでフィルタリングできるようになりました。 page.locator("li", new Page.LocatorOptions().setHasText("my item"))
 .locator("button").click();詳細については、ロケーターのドキュメント を参照してください。 
トレースの改善
トレース は、新しい setSources オプションを使用して、記録されたトレースに Java ソースを埋め込むことができるようになりました。

新しい API と変更点
- acceptDownloadsオプションのデフォルト値が- trueになりました。
ブラウザのバージョン
- 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-First アサーションで使用できます。

フレームロケーターは、Page.frameLocator() または Locator.frameLocator() メソッドで作成できます。
Locator locator = page.frameLocator("#my-frame").locator("text=Submit");
locator.click();
詳細については、ドキュメント を参照してください。
トレースビューアーの更新
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 をインストールできるようになりました。 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install msedge"
新しいAPI
バージョン 1.16
🎭 Playwright ライブラリ
Locator.waitFor
指定された状態の単一の要素に解決されるロケーターを待機します。デフォルトは state: 'visible' です。
Locator orderSent = page.locator("#order-sent");
orderSent.waitFor();
Locator.waitFor() の詳細はこちら。
🎭 Playwright Trace Viewer
- mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="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.wheel() を使用して、垂直方向または水平方向にスクロールできるようになりました。
📜 新しいヘッダーAPI
以前は、応答の複数のヘッダー値を取得することはできませんでした。これが可能になり、追加のヘルパー関数が利用できるようになりました。
- Request.allHeaders()
- Request.headersArray()
- Request.headerValue()
- Response.allHeaders()
- Response.headersArray()
- Response.headerValue()
- Response.headerValues()
🌈 Forced-Colors エミュレーション
Browser.newContext() に渡すか、Page.emulateMedia() を呼び出すことで、forced-colors CSS メディア機能をエミュレートできるようになりました。
新しいAPI
- Page.route() は、このルートが一致する回数を指定する新しい timesオプションを受け入れます。
- チェックボックスのチェック状態を設定するために、Page.setChecked() と Locator.setChecked() が導入されました。
- Request.sizes() は、指定された HTTP リクエストのリソースサイズ情報を返します。
- Tracing.startChunk() - 新しいトレースチャンクを開始します。
- Tracing.stopChunk() - 新しいトレースチャンクを停止します。
ブラウザのバージョン
- 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!
page.click("button", new Page.ClickOptions().setStrict(true));
📍 新しい ロケーター API
ロケーターは、ページ上の要素のビューを表します。特定の時点で要素を取得するのに十分なロジックをキャプチャします。
ロケーター と ElementHandle の違いは、後者が特定の要素を指すのに対し、ロケーター はその要素を取得する方法のロジックをキャプチャすることです。
また、ロケーターはデフォルトで「厳密」です!
Locator locator = page.locator("button");
locator.click();
詳細については、ドキュメント を参照してください。
🧩 実験的な React および Vue セレクターエンジン
React および Vue セレクタは、コンポーネント名やプロパティ値で要素を選択できます。構文は 属性セレクタ に非常に似ており、すべての属性セレクタ演算子をサポートしています。
page.locator("_react=SubmitButton[enabled=true]").click();
page.locator("_vue=submit-button[enabled=true]").click();
詳細については、React セレクターのドキュメント および Vue セレクターのドキュメント を参照してください。
✨ 新しい nth および visible セレクターエンジン
- nthセレクターエンジンは- :nth-match疑似クラスと同等ですが、他のセレクターエンジンと組み合わせることができます。
- visibleセレクターエンジンは- :visible疑似クラスと同等ですが、他のセレクターエンジンと組み合わせることができます。
// select the first button among all buttons
button.click("button >> nth=0");
// or if you are using locators, you can use first(), nth() and last()
page.locator("button").first().click();
// click a visible button
button.click("button >> visible=true");
ブラウザのバージョン
- Chromium 94.0.4595.0
- Mozilla Firefox 91.0
- WebKit 15.0
バージョン 1.13
Playwright
- 🖖 Page.dragAndDrop() API を介したプログラムによるドラッグアンドドロップのサポート。
- 🔎 HAR の機能強化: リクエストとレスポンスのボディサイズが追加されました。Browser.newContext() の recordHarオプションで利用できます。
ツール
- Playwright Trace Viewer に、パラメーター、戻り値、console.log()呼び出しが表示されるようになりました。
新しいおよび刷新されたガイド
ブラウザのバージョン
- Chromium 93.0.4576.0
- Mozilla Firefox 90.0
- WebKit 14.2
新しい Playwright API
- Browser.newContext() と Browser.newPage() の新しい baseURLオプション
- Response.securityDetails() と Response.serverAddr()
- Page.dragAndDrop() および Frame.dragAndDrop()
- Download.cancel()
- Page.inputValue()、Frame.inputValue()、および ElementHandle.inputValue()
- Page.fill()、Frame.fill()、および ElementHandle.fill() の新しい forceオプション
- Page.selectOption()、Frame.selectOption()、および ElementHandle.selectOption() の新しい forceオプション
バージョン 1.12
🧟♂️ Playwright Trace Viewer の紹介
Playwright Trace Viewer は、スクリプト実行後に記録された Playwright トレースを探索するのに役立つ新しい GUI ツールです。Playwright トレースでは、以下を調べることができます。
- 各 Playwright アクションの前後のページ DOM
- 各 Playwright アクションの前後のページレンダリング
- スクリプト実行中のブラウザネットワーク
トレースは、新しい BrowserContext.tracing() API を使用して記録されます。
Browser browser = playwright.chromium().launch();
BrowserContext context = browser.newContext();
// Start tracing before creating / navigating a page.
context.tracing().start(new Tracing.StartOptions()
  .setScreenshots(true)
  .setSnapshots(true));
Page page = context.newPage();
page.navigate("https://playwright.dokyumento.jp");
// Stop tracing and export it into a zip archive.
context.tracing().stop(new Tracing.StopOptions()
  .setPath(Paths.get("trace.zip")));
トレースは後で Playwright CLI を使用して検査されます。
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="show-trace trace.zip"
これにより、以下の GUI が開きます。

👉 詳細については、トレースビューアのドキュメント を参照してください。
ブラウザのバージョン
- Chromium 93.0.4530.0
- Mozilla Firefox 89.0
- WebKit 14.2
このバージョンの Playwright は、以下の安定版チャンネルでもテストされています。
- Google Chrome 91
- Microsoft Edge 91
新しいAPI
- Page.emulateMedia()、BrowserType.launchPersistentContext()、Browser.newContext()、および Browser.newPage() の reducedMotionオプション
- BrowserContext.onRequest(handler)
- BrowserContext.onRequestFailed(handler)
- BrowserContext.onRequestFinished(handler)
- BrowserContext.onResponse(handler)
- BrowserType.launch() および BrowserType.launchPersistentContext() の tracesDirオプション
- 新しい BrowserContext.tracing() API 名前空間
- 新しい Download.page() メソッド
バージョン 1.11
🎥 新しい動画: Playwright: A New Test Automation Framework for the Modern Web (スライド)
- Playwrightについて話しました
- 舞台裏のエンジニアリング作業を披露しました
- 新機能のライブデモを実施しました ✨
- イベントを主催し、私たちを招待してくださった applitools に特別な感謝を申し上げます!
ブラウザのバージョン
- Chromium 92.0.4498.0
- Mozilla Firefox 89.0b6
- WebKit 14.2
新しいAPI
- Page.waitForRequest() などのメソッドで、API 全体で非同期述語をサポートします。
- 新しいエミュレーションデバイス: Galaxy S8, Galaxy S9+, Galaxy Tab S4, Pixel 3, Pixel 4
- 新しいメソッド
- URL へのナビゲーションを待機するための Page.waitForURL()
- 画面録画を管理するための Video.delete() と Video.saveAs()
 
- 新しいオプション
- Browser.newContext() メソッドの screenオプションにより、window.screenディメンションをエミュレートできます。
- Page.check() および Page.uncheck() メソッドの positionオプション
- Page.check()、Page.uncheck()、Page.click()、Page.dblclick()、Page.hover()、および Page.tap() でアクションをドライランする trialオプション
 
- Browser.newContext() メソッドの 
バージョン 1.10
- Playwright for Java v1.10 が安定版になりました!
- 新しいチャネル API を使用して、Google Chrome および Microsoft Edge の安定版チャネルに対して Playwright を実行します。
- Chromium のスクリーンショットは Mac & Windows で高速です。
バンドルされているブラウザのバージョン
- Chromium 90.0.4430.0
- Mozilla Firefox 87.0b10
- WebKit 14.2
このバージョンの Playwright は、以下の安定版チャンネルでもテストされています。
- Google Chrome 89
- Microsoft Edge 89
新しいAPI
- BrowserType.launch() が新しい 'channel'オプションを受け入れるようになりました。詳細については、ドキュメント を参照してください。
バージョン 1.9
- Playwright Inspector は、テストの作成とデバッグに役立つ新しい GUI ツールです。
- Playwright スクリプトの行ごとのデバッグ、再生、一時停止、ステップ実行。
- ユーザーアクションを記録して新しいスクリプトを作成します。
- 要素にホバーすることで、スクリプトの要素セレクターを生成します。
- Inspector を起動するには、PWDEBUG=1環境変数を設定します。
 
- ヘッドモードで Page.pause() を使用してスクリプト実行を一時停止します。ページを一時停止すると、デバッグのために Playwright Inspector が起動します。
- CSS セレクターの新しい has-text 疑似クラス。:has-text("example")は、どこかに (子要素または子孫要素に)"example"を含む要素に一致します。詳細については、その他の例を参照してください。
- dialogイベントのリスナーが設定されていない限り、ページダイアログは実行中に自動的に閉じられるようになりました。これについての詳細はこちら。
- Playwright for Python は、イディオム的なスネークケース API と、CI/CD でテストを実行するためのプレビルドされた Docker イメージ を備え、安定版になりました。
ブラウザのバージョン
- Chromium 90.0.4421.0
- Mozilla Firefox 86.0b10
- WebKit 14.1
新しいAPI
バージョン 1.8
- 
:left-of()、:right-of()、:above()、:below()を使用して、レイアウトに基づいて要素を選択します。
- 
Playwright には、以前の playwright-cli と同様に、コマンドラインインターフェースが含まれるようになりました。 mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="--help"
- 
Page.selectOption() が、オプションが存在するのを待つようになりました。 
- 
Page.isEditable() などの新しいメソッドで、要素の状態をアサートできるようになりました。 
新しいAPI
- ElementHandle.isChecked().
- ElementHandle.isDisabled().
- ElementHandle.isEditable().
- ElementHandle.isEnabled().
- ElementHandle.isHidden().
- ElementHandle.isVisible().
- Page.isChecked().
- Page.isDisabled().
- Page.isEditable().
- Page.isEnabled().
- Page.isHidden().
- Page.isVisible().
- ElementHandle.waitForElementState() に新しいオプション 'editable'が追加されました。
ブラウザのバージョン
- Chromium 90.0.4392.0
- Mozilla Firefox 85.0b5
- WebKit 14.1
バージョン 1.7
- 新しい Java SDK: Playwright for Java が JavaScript、Python、.NET バインディング と同等になりました。
- ブラウザストレージAPI: 認証シナリオを簡素化するために、ブラウザストレージ状態 (クッキー、ローカルストレージ) を保存および読み込むための新しい便利なAPI。
- 新しい CSS セレクター: より柔軟なセレクターに関するフィードバックを受け、セレクターの実装を刷新しました。Playwright 1.7 では 新しい CSS 拡張機能 が導入され、今後もさらに追加される予定です。
- 新しいウェブサイト: playwright.dev のドキュメントウェブサイトが更新され、現在は Docusaurus で構築されています。
- Apple Silicon のサポート: WebKit および Chromium 用の Playwright ブラウザバイナリが Apple Silicon 用にビルドされるようになりました。
新しい API
- 後で再利用するために現在の状態を取得する BrowserContext.storageState()。
- Browser.newContext() および Browser.newPage() の storageStateオプションにより、ブラウザコンテキストの状態を設定できるようになりました。
ブラウザのバージョン
- Chromium 89.0.4344.0
- Mozilla Firefox 84.0b9
- WebKit 14.1