Playwright v1.61.0: WebAuthn-Passkeys, eine echte WebStorage-API und Trace-artige Video-Modi für den Test-Runner

Playwright v1.61.0: WebAuthn-Passkeys, eine echte WebStorage-API und Trace-artige Video-Modi für den Test-Runner

lschvn

Playwright v1.61.0 ist heute, am 15. Juni 2026 um 10:05 UTC erschienen, etwa sechs Wochen nach v1.60.0 am 11. Mai. Es ist ein Feature-Release ohne Breaking Changes, und drei der neuen APIs adressieren direkt langjährige Lücken dabei, wie Teams Passkey-Flows testen, Browser-Storage manipulieren und flaky CI-Runs nachvollziehen. Die Release bringt außerdem die Browser-Kanäle Chromium 149, Firefox 151 und WebKit 26.5 und nimmt Ubuntu 26.04 in die Liste der unterstützten Plattformen auf.

Ein virtueller WebAuthn-Authenticator für Passkey-Tests

Das Headline-Feature ist browserContext.credentials, ein virtueller Authenticator, der Passkeys registrieren und navigator.credentials.create() / navigator.credentials.get()-Zeremonien in der Seite beantworten kann. Es wird kein echter Hardware-Key benötigt, und es funktioniert in jedem Browser-Kanal, Chromium, Firefox und WebKit.

Der typische Ablauf ist, einen Passkey zu seeden, den das Backend bereits für einen Test-User provisioniert hat, und dann den navigator.credentials.get() der Seite mit diesem Key auf den Challenge antworten zu lassen:

const context = await browser.newContext();

// Seeded einen Passkey, den euer Backend für einen Test-User provisioniert hat.
await context.credentials.create('example.com', {
  id: credentialId,
  userHandle,
  privateKey,
  publicKey,
});
await context.credentials.install();

const page = await context.newPage();
await page.goto('https://example.com/login');
// Der navigator.credentials.get() der Seite wird mit dem geseedeten Passkey beantwortet.

Die Release-Notes nennen ein alternatives Muster: einen One-Shot-Setup-Test laufen lassen, der einen Passkey über die echte UI registriert, ihn mit credentials.get() zurückliest und in den Rest der Suite re-seeded. Das ist die richtige Form für Projekte, die feststellen, dass Passkey-Support zum Login nötig ist und diese Tests vorher komplett übersprungen haben.

Die praktische Konsequenz ist, dass der explicit resource management-Patch, den Bun in 1.3.12 geliefert hat, jetzt eine viel dünnere Ausrede ist: einen Passkey-only-Login zu testen erforderte vorher einen echten YubiKey auf dem CI-Runner, einen Custom-Treiber für einen virtuellen Authenticator oder das Überspringen des Flows. Nach 1.61.0 ist es ein credentials.create-Aufruf in einem beforeEach.

Eine erstklassige page.localStorage- und page.sessionStorage-API

Das zweite Stück ist die neue WebStorage-API, exponiert als page.localStorage und page.sessionStorage. Reads und Writes gehen direkt in den Storage der Seite für die aktuelle Origin, ohne page.evaluate-Round-Trip:

await page.localStorage.setItem('token', 'abc');
const token = await page.localStorage.getItem('token');
const items = await page.sessionStorage.items();

page.evaluate(() => localStorage.setItem('token', 'abc')) funktioniert weiterhin, aber die neue API ist eine erstklassige Protokoll-Kommando in derselben Form, die Playwright bereits für Cookies und Storage-State verwendet. Das macht sie auf Hintergrund-Seiten, auf Service Workern und in Tests nutzbar, die einfach nur einen Storage-Zustand asserten wollen, ohne durch den JS-Kontext zu hüpfen.

Netzwerk: securityDetails() und serverAddr() auf API-Responses

Die neuen apiResponse.securityDetails() und apiResponse.serverAddr() spiegeln die Browser-seitigen response.securityDetails() und response.serverAddr(). Für Teams, die HTTP über Playwrights request- / APIRequestContext-API abfangen und replay-en, ist das endlich ein Weg, die ausgehandelte TLS-Version, die Cipher, den Zertifikats-Subject und die aufgelöste Server-Adresse in einem einzigen Test zu asserten. Es ist dieselbe Klasse von Capability, die die esbuild-0.28.1-Dev-Server-Path-Traversal-Story auf Offense-Seite getrieben hat; hier ist es die Defense-Seite.

Test-Runner: Trace-artige Video-Modi und expect.soft.poll

Der Runner nimmt drei Video-Modi auf, die testOptions.video auf Parität mit testOptions.trace bringen. Die neuen Werte sind 'on-all-retries', 'retain-on-first-failure' und 'retain-on-failure-and-retries'. Die Video-Modi-Tabelle dokumentiert, welche Runs in welchem Modus aufgenommen und behalten werden. Für CI ist 'retain-on-failure' der offensichtliche Gewinn: nur kaputte Runs verbrauchen Disk.

Weitere Runner-Verbesserungen sind klein, aber nützlich:

  • expect.soft.poll(...) wird jetzt unterstützt, die Polling-Form von expect.soft. Fehlgeschlagene Assertions werden am Test vermerkt, aber die Ausführung läuft weiter, sodass ein Dashboard-Test fünf lose gekoppelte Dinge asserten und am Ende alle Fehler berichten kann, statt das erste zu fixen, neu zu laufen, das nächste zu finden und zu wiederholen.
  • fullConfig.argv ist ein Snapshot von process.argv aus dem Runner-Prozess, den Reporter lesen können, um Custom-Argumente hinter dem ---Separator offenzulegen.
  • fullConfig.failOnFlakyTests spiegelt die Config-Option, sodass Reporter erklären können, warum ein als flaky markierter Run fehlgeschlagen ist.
  • testInfo.errors listet jetzt jeden Sub-Fehler eines AggregateError als separaten Eintrag, sodass eine Multi-Failure-Assertion im Report nicht mehr zu einer einzelnen Zeile kollabiert.
  • Eine neue CLI-Kurzform -G für --grep-invert.

Browser-Versionen, HAR und Plattform-Support

Die Release pinnt Chromium 149.0.7827.55, Mozilla Firefox 151.0 und WebKit 26.5 und wird zusätzlich gegen die Stable-Kanäle Google Chrome 149 und Microsoft Edge 149 getestet. Ubuntu 26.04 ist jetzt eine unterstützte Plattform.

HAR- und Trace-Aufzeichnungen enthalten jetzt WebSocket-Requests. Vor 1.61.0 haben Playwrights HAR- und Trace-Aufzeichnungen nur HTTP-Traffic erfasst, sodass eine Regression, die nur über eine WebSocket-Verbindung auftrat (Chat, Live-Cursor, Echtzeit-Updates, Server-Sent-Events, die über einen einzelnen Socket multiplexed sind), im Artefakt unsichtbar war. Das Network-Panel des Trace-Viewers und die HAR-Datei enthalten jetzt beide die WebSocket-Frames, was die meisten Teams vom ersten Tag an erwartet haben.

Kleinere Touches

  • Eine neue artifactsDir-Option auf browserType.connectOverCDP() steuert, wo Traces und Downloads landen, wenn man sich an einen existierenden Browser anhängt.
  • Eine neue cursor-Option auf screencast.showActions() steuert die Cursor-Dekoration, die für Pointer-Aktionen gerendert wird.
  • Der onFrame-Callback in screencast.start() erhält jetzt einen timestamp, wann die Frame vom Browser präsentiert wurde.

Für die meisten Teams ist das Upgrade bun install @playwright/test@latest und eine Neuinstallation der Browser. Die neuen APIs sind additiv, kein Flag-Day. Die Passkey- und WebStorage-APIs lohnen eine kleine Migration, weil sie die Test-Suite deutlich ehrlicher machen, was die Produktions-App tatsächlich handhaben muss.

Häufig gestellte Fragen

Verwandte Artikel

Weitere Berichterstattung zu ähnlichen Themen und Tags.

esbuild 0.28.1: Erstes Release seit zwei Monaten mit einer High-Severity-Deno-RCE, einem Windows-Path-Traversal und einem `using`-Disposal-Bug
security

esbuild 0.28.1: Erstes Release seit zwei Monaten mit einer High-Severity-Deno-RCE, einem Windows-Path-Traversal und einem `using`-Disposal-Bug

esbuild v0.28.1 (11. Juni 2026) ist das erste Release seit April. Es behebt eine CVSS-8.1-Remote-Code-Execution in der Deno-API via NPM_CONFIG_REGISTRY, einen nur Windows betreffenden Path-Traversal im Dev-Server und einen Minifier-Bug, der das Ressourcen-Disposal mit `using` und `await using` stillschweigend kaputtgemacht hat.
Google JSIR: Eine MLIR-basierte Zwischenrepräsentation für JavaScript-Analyse
security

Google JSIR: Eine MLIR-basierte Zwischenrepräsentation für JavaScript-Analyse

Google hat JSIR quelloffen gemacht, ein neuartiges JavaScript-Analysewerkzeug auf MLIR-Basis. Es unterstützt sowohl hochrangige Datenflussanalyse als auch verlustfreie Quellcode-Transformation, intern genutzt für Hermes-Bytecode-Dekompilierung und KI-gestützte JavaScript-Deobfuskation.
pnpm 11.7 bringt `frozenStore` für Read-Only-Dateisysteme, lässt pacquet Abhängigkeiten auflösen und schließt einen Lockfile-Path-Traversal
security

pnpm 11.7 bringt `frozenStore` für Read-Only-Dateisysteme, lässt pacquet Abhängigkeiten auflösen und schließt einen Lockfile-Path-Traversal

pnpm 11.7.0 (15. Juni 2026) liefert vier Kernänderungen: einen `--frozen-store`-Install-Modus für Nix-Stores, OCI-Layer und andere Read-Only-Mounts; die Delegation der Abhängigkeitsauflösung an den pacquet-Rust-Port (nicht nur die Materialisierung); ein optionales `--batch`-Flag für `pnpm publish --recursive`; und einen Security-Fix, der Path-Traversal- und reservierte Aliasse (`.bin`, `.pnpm`, `node_modules`, `../../escape`) aus dem Lockfile zurückweist.

Kommentare

Anmelden Melden Sie sich an, um an der Diskussion teilzunehmen.

Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.