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

リリースノート

バージョン 1.52

ハイライト

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

      expect(page.get_by_role('listitem', name='Ship v1.52')).to_contain_class('done')
  • Aria Snapshotsに2つの新しいプロパティが追加されました。厳密なマッチングのための/childrenと、リンクのための/urlです。

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

その他

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

破壊的変更

  • page.frame()でのベースURLマッチングはサポートされなくなりました。より便利なAPIのために、代わりにpage.frame_locator()への移行をお勧めします。
  • page.route()のようなメソッドでのグロブURLパターンは、?[]をサポートしなくなりました。代わりに正規表現を使用することをお勧めします。
  • メソッドroute.continue_()は、Cookieヘッダーのオーバーライドを許可しなくなりました。Cookieヘッダーが提供された場合、それは無視され、クッキーはブラウザのクッキーストアからロードされます。カスタムクッキーを設定するには、browser_context.add_cookies()を使用してください。
  • 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

ハイライト

  • browser_context.storage_state()に新しいオプションindexed_dbが追加され、IndexedDBの内容を保存・復元できるようになりました。これは、アプリケーションが認証トークン(Firebase Authenticationなど)を保存するためにIndexedDB APIを使用している場合に便利です。

    以下は認証ガイドに従った例です

    # Save storage state into the file. Make sure to include IndexedDB.
    storage = await context.storage_state(path="state.json", indexed_db=True)

    # Create a new context with the saved storage state.
    context = await browser.new_context(storage_state="state.json")
  • locator.filter()に新しいオプションvisibleが追加され、表示されている要素のみをマッチングできるようになりました。

    # Ignore invisible todo items.
    todo_items = page.get_by_test_id("todo-item").filter(visible=True)
    # Check there are exactly 3 visible ones.
    await expect(todo_items).to_have_count(3)
  • page.emulate_media()およびbrowser.new_context()メソッドに新しいオプションcontrastが追加され、prefers-contrastメディア機能をエミュレートできるようになりました。

  • 新しいオプションfail_on_status_codeにより、APIRequestContextを介して行われるすべてのフェッチリクエストが、2xxおよび3xx以外のレスポンスコードで例外をスローするようになります。

ブラウザバージョン

  • Chromium 134.0.6998.35
  • Mozilla Firefox 135.0
  • WebKit 18.4

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

  • Google Chrome 133
  • Microsoft Edge 133

バージョン 1.50

非同期Pytestプラグイン

その他

UIの更新

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

破壊的変更

ブラウザバージョン

  • Chromium 133.0.6943.16
  • Mozilla Firefox 134.0
  • WebKit 18.2

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

  • Google Chrome 132
  • Microsoft Edge 132

バージョン 1.49

Ariaスナップショット

新しいアサーションexpect(locator).to_match_aria_snapshot()は、期待されるアクセシビリティツリー(YAMLで表現)と比較することで、ページ構造を検証します。

page.goto("https://playwright.dokyumento.jp")
expect(page.locator('body')).to_match_aria_snapshot('''
- 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.aria_snapshot()を呼び出すことで生成できます。

詳細はariaスナップショットガイドをご覧ください。

トレースグループ

新しいメソッドtracing.group()により、トレースビューアーでアクションを視覚的にグループ化できます。

# All actions between group and group_end
# will be shown in the trace viewer as a group.
page.context.tracing.group("Open Playwright.dev > API")
page.goto("https://playwright.dokyumento.jp/")
page.get_by_role("link", name="API").click()
page.context.tracing.group_end()

破壊的変更: 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ブラウザであり、そのためより信頼性が高く、多くの機能を提供します。これにより、高精度なエンドツーエンドのウェブアプリテストやブラウザ拡張機能のテストに適しています。

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

pytest test_login.py --browser-channel chromium

その他

  • Ubuntu 20.04およびDebian 11でのWebKitのアップデートはこれ以上ありません。OSを新しいバージョンに更新することをお勧めします。
  • スナップショット内の<canvas>要素がプレビューを描画するようになりました。
  • Python 3.8はサポートされなくなりました。

ブラウザバージョン

  • Chromium 131.0.6778.33
  • Mozilla Firefox 132.0
  • WebKit 18.2

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

  • Google Chrome 130
  • Microsoft Edge 130

バージョン 1.48

WebSocketルーティング

新しいメソッドpage.route_web_socket()およびbrowser_context.route_web_socket()により、ページで開始されたWebSocket接続を傍受、変更、モックできるようになりました。以下は、"request""response"で応答することでWebSocket通信をモックする簡単な例です。

def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")

page.route_web_socket("/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))

詳細はWebSocketRouteを参照してください。

UIの更新

  • HTMLレポートに、アノテーションとテスト場所の新しい「コピー」ボタンが追加されました。
  • route.fulfill()のようなルートメソッドの呼び出しは、レポートやトレースビューアーに表示されなくなりました。代わりに、ネットワークタブでどのネットワークリクエストがルーティングされたかを確認できます。
  • ネットワークタブのリクエストに、新しい「cURLとしてコピー」および「fetchとしてコピー」ボタンが追加されました。

その他

  • 新しいメソッドpage.request_gc()は、メモリリークの検出に役立つ場合があります。
  • 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/python:v1.47.0は、Ubuntu 24.04 NobleをベースとしたPlaywrightイメージを提供するようになりました。22.04 jammyをベースとしたイメージを使用するには、代わりにmcr.microsoft.com/playwright/python:v1.47.0-jammyを使用してください。
  • Playwright Dockerイメージの:latest/:focal/:jammyタグは公開されなくなりました。より良い安定性と再現性のために、特定のバージョンに固定してください。
  • TLSクライアント証明書は、ファイルパスではなくバイトとしてclient_certificates.certclient_certificates.keyを渡すことで、メモリから渡せるようになりました。
  • locator.select_option()内のno_wait_afterは非推奨になりました。
  • 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.new_context()およびapi_request.new_context()のパラメータとして提供できます。以下のスニペットはhttps://example.comのクライアント証明書を設定します

context = browser.new_context(
client_certificates=[
{
"origin": "https://example.com",
"certPath": "client-certificates/cert.pem",
"keyPath": "client-certificates/key.pem",
}
],
)

トレースビューアーの更新

  • テキスト添付ファイルの内容が、添付ファイルペインでインラインでレンダリングされるようになりました。
  • route.continue_()のようなルーティングアクションを表示/非表示にする新しい設定。
  • リクエストメソッドとステータスがネットワーク詳細タブに表示されます。
  • ソースファイルの場所をクリップボードにコピーする新しいボタン。
  • メタデータペインにbase_urlが表示されるようになりました。

その他

  • api_request_context.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(time=datetime.datetime(2024, 2, 2, 8, 0, 0))
page.goto("https://:3333")

# Pretend that the user closed the laptop lid and opened it again at 10am.
# Pause the time once reached that point.
page.clock.pause_at(datetime.datetime(2024, 2, 2, 10, 0, 0))

# Assert the page state.
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:00:00 AM")

# Close the laptop lid again and open it at 10:30am.
page.clock.fast_forward("30:00")
expect(page.get_by_test_id("current-time")).to_have_text("2/2/2024, 10:30:00 AM")

詳細はクロックガイドを参照してください。

その他

  • メソッドlocator.set_input_files()が、<input type=file webkitdirectory>要素のディレクトリアップロードをサポートするようになりました。

    page.get_by_label("Upload directory").set_input_files('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")
  • api_request.new_context()に新しいプロパティhttpCredentials.sendが追加され、Authorizationヘッダーを常に送信するか、401 Unauthorizedへの応答としてのみ送信するかを選択できるようになりました。

  • PlaywrightはUbuntu 24.04でChromium、Firefox、WebKitをサポートするようになりました。

  • v1.45は、macOS 12 Monterey向けのWebKitアップデートを受け取る最後のリリースです。最新のWebKitを引き続き使用するためには、macOSを更新してください。

ブラウザバージョン

  • Chromium 127.0.6533.5
  • Mozilla Firefox 127.0
  • WebKit 17.4

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

  • Google Chrome 126
  • Microsoft Edge 126

バージョン 1.44

新しいAPI

アクセシビリティアサーション

  • expect(locator).to_have_accessible_name()は、要素が指定されたアクセシブルネームを持っているかチェックします

    locator = page.get_by_role("button")
    expect(locator).to_have_accessible_name("Submit")
  • expect(locator).to_have_accessible_description()は、要素が指定されたアクセシブルディスクリプションを持っているかチェックします

    locator = page.get_by_role("button")
    expect(locator).to_have_accessible_description("Upload a photo")
  • expect(locator).to_have_role()は、要素が指定されたARIAロールを持っているかチェックします

    locator = page.get_by_test_id("save-button")
    expect(locator).to_have_role("button")

ロケーターハンドラー

  • page.add_locator_handler()で追加されたハンドラーの実行後、Playwrightはハンドラーをトリガーしたオーバーレイがもう表示されなくなるまで待機するようになりました。新しいオプションno_wait_afterを使用してこの動作をオプトアウトできます。
  • page.add_locator_handler()の新しいオプションtimesを使用して、ハンドラーが実行される最大回数を指定できます。
  • page.add_locator_handler()のハンドラーが、ロケーターを引数として受け入れるようになりました。
  • 以前追加されたロケーターハンドラーを削除するための新しいメソッドpage.remove_locator_handler()
locator = page.get_by_text("This interstitial covers the button")
page.add_locator_handler(locator, lambda overlay: overlay.locator("#close").click(), times=3, no_wait_after=True)
# Run your tests that can be interrupted by the overlay.
# ...
page.remove_locator_handler(locator)

その他のオプション

ブラウザバージョン

  • Chromium 125.0.6422.14
  • Mozilla Firefox 125.0.1
  • WebKit 17.4

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

  • Google Chrome 124
  • Microsoft Edge 124

バージョン 1.43

新しいAPI

  • メソッドbrowser_context.clear_cookies()が、特定のクッキーのみを削除するフィルタリングをサポートするようになりました。

    # Clear all cookies.
    context.clear_cookies()
    # New: clear cookies with a particular name.
    context.clear_cookies(name="session-id")
    # New: clear cookies for a particular domain.
    context.clear_cookies(domain="my-origin.com")
  • 新しいメソッドlocator.content_frameは、LocatorオブジェクトをFrameLocatorに変換します。これは、どこかで取得したLocatorオブジェクトがあり、後でフレーム内のコンテンツとやり取りしたい場合に便利です。

    locator = page.locator("iframe[name='embedded']")
    # ...
    frame_locator = locator.content_frame
    frame_locator.getByRole("button").click()
  • 新しいメソッドframe_locator.ownerは、FrameLocatorオブジェクトをLocatorに変換します。これは、どこかで取得したFrameLocatorオブジェクトがあり、後でiframe要素とやり取りしたい場合に便利です。

    frame_locator = page.frame_locator("iframe[name='embedded']")
    # ...
    locator = frame_locator.owner
    expect(locator).to_be_visible()
  • CondaビルドがmacOS-arm64とLinux-arm64向けに公開されるようになりました。

ブラウザバージョン

  • Chromium 124.0.6367.8
  • Mozilla Firefox 124.0
  • WebKit 17.4

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

  • Google Chrome 123
  • Microsoft Edge 123

バージョン 1.42

新しいロケーターハンドラー

新しいメソッドpage.add_locator_handler()は、指定された要素が表示され、Playwrightのアクションをブロックする可能性がある場合に呼び出されるコールバックを登録します。コールバックはオーバーレイを非表示にすることができます。以下は、クッキーダイアログが表示されたときに閉じる例です。

# Setup the handler.
page.add_locator_handler(
page.get_by_role("heading", name="Hej! You are in control of your cookies."),
lambda: page.get_by_role("button", name="Accept all").click(),
)
# Write the test as usual.
page.goto("https://www.ikea.com/")
page.get_by_role("link", name="Collection of blue and white").click()
expect(page.get_by_role("heading", name="Light and easy")).to_be_visible()

新しい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

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

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

from playwright.sync_api import Page, expect

def test_example(page: Page) -> None:
page.goto("https://playwright.dokyumento.jp/")
page.get_by_role("link", name="Get started").click()
expect(page.get_by_label("Breadcrumbs").get_by_role("list")).to_contain_text("Installation")
expect(page.get_by_label("Search")).to_be_visible()
page.get_by_label("Search").click()
page.get_by_placeholder("Search docs").fill("locator")
expect(page.get_by_placeholder("Search docs")).to_have_value("locator");

新しいAPI

その他の変更

  • メソッドdownload.path()は、失敗およびキャンセルされたダウンロードに対してエラーをスローするようになりました。

ブラウザバージョン

  • 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

ハイライト

  • 新しいコマンドラインフラグ--full-page-screenshotにより、失敗時にフルページスクリーンショットを撮ることができます。
  • browser_context_argsマーカーを使用することで、単一のテストのコンテキストオプションをオーバーライドできるようになりました。
  • pytest-playwrightAnacondaで公開されるようになりました。

📚 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()メソッドに新しいオプションmask_colorが追加され、デフォルトのマスク色を変更できるようになりました。

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

    $ playwright uninstall # remove browsers installed by this installation
    $ playwright 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_()

    button = page.get_by_role("button").and_(page.get_by_title("Subscribe"))
  • 与えられたブラウザコンテキストの任意のページからのダイアログやコンソールメッセージを購読するための新しいイベントbrowser_context.on("console")browser_context.on("dialog")。イベントソースを特定するには、新しいメソッドconsole_message.pagedialog.pageを使用してください。

ブラウザバージョン

  • Chromium 114.0.5735.26
  • Mozilla Firefox 113.0
  • WebKit 16.4

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

  • Google Chrome 113
  • Microsoft Edge 113

バージョン 1.33

ロケーターの更新

  • 2つのロケーターのいずれかにマッチするロケーターを作成するには、locator.or_()を使用します。「新しいメール」ボタンをクリックしたいが、代わりにセキュリティ設定ダイアログが表示されることがあるシナリオを考えてみてください。この場合、「新しいメール」ボタンまたはダイアログのいずれかを待機し、それに応じて動作させることができます。

    new_email = page.get_by_role("button", name="New email")
    dialog = page.get_by_text("Confirm security settings")
    expect(new_email.or_(dialog)).is_visible()
    if (dialog.is_visible()):
    page.get_by_role("button", name="Dismiss").click()
    new_email.click()
  • locator.filter()の新しいオプションhas_nothas_not_textを使用して、特定の条件に一致しない要素を見つけます。

    row_locator = page.locator("tr")
    row_locator.filter(has_not_text="text in column 1").filter(
    has_not=page.get_by_role("button", name="column 2 button")
    ).screenshot()
  • 新しいウェブファーストアサーションexpect(locator).to_be_attached()を使用して、要素がページのDOMに存在することを確認します。要素がアタッチされ、かつ可視であることを保証するexpect(locator).to_be_visible()と混同しないでください。

新しいAPI

⚠️ 破壊的変更

  • mcr.microsoft.com/playwright/python:v1.33.0は、Ubuntu JammyをベースとしたPlaywrightイメージを提供するようになりました。focalをベースとしたイメージを使用するには、代わりにmcr.microsoft.com/playwright/python: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

  • 新しいアサーションexpect(locator).to_be_in_viewport()は、Intersection Observer APIに従って、ロケーターがビューポートと交差する要素を指していることを保証します。

    from playwright.sync_api import expect

    locator = page.get_by_role("button")

    # Make sure at least some part of element intersects viewport.
    expect(locator).to_be_in_viewport()

    # Make sure element is fully outside of viewport.
    expect(locator).not_to_be_in_viewport()

    # Make sure that at least half of the element intersects viewport.
    expect(locator).to_be_in_viewport(ratio=0.5)

その他

  • トレースビューアーのDOMスナップショットは、別のウィンドウで開けるようになりました。
  • メソッドroute.fetch()に新しいオプションmax_redirectsが追加されました。
  • 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()と、route.fulfill()の新しいオプションjson

    def handle_route(route: Route):
    # Fetch original settings.
    response = route.fetch()

    # Force settings theme to a predefined value.
    json = response.json()
    json["theme"] = "Solorized"

    # Fulfill with modified data.
    route.fulfill(json=json)


    page.route("**/api/settings", handle_route)
  • すべてのマッチする要素をイテレートするための新しいメソッドlocator.all()

    # Check all checkboxes!
    checkboxes = page.get_by_role("checkbox")
    for checkbox in checkboxes.all():
    checkbox.check()
  • locator.select_option()が値またはラベルでマッチングするようになりました。

    <select multiple>
    <option value="red">Red</option>
    <option value="green">Green</option>
    <option value="blue">Blue</option>
    </select>
    element.select_option("Red")

その他

ブラウザバージョン

  • Chromium 109.0.5414.46
  • Mozilla Firefox 107.0
  • WebKit 16.4

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

  • Google Chrome 108
  • Microsoft Edge 108

バージョン 1.28

Playwrightツール

  • CodeGenのライブロケーター。 「Explore」ツールを使用して、ページの任意の要素のロケーターを生成します。

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.get_by_label("User Name").fill("John")

page.get_by_label("Password").fill("secret-password")

page.get_by_role("button", name="Sign in").click()

expect(page.get_by_text("Welcome, John!")).to_be_visible()

これらすべてのメソッドは、LocatorFrameLocator、およびFrameクラスでも利用できます。

その他のハイライト

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

動作の変更

  • 空の値を持つexpect(locator).to_have_attribute()は、属性が欠落している場合にマッチしなくなりました。たとえば、以下のスニペットはbuttondisabled属性がない場合に成功します。

    expect(page.get_by_role("button")).to_have_attribute("disabled", "")

ブラウザバージョン

  • Chromium 107.0.5304.18
  • Mozilla Firefox 105.0.1
  • WebKit 16.0

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

  • Google Chrome 106
  • Microsoft Edge 106

バージョン 1.26

アサーション

その他のハイライト

  • api_request_context.get()などでリダイレクト数を制限するための新しいオプションmax_redirects
  • Python 3.11がサポートされるようになりました。

動作の変更

Playwright APIの多くは、すでにwait_until: "domcontentloaded"オプションをサポートしています。例えば

page.goto("https://playwright.dokyumento.jp", wait_until="domcontentloaded")

1.26より前は、これはすべてのiframeがDOMContentLoadedイベントを発火するまで待機していました。

Web仕様に合わせるため、'domcontentloaded'の値はターゲットフレームが'DOMContentLoaded'イベントを発火するのを待つだけになりました。すべてのiframeを待機するにはwait_until="load"を使用してください。

ブラウザのバージョン

  • Chromium 106.0.5249.30
  • Mozilla Firefox 104.0
  • WebKit 16.0

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

  • Google Chrome 105
  • Microsoft Edge 105

バージョン 1.25

お知らせ

  • 🎁 Ubuntu 22.04 Jammy Jellyfish の Docker イメージが出荷されるようになりました: mcr.microsoft.com/playwright/python:v1.34.0-jammy
  • 🪦 これは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 | ✅ | ✅ | ✅ |

新しい導入ドキュメント

Playwright の「はじめに」ドキュメントを、よりエンドツーエンドテストに焦点を当てるように書き直しました。playwright.devでご確認ください。

バージョン 1.23

ネットワークリプレイ

ネットワークトラフィックをHARファイルに記録し、そのトラフィックをテストで再利用できるようになりました。

ネットワークをHARファイルに記録するには

npx playwright open --save-har=github.har.zip https://github.com/microsoft

または、HARをプログラムで記録することもできます。

context = browser.new_context(record_har_path="github.har.zip")
# ... do stuff ...
context.close()

新しいメソッド page.route_from_har() または browser_context.route_from_har() を使用して、HARファイルから一致するレスポンスを提供します。

context.route_from_har("github.har.zip")

ドキュメントで詳細をご覧ください。

高度なルーティング

route.fallback() を使用して、ルーティングを他のハンドラに委譲できるようになりました。

次の例を考慮してください

# Remove a header from all requests
def remove_header_handler(route: Route) -> None:
headers = route.request.all_headers()
if "if-none-match" in headers:
del headers["if-none-match"]
route.fallback(headers=headers)

page.route("**/*", remove_header_handler)

# Abort all images
def abort_images_handler(route: Route) -> None:
if route.request.resource_type == "image":
route.abort()
else:
route.fallback()

page.route("**/*", abort_images_handler)

新しいメソッド page.route_from_har()browser_context.route_from_har() もルーティングに参加し、委譲できることに注意してください。

Web-First アサーションの更新

その他

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

    context = browser.new_context(service_workers="block")
    page = context.new_page()
  • recordHar コンテキストオプションに .zip パスを使用すると、結果のHARが自動的にzip圧縮されます。

    context = browser.new_context(record_har_path="github.har.zip")
  • HARを手動で編集する予定がある場合は、リプレイに不可欠な情報のみを記録する "minimal" HAR記録モードの使用を検討してください。

    context = browser.new_context(record_har_mode="minimal", record_har_path="har.har")
  • 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。

    buttons = page.locator("role=button")
    # ...
    submit_button = buttons.filter(has_text="Submit")
    submit_button.click()
  • Codegen が Pytest テストの生成をサポートするようになりました。

    Graphics

バージョン 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" です。

動作の変更点

  • mcr.microsoft.com/playwright docker イメージには Python が含まれなくなりました。Python がプリインストールされた Playwright 対応 docker イメージとして mcr.microsoft.com/playwright/python を使用してください。
  • Playwright は locator.set_input_files() API を介して大容量ファイル(数百MB)のアップロードをサポートするようになりました。

ブラウザのバージョン

  • Chromium 101.0.4951.26
  • Mozilla Firefox 98.0.2
  • WebKit 15.4

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

  • Google Chrome 100
  • Microsoft Edge 100

バージョン 1.20

ハイライト

お知らせ

  • 指定されたPython Dockerイメージ mcr.microsoft.com/playwright/python の提供を開始しました。Python を使用している場合は、こちらに切り替えてください。これは、JavaScriptの mcr.microsoft.com/playwright Dockerイメージに Python が含まれる最後のリリースです。
  • 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", has=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 Python 1.18 では、新しいAPIテストが導入され、Python から直接サーバーにリクエストを送信できるようになりました!これで、次のことが可能になります。

  • サーバーAPIをテストする
  • テストでウェブアプリケーションにアクセスする前に、サーバー側の状態を準備する
  • ブラウザで何らかのアクションを実行した後、サーバー側の事後条件を検証する

Playwrightのページに代わってリクエストを行うには、新しいpage.request APIを使用します。

# Do a GET request on behalf of page
res = page.request.get("http://example.com/foo.json")

ドキュメントで詳細をご覧ください。

Web-First アサーション

Playwright for Python 1.18 では、Web-First アサーションが導入されています。

次の例を考慮してください

from playwright.sync_api import Page, expect

def test_status_becomes_submitted(page: Page) -> None:
# ..
page.locator("#submit-button").click()
expect(page.locator(".status")).to_have_text("Submitted")

Playwright は、取得されたノードが "Submitted" テキストを持つまで、セレクター .status を持つノードを再テストし続けます。条件が満たされるかタイムアウトに達するまで、ノードを繰り返し取得し、確認します。このタイムアウトはオプションとして渡すことができます。

ドキュメントで詳細をご覧ください。

ロケーターの改善

  • locator.drag_to()

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

    page.locator("li", has_text="my item").locator("button").click()

    ロケーターのドキュメントで詳細をご覧ください。

新しいAPIと変更点

  • accept_downloads オプションがデフォルトで True になりました。
  • ソースをトレースに埋め込むための sources オプション。

ブラウザのバージョン

  • Chromium 99.0.4812.0
  • Mozilla Firefox 95.0
  • WebKit 15.4

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

  • Google Chrome 97
  • Microsoft Edge 97

バージョン 1.17

フレームロケーター

Playwright 1.17 は、ページの iframe へのロケーターであるフレームロケーターを導入しました。フレームロケーターは、iframe を取得し、その iframe 内の要素を特定するのに十分なロジックをカプセル化します。フレームロケーターはデフォルトで厳密であり、iframe の出現を待ち、Web-First アサーションで使用できます。

Graphics

フレームロケーターは、page.frame_locator() または locator.frame_locator() メソッドで作成できます。

locator = page.frame_locator("my-frame").locator("text=Submit")
locator.click()

ドキュメントで詳細をご覧ください。

トレースビューアの更新

Playwright Trace Viewer が https://trace.playwright.devオンラインで利用可能になりました!trace.zip ファイルをドラッグアンドドロップするだけで、その内容を検査できます。

: トレースファイルはどこにもアップロードされません。trace.playwright.dev は、トレースをローカルで処理するプログレッシブウェブアプリケーションです。

  • Playwright テストトレースにデフォルトでソースが含まれるようになりました(トレースオプションでオフにできます)。
  • トレースビューアでテスト名が表示されるようになりました。
  • ブラウザの詳細を含む新しいトレースメタデータタブ
  • スナップショットにURLバーが追加されました。

image

HTMLレポートの更新

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

image

Ubuntu ARM64 サポートなど

  • Playwright は現在、Ubuntu 20.04 ARM64 をサポートしています。これにより、Apple M1 および Raspberry Pi の Docker 内で Playwright テストを実行できるようになりました。

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

    npx playwright install msedge

新しいAPI

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

バージョン 1.16

🎭 Playwright ライブラリ

locator.wait_for

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

リストを扱う際に特に便利です。

order_sent = page.locator("#order-sent")
order_sent.wait_for()

locator.wait_for() の詳細をご覧ください。

Arm64 用の Docker サポート

Playwright Docker イメージが Arm64 向けに公開され、Apple Silicon で使用できるようになりました。

Docker統合の詳細をご覧ください。

🎭 Playwright トレースビューア

  • npx playwright 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.new_context() に渡すか、page.emulate_media() を呼び出すことで、forced-colors CSSメディア機能をエミュレートできるようになりました。

新しいAPI

  • page.route() が、このルートが何回一致する必要があるかを指定する新しい times オプションを受け入れるようになりました。
  • page.set_checked()locator.set_checked() が導入され、チェックボックスのチェック状態を設定できるようになりました。
  • request.sizes() 指定されたHTTPリクエストのリソースサイズ情報を返します。
  • tracing.start_chunk() - 新しいトレースチャンクを開始します。
  • tracing.stop_chunk() - 新しいトレースチャンクを停止します。

ブラウザのバージョン

  • Chromium 96.0.4641.0
  • Mozilla Firefox 92.0
  • WebKit 15.0

バージョン 1.14

⚡️ 新しい「厳密モード」

セレクターの曖昧さは、自動化テストにおける一般的な問題です。「厳密モード」は、セレクターが単一の要素を指していることを保証し、そうでない場合は例外をスローします。

アクション呼び出しに strict=true を渡して有効にします。

# This will throw if you have more than one button!
page.click("button", strict=True)

📍 新しい ロケーター API

ロケーターは、ページの要素へのビューを表します。それは、任意の時点で要素を取得するのに十分なロジックをカプセル化します。

ロケーターElementHandleの違いは、後者が特定の要素を指すのに対し、ロケーターはその要素を取得する方法のロジックをカプセル化する点です。

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

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.drag_and_drop() API を介して。
  • 🔎 拡張されたHAR。リクエストとレスポンスのボディサイズが含まれます。browser.new_context()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 アクションの前後のページレンダリング
  • スクリプト実行中のブラウザネットワーク

トレースは新しい browser_context.tracing API を使用して記録されます。

browser = chromium.launch()
context = browser.new_context()

# Start tracing before creating / navigating a page.
context.tracing.start(screenshots=True, snapshots=True)

page.goto("https://playwright.dokyumento.jp")

# Stop tracing and export it into a zip archive.
context.tracing.stop(path = "trace.zip")

トレースは後で Playwright CLI を使用して検査されます。

playwright 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: A New Test Automation Framework for the Modern Web (スライド)

  • Playwrightについて話しました
  • 舞台裏のエンジニアリング作業を披露しました。
  • 新機能のライブデモを行いました ✨
  • イベントのホストと招待をしてくださった applitools特別に感謝いたします!

ブラウザのバージョン

  • Chromium 92.0.4498.0
  • Mozilla Firefox 89.0b6
  • WebKit 14.2

新しいAPI

バージョン 1.10

  • Playwright for Java v1.10安定版になりました
  • 新しいチャネルAPIを使用して、Google ChromeMicrosoft 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

バージョン 1.9

  • Playwright Inspector は、テストの作成とデバッグに役立つ新しいGUIツールです。
    • Playwright スクリプトの1行ごとのデバッグ。再生、一時停止、ステップ実行が可能です。
    • ユーザーアクションを記録して新しいスクリプトを作成します。
    • 要素にホバーすることで、スクリプト用の要素セレクターを生成します。
    • 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: ブラウザのストレージ状態(クッキー、ローカルストレージ)を保存およびロードするための新しい便利なAPIが追加され、認証を伴う自動化シナリオが簡素化されました。
  • 新しいCSSセレクター: より柔軟なセレクターに関するフィードバックを受け、セレクターの実装を刷新しました。Playwright 1.7では新しいCSS拡張が導入され、近日中により多くの機能が追加される予定です。
  • 新しいウェブサイト: playwright.dev のドキュメントウェブサイトが更新され、Docusaurusで構築されるようになりました。
  • Apple Siliconのサポート: PlaywrightのWebKitおよびChromiumブラウザバイナリがApple Silicon向けにビルドされるようになりました。

新しいAPI

ブラウザのバージョン

  • Chromium 89.0.4344.0
  • Mozilla Firefox 84.0b9
  • WebKit 14.1