リリースノート
バージョン 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
その他
- Locatorが指定されたaria errormessageを持つ要素を指していることをアサートするメソッドassertThat(locator).hasAccessibleErrorMessage()を追加しました。
UI更新
- CodegenにAriaスナップショットを生成するための要素選択ボタンが追加されました。
- アクションAPI呼び出しのトレースに、追加の詳細情報(押されたキーなど)が表示されるようになりました。
- トレースでの
canvas
コンテンツの表示はエラーが発生しやすいため、デフォルトで無効になりました。UI設定のDisplay canvas content
で有効にできます。 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を参照してください。オプトイン後に問題が見つかった場合は、ぜひ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によるフィルタリング
- クエリ文字列パラメータのより良い表示
- フォントアセットのプレビュー
その他
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("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()は、新しい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
ロケーターの更新
-
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ファーストアサーション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
イベントを発火するまで待機していました。
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ファーストアサーションの更新
<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が自動的に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
ハイライト
- メソッド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
ハイライト
-
ロケーターが、別のロケーターを内部に含むことを確認する
has
オプションをサポートするようになりました。page.locator("article", new Page.LocatorOptions().setHas(page.locator(".highlight"))).click();
詳細はロケーターのドキュメントを参照してください。
-
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
を持つノードを再テストします。条件が満たされるか、タイムアウトに達するまで、ノードを繰り返し取得してチェックします。このタイムアウトはオプションとして渡すことができます。
詳細については、ドキュメントを参照してください。
ロケーターの改善
-
各ロケーターは、含まれるテキストによってオプションでフィルタリングできるようになりました。
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ファーストアサーションで使用できます。
フレームロケーターは、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バーが追加されました。
HTMLレポートの更新
- HTMLレポートが動的フィルタリングをサポートしました。
- レポートは単一の静的HTMLファイルになり、メールやSlackの添付ファイルとして送信できるようになりました。
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()を使用することで、垂直方向または水平方向にスクロールできるようになりました。
📜 新しいHeaders API
これまでレスポンスの複数のヘッダー値を取得することはできませんでしたが、これが可能になり、追加のヘルパー関数も利用できるようになりました。
- Request.allHeaders()
- Request.headersArray()
- Request.headerValue()
- Response.allHeaders()
- Response.headersArray()
- Response.headerValue()
- Response.headerValues()
🌈 強制カラーエミュレーション
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は、ページ上の要素に対するビューを表します。それは、任意の時点で要素を取得するのに十分なロジックをキャプチャします。
LocatorとElementHandleの違いは、後者が特定の要素を指すのに対し、Locatorはその要素を取得する方法のロジックをキャプチャすることです。
また、ロケーターはデフォルトで「厳密」です!
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: 現代の 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 が安定版になりました!
- 新しい 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
- BrowserType.launch() が新しい
'channel'
オプションを受け入れるようになりました。詳細については、ドキュメントを参照してください。
バージョン 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
-
: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: 認証を伴う自動化シナリオを簡素化するために、ブラウザストレージの状態 (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