8047 Commits
Author SHA1 Message Date
Dmitry GozmanandGitHub d7775efb41 feat(selectors): add pierceFrames context option (#42033) 2026-07-29 21:56:26 +01:00
Dmitry GozmanandGitHub 887b421089 fix(mcp): clear dialog modal state when dialog is closed out of band (#42032) 2026-07-29 21:55:43 +01:00
Dmitry GozmanandGitHub beaf223604 chore: remove firefox-beta and chromium-tip-of-tree channels (#42030) 2026-07-29 17:09:36 +01:00
Dmitry GozmanandGitHub d0c1b736b0 feat(selectors): support entering frames while piercing (#42031) 2026-07-29 17:05:48 +01:00
Dmitry GozmanandGitHub e3db3e034d fix(aria): keep icon-only clickable elements in ai snapshots (#42034) 2026-07-29 16:44:26 +01:00
b8e76e5990 fix(recorder): don't record duplicate goto for repeated navigation signal (#42027)
Co-authored-by: Copilot <[email protected]>
2026-07-29 10:47:25 +01:00
Dmitry GozmanandGitHub 4bb09e9795 chore: remove ubuntu 20.04 browser builds (#42017) 2026-07-29 10:25:10 +01:00
Dmitry GozmanandGitHub 974edd3feb feat(dialog): add dialogclosed event (#42014) 2026-07-28 16:51:57 +01:00
Dmitry GozmanandGitHub 05709a54bc fix(selectors): respect scope when piercing frames (#42018) 2026-07-28 16:46:59 +01:00
Pavel FeldmanandGitHub 63ff5dc1b3 fix(runner): do not force-kill worker while its teardown is in progress (#42010) 2026-07-28 08:44:43 -07:00
Dmitry GozmanandGitHub 205633dc53 devops: do not swallow doc generation failures when rolling browsers (#42016) 2026-07-28 16:42:48 +01:00
himasree424andGitHub 75689d1899 feat(cli): add --add-reporter to append reporters without replacing existing config (#41993) 2026-07-28 13:09:25 +01:00
Dmitry GozmanandGitHub 748f7bc9e4 fix(types): support branded primitives in evaluate arguments (#42009) 2026-07-28 10:15:33 +01:00
microsoft-playwright-automation[bot]andGitHub d529911d66 feat(chromium): roll to r1235 (#41974) 2026-07-27 17:25:18 -07:00
microsoft-playwright-automation[bot]andGitHub 1ae6d406cf feat(webkit): roll to r2340 (#42011) 2026-07-27 17:20:56 -07:00
Pravin IreriandGitHub 59120d0639 fix(aria): preserve names from collapsed text contributors (#41988) 2026-07-27 16:54:58 +01:00
Dmitry GozmanandGitHub 28ae3de4aa fix(tsconfig): do not throw when "extends"/"references" cannot be resolved (#42005) 2026-07-27 16:54:04 +01:00
Yury SemikhatskyandGitHub 3827650d17 feat(webkit): roll to r2339 (#41984) 2026-07-24 15:26:48 -07:00
Yury SemikhatskyandGitHub 484274c421 chore(mcp): replace BackendManager with backend dispose callback and events (#41982) 2026-07-24 14:49:03 -07:00
Dmitry GozmanandGitHub 9cafa748a2 feat: support multiple HTTP credentials (#41979) 2026-07-24 14:36:05 -07:00
Devin RoussoandGitHub 898655c674 feat(reporter): add omitTags option to omit auto-appended tags (#41968)
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>
2026-07-24 10:27:46 -06:00
Aditya Kumar GuptaandGitHub e0e867011c fix(mcp): escape user input in codegen output (#41962)
`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.
2026-07-24 09:41:50 -06:00
microsoft-playwright-automation[bot]GitHubmicrosoft-playwright-automation[bot] <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>Dmitry Gozman
7c3a9be230 feat(webkit): roll to r2337 (#41971)
Co-authored-by: microsoft-playwright-automation[bot] <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <[email protected]>
2026-07-24 15:04:20 +01:00
microsoft-playwright-automation[bot]GitHubmicrosoft-playwright-automation[bot] <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>Dmitry Gozman
acb5465083 feat(firefox): roll to r1539 (#41970)
Co-authored-by: microsoft-playwright-automation[bot] <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>
Co-authored-by: Dmitry Gozman <[email protected]>
2026-07-24 14:21:31 +01:00
Dmitry GozmanandGitHub dea59db2de chore(recorder): unify action coalescing and simplify action types (#41958) 2026-07-24 11:41:53 +01:00
Dmitry GozmanandGitHub 7ffedf3c1f feat: add pierceFrames() locator API (#41963) 2026-07-24 11:40:50 +01:00
Yury SemikhatskyandGitHub f86bd78cc1 feat(test-runner): support named test locks (#41862) 2026-07-23 17:12:24 -07:00
Devin RoussoandGitHub a92a7a3366 Revert "feat(routeFromHar): add interceptAPIRequests option (#41294)" (#41964) 2026-07-23 14:48:29 -06:00
Dmitry GozmanandGitHub c28b53e624 feat(dashboard): add a debugger actions panel (#41711) 2026-07-23 20:22:49 +01:00
Devin RoussoandGitHub 3e14efd6b7 fix(registry): evaluate defaultCacheDirectory lazily (#41942)
`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>
2026-07-23 12:31:58 -06:00
Devin RoussoandGitHub fd9395d740 fix(webview): route exposeFunctions callbacks to the originating frame (#41919)
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
2026-07-23 11:35:34 -06:00
Devin RoussoandGitHub 610977b294 fix(mcp): surface the missing executable path when a browser isn't installed (#41941)
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>
2026-07-23 09:31:33 -06:00
Simon KnottandGitHub 41813407ea perf(test): avoid redundant stack capture (#41961)
Copilot-Session: c00ba4a1-a424-46ae-967e-2ddf02f91511
2026-07-23 17:18:34 +02:00
Dmitry GozmanandGitHub dba907bdbc feat: support pierce-frames selector (#41778) 2026-07-23 15:29:04 +01:00
Dmitry GozmanandGitHub 1299d0f6c4 feat(recorder): record actions by letting page events through naturally (#41902) 2026-07-23 14:51:38 +01:00
Dmitry GozmanandGitHub 89efc223b8 chore: mark v1.63.0-next (#41952) 2026-07-23 14:49:42 +01:00
Simon KnottandGitHub 2934858481 fix: correct pending navigation log spacing (#41949)
Copilot-Session: c8568082-cd3f-4aa2-a7fa-15546d4738ff
2026-07-23 13:35:23 +02:00
15c4f55879 fix(mcp): identify downloads explicitly (#41933)
Co-authored-by: Copilot App <[email protected]>
Copilot-Session: 0d6d0323-d581-4df1-ae11-bf2d9302c1d2
Copilot-Session: 296e429d-05c3-4f64-be3f-a199a1e00d65
2026-07-23 08:59:07 +02:00
tsushanthandGitHub f5fa967ff5 fix(network): request.postData() returns null for empty string body override (#41882) 2026-07-22 15:51:01 -06:00
Devin RoussoandGitHub 0edafe4baa fix(mcp): launch the Chrome profile that has the extension installed (#41939)
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>
2026-07-22 15:03:44 -06:00
microsoft-playwright-automation[bot]andGitHub 244a1ffdd8 feat(firefox): roll to r1538 (#41938) 2026-07-22 12:06:26 -06:00
Dmitry GozmanandGitHub 56e1b06825 test(html-reporter): add story picker to the component gallery (#41936) 2026-07-22 16:20:35 +01:00
Devin RoussoandGitHub 3e95c6c8fc fix(role): name <meter> and <progress> from an associated label (#41911)
`<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>
2026-07-22 08:58:35 -06:00
Simon KnottandGitHub 18e7ca5421 Revert "fix(cli): don't crash the response when navigating closes the last tab" (#41931) 2026-07-22 14:03:36 +02:00
Devin RoussoandGitHub 6da1930926 fix(role): map input[type=search] to searchbox unless list is a datalist (#41913)
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>
2026-07-21 18:05:16 -06:00
Pavel FeldmanandGitHub 4a0c4e4e78 feat(ct): type the mount fixture via story template argument (#41920) 2026-07-21 16:25:41 -07:00
Pavel FeldmanandGitHub f39623b16d feat(addInitScript): allow passing functions as init script arguments (#41921) 2026-07-21 15:44:04 -07:00
Matthew GoodwinandGitHub 6d487d67c9 feat(mcp): make post-action settle delay configurable (#41924) 2026-07-21 15:43:27 -07:00
Devin RoussoandGitHub ce37b096bd fix(mcp): report malformed JSON config instead of falling back to INI (#41909)
`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>
2026-07-21 14:47:59 -06:00
Pavel FeldmanandGitHub 58cf15c7c0 test(components): restore web and html-reporter component tests (#41889) 2026-07-21 13:41:50 -07:00