Release Notes
Released 2026-10-20
What’s Changed
Section titled “What’s Changed”- fix(deps): bump axios, @xmldom/xmldom and mocha to patched versions by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5752
- chore: migrate from runok to Bunosh, fix Lightpanda docs by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5754
- feat(helpers): add experimental Moli CDP helper by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5753
- Add Linting page for @codeceptjs/lint by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5751
- fix(run-multiple): resolve config test patterns that are arrays or Windows paths by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5755
- fix(webdriver): click iOS elements with the W3C elementClick command by @elliotsabitov in https://github.com/codeceptjs/CodeceptJS/pull/5757
- add Mobilewright guide with Appium comparison by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5758
New Contributors
Section titled “New Contributors”- @elliotsabitov made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5757
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.1…4.2.2
Released 2026-10-12
What’s Changed
Section titled “What’s Changed”- docs: include inherited CDPBrowser methods in Obscura/Kitesurf docs, hide abstract CDPBrowser by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5720
- fix example.com assertion after IANA page redesign by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5722
- fix(workers): skip loadTests in run() when suite is already populated by @danikkrapivnitskiy in https://github.com/codeceptjs/CodeceptJS/pull/5721
- feat(step): add name as alias of step title by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5729
- feat: Decision helper for plain-language assertions by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5734
- fix: join base url and relative path with a single slash by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5738
- feat: init:agent command to set up MCP and skills for coding agents by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5735
- fix(pause): ignore step failures inside tryTo and retryTo by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5741
- fix(playwright): don’t block on debug element preview when element is removed by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5740
- Docs/inherited helper docs by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5726
- fix(recorder): use retry options of the rule matching the error by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5724
- feat: webServer config option to start the app under test by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5732
- fix(workers): distribute only tests matching grep by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5727
- feat(helpers): add experimental Lightpanda helper by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5730
- fix(workers): deserialize step events before emitting to master process by @gololdf1sh in https://github.com/codeceptjs/CodeceptJS/pull/5565
- feat: —last-failed option for run and run-workers by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5733
- feat(Decision): use AI SDK decisions, configure decision models in ai.decisionModel by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5742
- fix(playwright): don’t block in see() when a matched element is removed by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5746
- chore(deps): bump actions/cache from 4 to 6 by @dependabot[bot] in https://github.com/codeceptjs/CodeceptJS/pull/5716
- feat(plugins): sitemap plugin collecting visited pages by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5744
- feat(ts): improve hook types (Background/Before/After/BeforeSuite/Aft… by @netoctone in https://github.com/codeceptjs/CodeceptJS/pull/5743
- fix(CDPBrowser): report connection errors on failed steps, skip screenshots without rendering by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5747
- feat(CDPBrowser): detect render/no-render engines, add CDP timing metrics by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5748
- feat(helpers): acting CDP helpers, HelperCapabilities type, ARIA snapshots for CDP and Puppeteer by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5749
New Contributors
Section titled “New Contributors”- @netoctone made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5743
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.0…4.2.1
4.2.1-beta.3 (pre-release)
Section titled “4.2.1-beta.3 (pre-release)”Released 2026-10-11
What’s Changed
Section titled “What’s Changed”- feat(helpers): acting CDP helpers, HelperCapabilities type, ARIA snapshots for CDP and Puppeteer by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5749
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.1-beta.2…4.2.1-beta.3
4.2.1-beta.2 (pre-release)
Section titled “4.2.1-beta.2 (pre-release)”Released 2026-10-11
What’s Changed
Section titled “What’s Changed”- fix(CDPBrowser): report connection errors on failed steps, skip screenshots without rendering by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5747
- feat(CDPBrowser): detect render/no-render engines, add CDP timing metrics by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5748
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.1-beta.1…4.2.1-beta.2
4.2.1-beta.1 (pre-release)
Section titled “4.2.1-beta.1 (pre-release)”Released 2026-10-11
What’s Changed
Section titled “What’s Changed”- docs: include inherited CDPBrowser methods in Obscura/Kitesurf docs, hide abstract CDPBrowser by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5720
- fix example.com assertion after IANA page redesign by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5722
- fix(workers): skip loadTests in run() when suite is already populated by @danikkrapivnitskiy in https://github.com/codeceptjs/CodeceptJS/pull/5721
- feat(step): add name as alias of step title by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5729
- feat: Decision helper for plain-language assertions by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5734
- fix: join base url and relative path with a single slash by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5738
- feat: init:agent command to set up MCP and skills for coding agents by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5735
- fix(pause): ignore step failures inside tryTo and retryTo by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5741
- fix(playwright): don’t block on debug element preview when element is removed by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5740
- Docs/inherited helper docs by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5726
- fix(recorder): use retry options of the rule matching the error by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5724
- feat: webServer config option to start the app under test by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5732
- fix(workers): distribute only tests matching grep by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5727
- feat(helpers): add experimental Lightpanda helper by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5730
- fix(workers): deserialize step events before emitting to master process by @gololdf1sh in https://github.com/codeceptjs/CodeceptJS/pull/5565
- feat: —last-failed option for run and run-workers by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5733
- feat(Decision): use AI SDK decisions, configure decision models in ai.decisionModel by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5742
- fix(playwright): don’t block in see() when a matched element is removed by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5746
- chore(deps): bump actions/cache from 4 to 6 by @dependabot[bot] in https://github.com/codeceptjs/CodeceptJS/pull/5716
- feat(plugins): sitemap plugin collecting visited pages by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5744
- feat(ts): improve hook types (Background/Before/After/BeforeSuite/Aft… by @netoctone in https://github.com/codeceptjs/CodeceptJS/pull/5743
New Contributors
Section titled “New Contributors”- @netoctone made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5743
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.0…4.2.1-beta.1
Released 2026-09-22
What’s Changed
Section titled “What’s Changed”- fix: workerInitializationDelay is not hardcoded by @kobenguyent in https://github.com/codeceptjs/CodeceptJS/pull/5676
- mask secret data rows in data-driven titles by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5693
- fix: preserve test artifacts on retry by @gololdf1sh in https://github.com/codeceptjs/CodeceptJS/pull/5690
- fix(junit): preserve suite identity for hook failures reported from workers by @kapil971390 in https://github.com/codeceptjs/CodeceptJS/pull/5664
- fix(appium): skip data connectivity on devices without telephony (#5677) by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5678
- fix(parser): inject params into one-line non-async arrow scenarios by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5680
- fix(typescript): no loader required under Bun by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5699
- fix(helpers): restore substring matching in waitInUrl by @nlespiaucq in https://github.com/codeceptjs/CodeceptJS/pull/5682
- feat: CDPBrowser helper family — Obscura and Kitesurf mini-browser support by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5681
- fix(junitReporter): stamp suites with their real start time by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5683
- fix: keep element text in simplifyHtmlElement by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5691
- fix(typescript): map included .ts files in step output by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5685
- fix: report Bun runtime in environment info by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5700
- feat: selectOption works with role=radiogroup widgets by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5702
- feat: checkOption finds checkables by ARIA role by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5704
- Serialize data-driven object titles as JSON by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5709
- refactor(locator): find ARIA checkables in Locator, not in each helper by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5708
- fix(hooks): emit hook.failed when a helper suite hook throws by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5684
- feat(strict-mode): render nested matches as tree in fetchDetails() by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5710
- feat(Playwright): visibleLocator config option by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5707
- fix(CDPBrowser): support ARIA radiogroups in selectOption, fix waitInUrl message by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5711
- fix(helpers): scroll element into view in moveCursorTo by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5715
- fix: use bunx instead of npx to read Playwright versions under Bun by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5714
- fix(Playwright): skip visibleLocator for scrollTo and grab* methods by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5712
- fix(Playwright): switchTo resolves nested iframes relative to current frame by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5717
- fix: retryFailedStep plugin works in debug/verbose mode by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5128
- fix: prevent retry config accumulation by @smalia2001 in https://github.com/codeceptjs/CodeceptJS/pull/5606
- docs: prepare Obscura and Node.js 22 for 4.2 by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5719
- feat(helpers): add seeInClipboard, seeClipboardEquals and clearClipboard by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5718
New Contributors
Section titled “New Contributors”- @luantaraschi made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5683
- @smalia2001 made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5606
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.1.0…4.2.0
4.2.0-beta.4 (pre-release)
Section titled “4.2.0-beta.4 (pre-release)”Released 2026-09-22
What’s Changed
Section titled “What’s Changed”- fix(Playwright): switchTo resolves nested iframes relative to current frame by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5717
- fix: retryFailedStep plugin works in debug/verbose mode by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5128
- fix: prevent retry config accumulation by @smalia2001 in https://github.com/codeceptjs/CodeceptJS/pull/5606
- docs: prepare Obscura and Node.js 22 for 4.2 by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5719
New Contributors
Section titled “New Contributors”- @smalia2001 made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5606
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.0-beta.3…4.2.0-beta.4
4.2.0-beta.2 (pre-release)
Section titled “4.2.0-beta.2 (pre-release)”Released 2026-09-10
What’s Changed
Section titled “What’s Changed”- Serialize data-driven object titles as JSON by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5709
- refactor(locator): find ARIA checkables in Locator, not in each helper by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5708
- fix(hooks): emit hook.failed when a helper suite hook throws by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5684
- feat(strict-mode): render nested matches as tree in fetchDetails() by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5710
- feat(Playwright): visibleLocator config option by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5707
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.2.0-beta.1…4.2.0-beta.2
4.2.0-beta.1 (pre-release)
Section titled “4.2.0-beta.1 (pre-release)”Released 2026-09-08
Added new Obscura helper for execution in Obscura browser
What’s Changed
Section titled “What’s Changed”- fix: workerInitializationDelay is not hardcoded by @kobenguyent in https://github.com/codeceptjs/CodeceptJS/pull/5676
- mask secret data rows in data-driven titles by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5693
- fix: preserve test artifacts on retry by @gololdf1sh in https://github.com/codeceptjs/CodeceptJS/pull/5690
- fix(junit): preserve suite identity for hook failures reported from workers by @kapil971390 in https://github.com/codeceptjs/CodeceptJS/pull/5664
- fix(appium): skip data connectivity on devices without telephony (#5677) by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5678
- fix(parser): inject params into one-line non-async arrow scenarios by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5680
- fix(typescript): no loader required under Bun by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5699
- fix(helpers): restore substring matching in waitInUrl by @nlespiaucq in https://github.com/codeceptjs/CodeceptJS/pull/5682
- feat: CDPBrowser helper family — Obscura and Kitesurf mini-browser support by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5681
- fix(junitReporter): stamp suites with their real start time by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5683
- fix: keep element text in simplifyHtmlElement by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5691
- fix(typescript): map included .ts files in step output by @luantaraschi in https://github.com/codeceptjs/CodeceptJS/pull/5685
- fix: report Bun runtime in environment info by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5700
- feat: selectOption works with role=radiogroup widgets by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5702
- feat: checkOption finds checkables by ARIA role by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5704
New Contributors
Section titled “New Contributors”- @luantaraschi made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5683
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.1.0…4.2.0-beta.1
Released 2026-07-30
What’s Changed
Section titled “What’s Changed”- Fixes run-rerun by @DenysKuchma in https://github.com/codeceptjs/CodeceptJS/pull/5667
- fix(core): load Mocha test files as ES Modules (fixes internal-API imports from tests, #5636) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5640
- chore(deps): bump @xmldom/xmldom from 0.9.8 to 0.9.10 by @ElVisPL in https://github.com/codeceptjs/CodeceptJS/pull/5651
- fix(appium): replace deprecated setNetworkConnection/getNetworkConnection with mobile: setConnectivity/getConnectivity by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5662
- fix(typings): add ARIA locators to ILocator by @patryk-przybysz in https://github.com/codeceptjs/CodeceptJS/pull/5665
- chore(deps-dev): bump eslint-plugin-mocha from 11.2.0 to 11.3.0 by @dependabot[bot] in https://github.com/codeceptjs/CodeceptJS/pull/5629
- chore(deps-dev): bump graphql from 16.12.0 to 16.14.2 by @dependabot[bot] in https://github.com/codeceptjs/CodeceptJS/pull/5627
- chore(deps): bump monocart-coverage-reports from 2.12.9 to 2.12.12 by @dependabot[bot] in https://github.com/codeceptjs/CodeceptJS/pull/5625
New Contributors
Section titled “New Contributors”- @ElVisPL made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5651
- @patryk-przybysz made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5665
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.0.9…4.1.0
Released 2026-07-07
What’s Changed
Section titled “What’s Changed”- fix(data): detect DataTable structurally so Data() works under tsx/cjs (#5641) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5649
- fix: future proof for ts6 by @kobenguyent in https://github.com/codeceptjs/CodeceptJS/pull/5616
- ci(docker): build multi-arch images (amd64 + arm64) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5648
- fix(pause): stop pause() at the right step in 4.x (#5652) by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5653
- fix(graphql): drop ESM-broken _checkRequirements() so
checkworks (#5654) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5658 - Add a custom Firefox binary example to the Playwright helper docs by @feder-cr in https://github.com/codeceptjs/CodeceptJS/pull/5655
- fix(junit): report suite hook failures via hook.failed event by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5657
New Contributors
Section titled “New Contributors”- @feder-cr made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5655
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.0.8…4.0.9
Released 2026-06-17
What’s Changed
Section titled “What’s Changed”- test(core): characterize promise-core error and hang paths by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5622
- fix(pause): remove leaked dispatcher listeners and guard session restore by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5630
- fix(core): re-land asyncWrapper + promise-core error-path fixes onto 4.x (#5624, #5633) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5637
- fix: guard sort() with shuffle check so —shuffle is not silently ignored by @kapil971390 in https://github.com/codeceptjs/CodeceptJS/pull/5639
- fix(typescript): unique temp file names to fix run-multiple race (#5642) by @mirao in https://github.com/codeceptjs/CodeceptJS/pull/5643
New Contributors
Section titled “New Contributors”- @kapil971390 made their first contribution in https://github.com/codeceptjs/CodeceptJS/pull/5639
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.0.7…4.0.8
Released 2026-06-17
- ESM test loading https://github.com/codeceptjs/CodeceptJS/pull/5640
Released 2026-06-13
What’s Changed
Section titled “What’s Changed”- fix(init): missing file ext of step file when using typescript by @kobenguyent in https://github.com/codeceptjs/CodeceptJS/pull/5615
- fix(deps): don’t auto-install detox & react-native (#5620) by @DavertMik in https://github.com/codeceptjs/CodeceptJS/pull/5621
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.0.6…4.0.7
Released 2026-06-09
Full Changelog: https://github.com/codeceptjs/CodeceptJS/compare/4.0.5…4.0.6