Skip to content

chore: roll to Playwright v1.61.1 - #617

Merged
mxschmitt merged 7 commits into
mainfrom
roll/v1.61.1
Jun 26, 2026
Merged

chore: roll to Playwright v1.61.1#617
mxschmitt merged 7 commits into
mainfrom
roll/v1.61.1

Conversation

@mxschmitt

Copy link
Copy Markdown
Owner

Rolls the bundled driver from v1.60.0 to v1.61.1 and ports the new client surface, mirroring playwright-python#3102 and playwright-java#1929.

New APIs

  • WebStorage class + Page.LocalStorage() / Page.SessionStorage()
  • Credentials class (WebAuthn virtual authenticator) + BrowserContext.Credentials()
  • APIResponse.SecurityDetails() / APIResponse.ServerAddr()
  • Screencast cursor option + ScreencastFrame timestamp

Behavior changes ported

  • Page.close / runBeforeUnload protocol split (upstream #40780)
  • Assertion expect failures now arrive as protocol errors carrying errorDetails instead of a { matches: false } result — handled in both expect call-sites (locator + page assertions)
  • Client-certificate interceptor now scopes certs to the matching origin, so an origin-mismatch navigation aborts the TLS handshake (net::ERR_BAD_SSL_CLIENT_AUTH_CERT); the client-cert test was updated accordingly

Fixes / internal

  • scripts/apply-patch.sh: always check out the pinned tag (previously the first roll on a fresh submodule patched the old version)
  • screencast.go: guard onFrame with a mutex (latent data race surfaced by the new -race screencast test)
  • generateGoApi.js: honor the documented * alias: for new return types (VirtualCredential, WebStorageItem) and mark the new pure getters as not returning error

Also adds a repo-local roll-playwright Claude Code skill that automates this process.

Tests pass with -race across the suite.

Roll the bundled driver from v1.60.0 to v1.61.1 and port the new client surface.

New APIs (mirroring playwright-python #3102 / playwright-java #1929):
- WebStorage class + Page.LocalStorage()/SessionStorage()
- Credentials class (WebAuthn virtual authenticator) + BrowserContext.Credentials()
- APIResponse.SecurityDetails()/ServerAddr()
- Screencast cursor option + ScreencastFrame timestamp

Behavior changes ported:
- Page.close/runBeforeUnload protocol split (upstream #40780)
- assertion expect failures now arrive as protocol errors carrying errorDetails
  instead of a { matches: false } result (upstream); handled in both expect
  call-sites (locator + page assertions)
- client-certificate interceptor now scopes certs to the matching origin, so an
  origin-mismatch navigation aborts the TLS handshake; updated the test

Also fixes scripts/apply-patch.sh to always check out the pinned tag (previously
the first roll on a fresh submodule patched the old version).
Repo-local skill that automates rolling playwright-go to a new upstream version:
discovers API changes from the python/java/dotnet roll PRs and the upstream docs
diff, edits the langs gating in patches/main.patch, regenerates, and verifies
parity against the sibling clients. Includes find-changes.sh and verify-parity.sh.
- client-cert handshake-abort error wording varies by browser AND platform
  (chromium ERR_BAD_SSL_CLIENT_AUTH_CERT, firefox SSL_ERROR_UNKNOWN, webkit
  'Certificate is required' on linux/macos / 'Failure when receiving data' on
  windows); match any known variant
- Firefox websocket error is now ': 404' like other browsers (was
  CLOSE_ABNORMAL) since v1.61
- replace deprecated WaitForTimeout with time.Sleep; check Close/Stop returns
…overage

- getByTestId JSON-quotes the test-id attribute name when it contains a comma,
  so a comma-separated list set via SetTestIdAttribute (upstream #40844) matches
  any of the named attributes instead of producing an invalid selector. Mirrors
  upstream encodeTestIdAttributeName.
- add tests matching the sibling clients: comma-separated getByTestId, session
  storage items/remove/clear, local-vs-session independence.
Make Step 6b mandatory and exhaustive: every test python/java/dotnet add in
their roll must have a Go counterpart (port the union; a sibling test often
exposes a Go feature gap, e.g. the v1.61 comma-testid bug). verify-parity.sh
now lists each sibling's added test FUNCTION names, not just files. Step 7
requires running new tests on all three browsers (engine-specific behavior).
Capture the parts of a roll that happen after the PR opens: read gh pr checks,
expect cross-browser/cross-OS failures that don't reproduce locally, Flakiness.io
is a reporter not a gate; and how to rebase the run.go/README.md conflicts that a
roll always produces when main moves. Minor: align Step 9/refs wording with the
function-name listing verify-parity.sh now emits.
…ing loop

Step 10 now creates the PR (gh pr create) once local checks pass, without
waiting to be asked. Step 11 is an explicit loop: gh run watch --exit-status ->
read each failure's --log-failed -> triage (my code / engine-OS-specific /
behavior change) -> fix -> re-push, repeat until gh pr checks shows 0 fail.
Reconcile 'When to ask': work autonomously through PR + CI, but never merge.
@mxschmitt
mxschmitt merged commit 8c84674 into main Jun 26, 2026
40 of 44 checks passed
@mxschmitt
mxschmitt deleted the roll/v1.61.1 branch June 26, 2026 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant