Skip to main content
Version: 1.x

Playwright Compatibility

Praman declares @playwright/test as a peer dependency with the range >=1.57.0 <2.0.0. This page documents which versions are actively tested and recommended.

Playwright Version Matrix​

Playwright VersionStatusCI-TestedNotes
1.57.xSupportedYesMinimum supported version
1.58.xSupportedNoCompatible, between the tested floor and top
1.59.xSupportedNoScreencast, CLI agents, ariaSnapshotDepth
1.60.xSupportedNoARIA snapshots, highlight styles, test.abort
1.61.xSupportedNoWeb Storage API, soft poll, video retain modes
1.62.xSupportedNolocator.waitForFunction, WebP, AbortSignal
1.63.xRecommendedYesTest locks, subtree frameLocator, step params
2.xNot supportedNoBreaking API changes expected

Three jobs bound this range on every CI run:

JobWhat it pinsWhat it proves
Playwright Floor (1.57.0)the declared minimumthe unit suite passes at the floor
Playwright Ceiling (latest)@playwright/test@latestthe newest catalogued flags are active, and that Playwright has not published a minor Praman hasn't catalogued
UI5 Bridge Smoke (PW 1.57.0 / 1.63.0)both ends of the rangea real Chromium drives the UI5 bridge against live UI5 1.146.0 apps

The ceiling job fails on an uncatalogued Playwright minor, so the feature table below cannot quietly fall behind the code.

The bridge smoke job is the only CI job that launches a browser. It targets public UI5 demo apps on the SAP CDN, which bundle their own mock OData server, so it needs no SAP system and no secrets — and each matrix leg downloads the Chromium revision its own Playwright version pins, so the bridge is exercised against the browser each supported version actually ships with.

Versions between the floor and the ceiling are supported via feature detection but are not individually exercised. The SAP-system integration matrices in canary.yml and release.yml list more versions, but they are gated on a SAP_CLOUD_BASE_URL secret and skip when it is absent — treat them as opt-in coverage for a configured fork, not as a guarantee this project makes.

TypeScript Version Matrix​

TypeScript VersionStatusCI-TestedNotes
5.5 – 5.9SupportedNoCompatible, not actively tested
6.xSupportedYesPublished types compiled with TS 6.0.3
7.xRecommendedYesFull inference, strict mode validated

Tech Stack​

ComponentVersion
Playwright1.63.0 (peer: >=1.57.0)
TypeScript6.0.3 (supports 7.x)
Node.js>=22
ESLint10.12.0 (11 plugins)
Zod4.6.5
Pino10.4.0
Buildtsup 8.5.1 (ESM + CJS)
Test RunnerVitest 5.0.3
AI SDKsAnthropic >=0.78, OpenAI >=6.22
OpenTelemetrySDK >=0.212 (optional)

Minimum Version Enforcement​

At startup, Praman calls assertMinVersion('1.57.0') from the internal compatibility layer. If an older version is detected, a clear error is thrown before any tests execute.

Feature Detection​

Praman uses runtime feature detection (not version checks) to enable capabilities introduced in newer Playwright releases:

FeatureRequired VersionDetection Key
Clock API1.45+hasClockAPI
ARIA snapshots1.49+hasAriaSnapshot
Screencast API1.59+hasScreencastAPI
ARIA snapshot depth1.59+hasAriaSnapshotDepth
Set storage state1.59+hasSetStorageState
Locator normalize1.59+hasLocatorNormalize
URL pattern matcher1.59+hasURLPatternMatcher
Test abort1.60+hasTestAbort
getByRole({ description })1.60+hasGetByRoleDescription
Page ARIA snapshot1.60+hasPageAriaSnapshot
ARIA snapshot boxes1.60+hasAriaSnapshotBoxes
Tracing HAR1.60+hasTracingHAR
Locator drop1.60+hasLocatorDrop
Locator highlight style1.60+hasLocatorHighlightStyle
Browser context event1.60+hasBrowserContextEvent
WebAuthn credentials1.61+hasWebAuthnCredentials
Web Storage API1.61+hasWebStorageAPI
Soft poll1.61+hasSoftPoll
Screencast timestamp1.61+hasScreencastTimestamp
Video retain modes1.61+hasVideoRetainModes
locator.waitForFunction()1.62+hasLocatorWaitForFunction
WebP screenshots1.62+hasWebPScreenshots
retryStrategy: 'isolated'1.62+hasRetryStrategyIsolated
AbortSignal support1.62+hasAbortSignal
apiResponse.timing()1.62+hasApiResponseTiming
scroll: 'none' on actions1.62+hasScrollOption
Test locks1.63+hasTestLocks
Subtree frameLocator()1.63+hasSubtreeFrameLocator
locator.visible()1.63+hasVisibleLocator
Step params / subtitle1.63+hasStepParams
ariaSnapshotJSON()1.63+hasAriaSnapshotJSON
dialogclosed event1.63+hasDialogClosedEvent
OPFS in storage state1.63+hasOpfsStorageState
httpCredentials array1.63+hasHttpCredentialsArray

Test locks are the one flag with a user-facing guard: requireTestLocks() throws below 1.63 rather than letting a silently-ignored lock run your tests in parallel. See Parallel Execution.

Praman's behaviour when a feature is unavailable depends on whether the floor has an equivalent — the policy is stated once in src/core/compat/playwright-compat.ts and applies to every flag above:

  • An equivalent exists → degrade transparently and log at debug which path was taken. locator.waitForFunction is the reference case: a page-scoped page.waitForFunction expresses the same predicate.
  • No equivalent on the floor → throw ERR_COMPAT_FEATURE_UNAVAILABLE, naming the required version. The Web Storage API is the reference case: there is no older page.localStorage, so degrading would silently give wrong results instead of an actionable error.

A special case worth knowing: hasConsoleMessageFilter guards an option, not a method. page.consoleMessages() exists at the 1.57 floor but takes no arguments, and JavaScript ignores surplus arguments — so passing { filter } on an older runtime returns every message while the caller believes it was filtered. Always guard the option, not the call.

How to Upgrade Playwright​

npm install --save-dev @playwright/test@latest
npx playwright install

After upgrading, run your test suite to verify compatibility:

npx playwright test --reporter=list

Reporting Issues​

If you encounter a compatibility issue with a specific Playwright version, please open a GitHub issue with:

  • The exact Playwright version (npx playwright --version)
  • The Praman version (npm ls playwright-praman)
  • The error message or unexpected behavior