5822 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
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 f755ee9748 test: remove "page/page-evaluate.spec.ts:894 › promise collected" (#42019) 2026-07-28 16:42:06 +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
Simon KnottandGitHub 91514ad057 test(mcp): mark dashboard tests as slow (#41946) 2026-07-27 16:26:04 -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
Dmitry GozmanandGitHub 82cb42b292 Revert "chore: roll stable test runner to 1.62.0-beta-1784842988000" (#42003) 2026-07-27 16:49:11 +01:00
Yury SemikhatskyandGitHub 3827650d17 feat(webkit): roll to r2339 (#41984) 2026-07-24 15:26:48 -07:00
Dmitry GozmanandGitHub 9cafa748a2 feat: support multiple HTTP credentials (#41979) 2026-07-24 14:36:05 -07:00
Devin RoussoandGitHub 8f362cfa10 chore: roll stable test runner to 1.62.0-beta-1784842988000 (#41980) 2026-07-24 14:56:25 -06: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
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
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
4b0cc996cc fix(test): unflake screencast backpressure test on slow macOS runner (#41951)
Co-authored-by: Copilot <[email protected]>
2026-07-23 13:17:07 +02:00
bbbae6dce7 test: fixme WebSocket locale test in Chromium 150 (#41944)
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Simon Knott <[email protected]>
Copilot-Session: 19d8bd17-13fd-482d-8228-94bd104679cf
2026-07-23 12:45:48 +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
Simon KnottandGitHub ac877bc190 test(evaluate): skip using declaration on WebKit (#41929) 2026-07-22 10:03:45 -07: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
Dmitry GozmanandGitHub 478b9f05cb test: test for issue 41348 (#41930) 2026-07-22 12:21:44 +01:00
a8a2d54095 test: skip non-utf8 body test on older chromium channels (#41926)
Co-authored-by: Copilot <[email protected]>
2026-07-22 10:41:02 +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 f39623b16d feat(addInitScript): allow passing functions as init script arguments (#41921) 2026-07-21 15:44:04 -07:00
Yury SemikhatskyandGitHub ba223bb11a chore(webview): mark new screenshot tests as expected failures (#41908) 2026-07-21 15:30:08 -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
Yury SemikhatskyandGitHub 0e142cef72 fix(webkit): do not override Accept-Language header set by the page (#41904) 2026-07-21 11:19:31 -07:00
Pavel FeldmanandGitHub d83ec3212f chore(skills): move agent skills under playwright-core, add init-skills (#41887) 2026-07-21 11:03:59 -07:00
Pavel FeldmanandGitHub 6227b649ce Revert "feat(expect): add expect.fn() mock functions (#41884)" (#41906) 2026-07-21 11:03:49 -07:00
Pavel FeldmanandGitHub ecf2e53290 feat(expect): add expect.fn() mock functions with awaited assertions (#41884) 2026-07-21 08:41:41 -07:00
Dmitry GozmanandGitHub 06b65dc210 test: add a regression test for #40510 (#41903) 2026-07-21 16:28:22 +01:00
bc97a1306c fix(screencast): acknowledge frames after callbacks (#41898)
Co-authored-by: Copilot App <[email protected]>
2026-07-21 15:36:47 +02:00