the terminal reporters automatically append a test's tags to its title, which clutters the output when a test declares many tags
add an off-by-default `omitTags` option that suppresses the appended tags in the `list`, `line`, `dot`, `github`, and `junit` reporters
note that tags written directly into a test title are left untouched
fixes <https://github.com/microsoft/playwright/issues/41945>
`browser_type` escapes user input but `browser_press_sequentially` right below it doesn't. Something like "it's working" ends up producing invalid JS in the codegen. Looked around and a "few other tools" had the same gap while `evaluate.ts`, `form.ts`, `verify.ts` already handle it fine through `escapeWithQuotes()`. Figured it made sense to just bring the rest in line.
`defaultCacheDirectory` used to be computed inside the `PLAYWRIGHT_BROWSERS_PATH` branch of `registryDirectory`, so setting that variable skipped the platform check
<https://github.com/microsoft/playwright/pull/39423> hoisted it into an eagerly evaluated module constant, so it now throws `Unsupported platform: <platform>` at import, before `registryDirectory` consults `PLAYWRIGHT_BROWSERS_PATH`
this regressed setups that point `PLAYWRIGHT_BROWSERS_PATH` at their own browsers on platforms without a default cache directory, such as Android/Termux
evaluate `defaultCacheDirectory`, `defaultRegistryDirectory`, and `baseDaemonDir` lazily so an explicit `PLAYWRIGHT_BROWSERS_PATH` is honored before any default cache directory is computed
`registryDirectory` still throws eagerly when no override is set, since there is nowhere to place browsers
fixes <https://github.com/microsoft/playwright/issues/41852>
WebKit has no `Runtime.addBinding`, so the webview delegate has to handle bindings through `console.debug(BINDING_CALL_TAG, payload)` instead
the console message carries no execution context id, so every call was dispatched against the main frame, meaning a callback fired from a child frame (e.g. `frame.evaluate(..., { exposeFunctions: true })`) reached the wrong `BindingsController` and never resolved the calling frame's pending promise, hanging until the 30s timeout tore the page down
tag each call with an empty object created in the calling context, as an `objectId` carries the injected script id, meaning that the host can route the call to the frame it came from and release the marker afterwards
when a browser binary is missing, `throwIfExecutableMissing` caught playwright-core's `Executable doesn't exist at <path>` and rethrew a generic `Browser "<name>" is not installed`, dropping the path
that path holds the version-specific directory (e.g. `firefox-1534`), which is what tells a genuinely missing install apart from a version mismatch
browsers from a standalone `playwright install` land in a differently-versioned directory than the bundled `playwright-core` expects
keep the path in the rethrown message so the mismatch is diagnosable
this is a further improvement for <https://github.com/microsoft/playwright/pull/40867>
referenced in <https://github.com/microsoft/playwright/issues/41871>
extension mode validated that the playwright extension was installed in any of Chrome's profiles under the user data directory, but then launched without `--profile-directory`, meaning it could open a different profile than the one that was checked
when the opened profile lacks the extension, `connect.html` can't load and the connection silently hangs for ~120s
resolve the profile that actually has the extension (preferring the last-used profile from Local State so we don't switch away from the user's session unnecessarily) and pass it as `--profile-directory`
fixes <https://github.com/microsoft/playwright/issues/41916>
`<meter>` and `<progress>` are labelable, but the html-aam per-element name step only ran the associated-labels branch for `TEXTAREA`/`SELECT`/`INPUT` (plus `BUTTON`/`OUTPUT`)
fixes <https://github.com/microsoft/playwright/issues/41891>
the `search` branch only checked `hasAttribute('list')`, so an `input[type=search]` whose `list` points at nothing or a non-`<datalist>` element was reported as `combobox`, unlike the neighbouring `text`/`email`/... branch and unlike what the browser computes (`searchbox`)
resolve the `list` idref and only map to `combobox` when it points at an actual `<datalist>`, matching the html spec's concept-input-list
fixes <https://github.com/microsoft/playwright/issues/41899>
`loadConfig` fell back to INI parsing on any JSON error, so a typo'd JSON config (e.g. a trailing comma) was silently accepted as INI: the intended settings were dropped for the defaults and the raw JSON kept as an unused top-level key
surface the original `SyntaxError` when the input is a JSON object (`{`) while keeping the INI fallback (including files whose first line is a `[section]` header) and BOM handling
fixes <https://github.com/microsoft/playwright/issues/41893>