メインコンテンツにスキップ

リリースノート

バージョン 1.52

ハイライト

  • 要素の個々のクラス名を人間工学的にアサートする新しいメソッドassertThat(locator).containsClass()

      assertThat(page.getByRole(AriaRole.LISTITEM, new Page.GetByRoleOptions().setName("Ship v1.52"))).containsClass("done");
  • Ariaスナップショットに2つの新しいプロパティが追加されました: 厳密なマッチングのための/childrenと、リンクのための/url

    assertThat(locator).toMatchAriaSnapshot("""
    - list
    - /children: equal
    - listitem: Feature A
    - listitem:
    - link "Feature B":
    - /url: "https://playwright.dokyumento.jp"
    """);

その他

  • APIRequest.newContext()に最大リダイレクト数を制御する新しいオプションsetMaxRedirectsが追加されました。
  • Locator.ariaSnapshot()に新しいオプションsetRefが追加されました。スナップショット内の各要素に参照を生成し、後でその要素を特定するために使用できます。
  • HTMLレポーターが!@my-tag!my-file.spec.ts!p:my-projectによるNOTフィルタリングをサポートしました。

破壊的変更

  • Page.frame()でのベースURLマッチングはサポートされなくなりました。より便利なAPIを使用するため、Page.frameLocator()への移行を推奨します。
  • 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

その他

UI更新

  • CodegenにAriaスナップショットを生成するための要素選択ボタンが追加されました。
  • アクションAPI呼び出しのトレースに、追加の詳細情報(押されたキーなど)が表示されるようになりました。
  • トレースでのcanvasコンテンツの表示はエラーが発生しやすいため、デフォルトで無効になりました。UI設定のDisplay canvas contentで有効にできます。
  • CallおよびNetworkパネルで、追加の時間情報が表示されるようになりました。

破壊的変更

ブラウザバージョン

  • 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で以下のいずれかのチャネルを使用している場合に影響します。

  • chromechrome-devchrome-beta、またはchrome-canary
  • msedgemsedge-devmsedge-beta、またはmsedge-canary

Playwright v1.49にアップデートした後、テストスイートを実行してください。まだパスする場合は問題ありません。パスしない場合は、スナップショットを更新し、PDFビューアや拡張機能に関する一部のテストコードを適応させる必要があるかもしれません。詳細については、issue #33566を参照してください。

新しいChromiumヘッドレスを試す

新しいヘッドレスモードは、'chromium'チャネルを使用することでオプトインできます。公式Chromeドキュメントには次のように書かれています。

一方、新しいヘッドレスは実際のChromeブラウザであり、より本物で信頼性が高く、より多くの機能を提供します。これにより、高精度なエンドツーエンドのWebアプリケーションテストやブラウザ拡張機能テストに適しています。

発生する可能性のある破壊的変更のリストとChromiumヘッドレスの詳細については、issue #33566を参照してください。オプトイン後に問題が見つかった場合は、ぜひissueを報告してください。

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によるフィルタリング
  • クエリ文字列パラメータのより良い表示
  • フォントアセットのプレビュー

Network tab now has filters

その他

  • 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.setCertsetClientCertificates.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()に新しい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.
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()により、RequestOptionssetMultipartオプションで同じ名前の繰り返しフィールドを指定できるようになりました。

    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アノテーションを追加して、テストメソッドでPageBrowserContextBrowserAPIRequestContextPlaywrightの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を使用しています。各テストは独自のBrowserContextPageを使用します。

カスタムオプション

独自の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

お知らせ

  • ⚠️ Ubuntu 18はサポートされなくなりました。

ブラウザバージョン

  • Chromium 123.0.6312.4
  • Mozilla Firefox 123.0
  • WebKit 17.4

このバージョンは以下の安定版チャネルでもテストされています

  • Google Chrome 122
  • Microsoft Edge 123

バージョン 1.41

新しいAPI

ブラウザバージョン

  • Chromium 121.0.6167.57
  • Mozilla Firefox 121.0
  • WebKit 17.4

このバージョンは以下の安定版チャネルでもテストされています

  • Google Chrome 120
  • Microsoft Edge 120

バージョン 1.40

テストジェネレーターの更新

Playwright Test Generator

アサーションを生成する新しいツール

以下はアサーションを含む生成されたテストの例です

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

その他の変更

ブラウザバージョン

  • 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

トレースビューアの更新

Playwright Trace Viewer

  1. 時間範囲へのズーム。
  2. ネットワークパネルの再設計。

新しいAPI

非推奨

ブラウザバージョン

  • 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は、Chromium、Firefox、WebKitのx86_64とarm64の両方でDebian 12 Bookwormをサポートするようになりました。何か問題が発生した場合はお知らせください!

Linuxのサポート状況は以下の通りです

Ubuntu 20.04Ubuntu 22.04Debian 11Debian 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で、デフォルトのマスキング色を変更できるようになりました。

  • ブラウザバイナリをアンインストールするための新しいuninstall CLIコマンド

    $ 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()の新しいオプションsetHasNotsetHasNotTextを使用して、特定の条件に**マッチしない**要素を見つけます。

    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ファーストアサーションassertThat(locator).isAttached()を使用して、要素がページのDOMに存在することを確認します。assertThat(locator).isVisible()とは混同しないでください。後者は、要素がアタッチされており、かつ可視であることの両方を確認します。

新しいAPI

その他のハイライト

  • 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

ブラウザバージョン

  • 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でのライブロケーター。「探索」ツールを使用して、ページの任意の要素のロケーターを生成します。

Locator Explorer

新しいAPI

ブラウザバージョン

  • Chromium 108.0.5359.29
  • Mozilla Firefox 106.0
  • WebKit 16.4

このバージョンは以下の安定版チャネルでもテストされています

  • Google Chrome 107
  • Microsoft Edge 107

バージョン 1.27

ロケーター

これらの新しいAPIを使用すると、ロケーターの記述が楽しくなります。

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();

これらすべてのメソッドは、LocatorFrameLocatorFrameクラスでも利用できます。

その他のハイライト

  • v1.25で発表されたように、Ubuntu 18は2022年12月以降サポートされません。それに加えて、次回のPlaywrightリリース以降、Ubuntu 18ではWebKitのアップデートは行われません。

動作の変更点

  • 空の値を持つassertThat(locator).hasAttribute()は、もはや属性の欠如にはマッチしません。例えば、以下のスニペットは、buttondisabled属性が**ない**場合に成功します。

    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

アサーション

その他のハイライト

  • 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イベントを発火するまで待機していました。

Web仕様に合わせるため、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ファーストアサーションの更新

その他

  • 邪魔なサービスワーカーがある場合、新しいコンテキストオプションserviceWorkersで簡単に無効にできるようになりました。

    BrowserContext context = browser.newContext(new Browser.NewContextOptions()
    .setServiceWorkers(ServiceWorkerPolicy.BLOCK));
  • recordHarコンテキストオプションに.zipパスを使用すると、結果のHARが自動的にzipされます。

    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上で、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

ハイライト

お知らせ

  • 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

ハイライト

  • ロケーターが、別のロケーターを内部に含むことを確認する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のテスト
  • テストでWebアプリケーションにアクセスする前にサーバーサイドの状態を準備
  • ブラウザで何らかのアクションを実行した後のサーバーサイドの事後条件を検証

PlaywrightのPageに代わってリクエストを行うには、新しい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ファーストアサーションが導入されました。

以下の例を考えてみましょう

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は、取得されたノードが「Submitted」というテキストを持つまで、セレクター.statusを持つノードを再テストします。条件が満たされるか、タイムアウトに達するまで、ノードを繰り返し取得してチェックします。このタイムアウトはオプションとして渡すことができます。

詳細については、ドキュメントを参照してください。

ロケーターの改善

  • Locator.dragTo()

  • 各ロケーターは、含まれるテキストによってオプションでフィルタリングできるようになりました。

    page.locator("li", new Page.LocatorOptions().setHasText("my item"))
    .locator("button").click();

    詳細はロケーターのドキュメントを参照してください。

トレースの改善

トレースが、新しいsetSourcesオプションを使用して、Javaソースを記録されたトレースに埋め込めるようになりました。

tracing-java-sources

新しい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ファーストアサーションで使用できます。

Graphics

フレームロケーターは、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のトレースに、デフォルトでソースが含まれるようになりました(トレースオプションで無効にできます)。
  • トレースビューアでテスト名が表示されるようになりました。
  • ブラウザの詳細を含む新しいトレースメタデータタブ。
  • スナップショットにURLバーが追加されました。

image

HTMLレポートの更新

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

image

Ubuntu ARM64サポートなど

  • PlaywrightはUbuntu 20.04 ARM64をサポートするようになりました。Apple M1上のDocker内やRaspberry Pi上でPlaywrightテストを実行できるようになりました。

  • Playwrightを使用してLinuxにEdgeの安定版をインストールできるようになりました。

    mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install msedge"

新しいAPI

  • トレースが'title'オプションをサポートするようになりました。
  • ページナビゲーションが新しい'commit'待機オプションをサポートしました。

バージョン 1.16

🎭 Playwrightライブラリ

Locator.waitFor

指定された状態を持つ単一の要素にロケーターが解決されるまで待機します。デフォルトはstate: 'visible'です。

Locator orderSent = page.locator("#order-sent");
orderSent.waitFor();

Locator.waitFor()の詳細については、こちらをご覧ください。

🎭 Playwrightトレースビューア

  • 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()を使用することで、垂直方向または水平方向にスクロールできるようになりました。

📜 新しいHeaders API

これまでレスポンスの複数のヘッダー値を取得することはできませんでしたが、これが可能になり、追加のヘルパー関数も利用できるようになりました。

🌈 強制カラーエミュレーション

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));

📍 新しいLocators API

Locatorは、ページ上の要素に対するビューを表します。それは、任意の時点で要素を取得するのに十分なロジックをキャプチャします。

LocatorElementHandleの違いは、後者が特定の要素を指すのに対し、Locatorはその要素を取得する方法のロジックをキャプチャすることです。

また、ロケーターはデフォルトで「厳密」です!

Locator locator = page.locator("button");
locator.click();

詳細はドキュメントを参照してください。

🧩 実験的なReactVueセレクタエンジン

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

バージョン 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 が開きます

image

👉 詳細については、トレースビューアのドキュメントを参照してください。

ブラウザのバージョン

  • Chromium 93.0.4530.0
  • Mozilla Firefox 89.0
  • WebKit 14.2

このバージョンのPlaywrightは、以下の安定版チャネルでもテストされています

  • Google Chrome 91
  • Microsoft Edge 91

新しい API

バージョン 1.11

🎥 新しいビデオ: Playwright: 現代の Web 向けの新しいテスト自動化フレームワーク (スライド)

  • Playwright について話しました
  • 舞台裏のエンジニアリング作業を公開しました
  • 新機能のライブデモを行いました ✨
  • イベントを主催し、私たちを招待してくださった applitools特別に感謝します!

ブラウザのバージョン

  • Chromium 92.0.4498.0
  • Mozilla Firefox 89.0b6
  • WebKit 14.2

新しい API

バージョン 1.10

  • Playwright for Java v1.10安定版になりました
  • 新しい channels API を使用して、Playwright を Google Chrome および Microsoft Edge の安定版チャンネルで実行します。
  • Chromium のスクリーンショットは Mac & Windows で高速です。

バンドルされたブラウザのバージョン

  • Chromium 90.0.4430.0
  • Mozilla Firefox 87.0b10
  • WebKit 14.2

このバージョンのPlaywrightは、以下の安定版チャネルでもテストされています

  • Google Chrome 89
  • Microsoft Edge 89

新しい API

バージョン 1.9

  • Playwright Inspector は、テストの作成とデバッグを行うための新しい GUI ツールです。
    • Playwright スクリプトのステップ実行、一時停止、およびステップスルーによる行ごとのデバッグ
    • ユーザーアクションを記録することで新しいスクリプトを作成します。
    • 要素にホバーすることで、スクリプトの要素セレクターを生成します。
    • インスペクターを起動するには 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

新しい API

ブラウザのバージョン

  • Chromium 90.0.4392.0
  • Mozilla Firefox 85.0b5
  • WebKit 14.1

バージョン 1.7

  • 新しい Java SDK: Playwright for Java は、JavaScriptPython、および .NET バインディングと同等になりました。
  • ブラウザストレージ API: 認証を伴う自動化シナリオを簡素化するために、ブラウザストレージの状態 (Cookie、ローカルストレージ) を保存およびロードするための新しい便利な API。
  • 新しい CSS セレクター: より柔軟なセレクターに関するフィードバックを受け、セレクターの実装を刷新しました。Playwright 1.7 では新しい CSS 拡張機能が導入され、さらに多くの機能が近日中に提供される予定です。
  • 新しいウェブサイト: playwright.dev のドキュメントウェブサイトが更新され、現在は Docusaurus で構築されています。
  • Apple Silicon のサポート: WebKit および Chromium 用の Playwright ブラウザバイナリが Apple Silicon 用にビルドされるようになりました。

新しい API

ブラウザのバージョン

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1