リリースノート
バージョン 1.51
ハイライト
-
BrowserContext.storageState() の新しいオプション setIndexedDB により、IndexedDB のコンテンツを保存および復元できます。アプリケーションが IndexedDB API を使用して Firebase Authentication などの認証トークンを保存する場合に役立ちます。
認証ガイド に従った例を次に示します。
// 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
その他
- Locator が指定された aria errormessage を持つ要素を指していることをアサートするために、メソッド assertThat(locator).hasAccessibleErrorMessage() が追加されました。
UI の更新
- Codegen に aria スナップショットを生成する要素を選択するための新しいボタンが追加されました。
- トレースのアクション API 呼び出しと合わせて、追加の詳細 (押されたキーなど) が表示されるようになりました。
- トレースでの
canvas
コンテンツの表示はエラーが発生しやすいです。表示はデフォルトで無効になり、キャンバスコンテンツを表示
UI 設定で有効にできます。 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() の新しい
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("http://localhost: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() が、一部の Cookie のみを削除するフィルターをサポートするようになりました。
// 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 アクションをブロックする場合があります。コールバックはオーバーレイを取り除くことができます。次に、Cookie ダイアログが表示されたときに閉じる例を示します。
// 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() は、2 つの新しいオプション setTagged と setOutline を受け入れます。
お知らせ
- ⚠️ 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 は、Chromium、Firefox、および WebKit 用の x86_64 と arm64 の両方で Debian 12 Bookworm をサポートするようになりました。何か問題が発生した場合はお知らせください!
Linux のサポートは次のようになります。
Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 12 | |
---|---|---|---|---|
Chromium | ✅ | ✅ | ✅ | ✅ |
WebKit | ✅ | ✅ | ✅ | ✅ |
Firefox | ✅ | ✅ | ✅ | ✅ |
ブラウザのバージョン
- Chromium 116.0.5845.82
- Mozilla Firefox 115.0
- WebKit 17.0
このバージョンは、以下の安定チャネルに対してもテスト済みです。
- Google Chrome 115
- Microsoft Edge 115
バージョン 1.36
🏝️ 夏のメンテナンスリリース。
ブラウザのバージョン
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
このバージョンは、以下の安定チャネルに対してもテスト済みです。
- Google Chrome 114
- Microsoft Edge 114
バージョン 1.35
ハイライト
-
メソッド Page.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
ロケーターの更新
-
2 つのロケーターのいずれかに一致するロケーターを作成するには、Locator.or() を使用します。「新しいメール」ボタンをクリックしたいが、代わりにセキュリティ設定ダイアログが表示されるシナリオを考えてみましょう。この場合、「新しいメール」ボタンまたはダイアログのいずれかを待機し、それに応じて対応できます。
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(); -
要素がページの DOM に存在することを確認するための新しい Web ファーストのアサーション assertThat(locator).isAttached() を使用します。要素がアタッチされ、表示されていることを確認する 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() が value または label で一致するようになりました
<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 のライブロケーター。 「Explore」ツールを使用して、ページ上の任意の要素のロケーターを生成します。
新しいAPI
ブラウザのバージョン
- Chromium 108.0.5359.29
- Mozilla Firefox 106.0
- WebKit 16.4
このバージョンは、以下の安定チャネルに対してもテスト済みです。
- Google Chrome 107
- Microsoft Edge 107
バージョン 1.27
ロケーター
これらの新しい API により、ロケーターの記述が楽しくなります
- テキストコンテンツで場所を特定する Page.getByText()。
- Page.getByRole()。 ARIA role、ARIA 属性、および アクセシブル名 で場所を特定します。
- 関連付けられたラベルのテキストでフォームコントロールの場所を特定する 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() がオープンシャドウルートを貫通するようになりました。
- 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
イベントを発行するのを待っていました。
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-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 role、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 role、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 を介して、大きなファイルアップロード (数百 MB) をサポートするようになりました。
ブラウザのバージョン
- 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 では、Java からサーバーに直接リクエストを送信できる新しい API テスト が導入されました。これで、次のことが可能になります
- サーバー 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-First アサーション
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 は、フェッチされたノードに "Submitted"
テキストが含まれるまで、セレクター .status
を持つノードを再テストします。条件が満たされるか、タイムアウトになるまで、ノードを再フェッチして何度もチェックします。このタイムアウトはオプションとして渡すことができます。
詳細については、ドキュメント を参照してください。
ロケーターの改善
-
各ロケーターを、それが含むテキストでオプションでフィルタリングできるようになりました
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 トレースビューアが https://trace.playwright.dev でオンラインで利用できるようになりました。trace.zip
ファイルをドラッグアンドドロップするだけで、その内容を調べることができます。
注: トレースファイルはどこにもアップロードされません。trace.playwright.dev は、トレースをローカルで処理する プログレッシブ Web アプリケーション です。
- Playwright Test トレースにデフォルトでソースが含まれるようになりました (これらはトレーシングオプションでオフにできます)
- トレースビューアにテスト名が表示されるようになりました
- ブラウザの詳細を含む新しいトレースメタデータタブ
- スナップショットに URL バーが表示されるようになりました
HTML レポートの更新
- HTML レポートが動的フィルタリングをサポートするようになりました
- レポートは、電子メールまたは Slack の添付ファイルとして送信できる単一の静的 HTML ファイルになりました。
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
バージョン 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() を使用すると、垂直方向または水平方向にスクロールできるようになりました。
📜 新しいヘッダー 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
⚡️ 新しい "strict" モード
セレクターのあいまいさは、自動化テストでよくある問題です。「strict」モード は、セレクターが単一の要素を指していることを保証し、そうでない場合は例外をスローします。
アクション呼び出しで setStrict(true)
を設定して、オプトインします。
// This will throw if you have more than one button!
page.click("button", new Page.ClickOptions().setStrict(true));
📍 新しい ロケーター API
ロケーターは、ページ上の要素 (複数可) へのビューを表します。特定の瞬間に要素を取得するのに十分なロジックをキャプチャします。
Locator と ElementHandle の違いは、後者が特定の要素を指しているのに対し、Locator はその要素を取得する方法のロジックをキャプチャすることです。
また、ロケーターはデフォルトで「strict」です!
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 トレースビューアに、パラメーター、戻り値、および
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 トレースビューアの紹介
Playwright トレースビューア は、スクリプト実行後に記録された 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
reducedMotion
オプション (Page.emulateMedia(), BrowserType.launchPersistentContext(), Browser.newContext(), Browser.newPage())- BrowserContext.onRequest(handler)
- BrowserContext.onRequestFailed(handler)
- BrowserContext.onRequestFinished(handler)
- BrowserContext.onResponse(handler)
tracesDir
オプション (BrowserType.launch(), BrowserType.launchPersistentContext())- 新しい BrowserContext.tracing() API 名前空間
- 新しい Download.page() メソッド
バージョン 1.11
🎥 新しい動画: Playwright: 最新の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
- 新しいメソッド
- Page.waitForURL() (URLへのナビゲーションを待機)
- Video.delete() および Video.saveAs() (画面録画を管理)
- 新しいオプション
screen
オプション (Browser.newContext() メソッド、window.screen
寸法をエミュレート)position
オプション (Page.check() および Page.uncheck() メソッド)trial
オプション (Page.check(), Page.uncheck(), Page.click(), Page.dblclick(), Page.hover(), Page.tap() のアクションをドライラン)
バージョン 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 スクリプトの 行ごとのデバッグ、再生、一時停止、ステップスルー付き。
- ユーザーアクションを記録 して新しいスクリプトを作成します。
- 要素にカーソルを合わせることで、スクリプトの 要素セレクターを生成 します。
PWDEBUG=1
環境変数を設定して Inspector を起動します
- ヘッドレスモードで 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 bindings と同等になりました。
- ブラウザーストレージ API: 認証による自動化シナリオを簡素化するために、ブラウザーストレージ状態 (Cookie、ローカルストレージ) を保存およびロードするための新しい便利な 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