github webdriverio/webdriverio v10.2.0

3 hours ago

v10.2.0 (2026-11-06)

💥 Breaking Change

  • wdio-cucumber-framework, wdio-cucumberjs-json-reporter
    • #16236 fix(@wdio/cucumber-framework): use the values of Cucumber profiles, default strict to true, and report BeforeAll / AfterAll as hooks of the feature (@plum117)
  • create-wdio, eslint-plugin-wdio, wdio-ai-service, wdio-allure-reporter, wdio-appium-service, wdio-browser-runner, wdio-cli, wdio-concise-reporter, wdio-config, wdio-cucumber-framework, wdio-cucumberjs-json-reporter, wdio-display-server, wdio-dot-reporter, wdio-firefox-profile-service, wdio-globals, wdio-html-reporter, wdio-jasmine-framework, wdio-json-reporter, wdio-junit-reporter, wdio-lighthouse-service, wdio-local-runner, wdio-logger, wdio-mocha-framework, wdio-protocols, wdio-repl, wdio-reporter, wdio-runner, wdio-sauce-service, wdio-session, wdio-shared-store-service, wdio-smoke-test-cjs-service, wdio-smoke-test-reporter, wdio-smoke-test-service, wdio-snapshot, wdio-spec-reporter, wdio-static-server-service, wdio-sumologic-reporter, wdio-testingbot-service, wdio-types, wdio-utils, wdio-video-reporter, wdio-webdriver-mock-service, wdio, webdriver, webdriverio
    • #16211 fix: require Node.js 22.23.4, 24.22.1 or 26.12.1 for the eMudhra intermediate CA compromise (@plum117)
  • wdio-cucumber-framework, wdio-reporter
    • #16073 fix(@wdio/cucumber-framework): make the feature uid from the path of the file (@plum117)

🚀 New Feature

  • wdio-allure-reporter, wdio-appium-service, wdio-concise-reporter, wdio-cucumber-framework, wdio-cucumberjs-json-reporter, wdio-dot-reporter, wdio-html-reporter, wdio-jasmine-framework, wdio-junit-reporter, wdio-mocha-framework, wdio-reporter, wdio-spec-reporter, wdio-types, wdio-video-reporter, wdio-vitest-framework
    • #16245 feat(@wdio/reporter): units and hook owners for parallel mode, used by all reporters (@plum117)
  • wdio-html-reporter
  • wdio-allure-reporter, wdio-junit-reporter, wdio-reporter, wdio-vitest-framework
    • #16201 feat(@wdio/vitest-framework): report every retry attempt and send grouped hook events (@Winify)
    • #16164 feat(@wdio/vitest-framework): relay allure and junit runtime APIs from Vitest workers (@Winify)
  • wdio-cli, wdio-config, wdio-cucumber-framework, wdio-mocha-framework, wdio-types, wdio-utils, wdio-vitest-framework
    • #16154 feat(@wdio/vitest-framework): Introducing Vitest with parallel run and fixtures (@Winify)
  • wdio-reporter, wdio-video-reporter
    • #16173 feat(@wdio/video-reporter): record each parallel test in its own video (@plum117)
  • wdio-reporter
    • #16172 feat(@wdio/reporter): keep the context and the parent uid on parallel test and suite stats (@plum117)
  • create-wdio, wdio-html-reporter, wdio-video-reporter
    • #16047 feat(@wdio/html-reporter): move the HTML reporter into the main repository (@plum117)
  • create-wdio, wdio-video-reporter, webdriver
    • #16046 feat(@wdio/video-reporter): move the video reporter into the main repository (@plum117)
  • create-wdio, wdio-cucumberjs-json-reporter
    • #16045 feat(@wdio/cucumberjs-json-reporter): move the CucumberJS JSON reporter into the main repository (@plum117)

🐛 Bug Fix

  • wdio-shared-store-service
  • webdriverio
    • #16364 fix(webdriverio): encode a JSON body of mock.request() as UTF-8 (@RaphaelFakhri)
    • #16359 fix(webdriverio): remove the BiDi Mapper log workaround, Chrome 157 fixes the slowdown (@plum117)
    • #16322 fix(webdriverio): support non-BMP Unicode characters in key actions (@ML642)
    • #16157 fix(webdriverio): escape quotes in selectByAttribute values (@ML642)
    • #16306 fix(webdriverio): let a tab or parallel-test mock override a session-wide mock of the same url (@plum117)
    • #16230 Fix/setvalue rejected direct value 16228 (@mccmrunal)
    • #16273 fix(webdriverio): scope mockRestoreAll and mockClearAll to the tab or parallel test that calls them (@plum117)
    • #15941 fix(webdriverio): port multiremote mockRestoreAll scoping to v10 (#15842) (@dor-sr)
    • #16225 fix(webdriverio): remove the log of the ChromeDriver BiDi Mapper so that BiDi commands do not get slower (@plum117)
    • #16194 fix(webdriverio): only match links with link text selectors in BiDi sessions (@mccmrunal)
    • #16216 fix(webdriverio): open a tab or window of a parallel test from the window of that test (@plum117)
    • #16199 fix(webdriverio): allow WebDriver BiDi screenshots in parallel mode (@plum117)
    • #16139 fix(webdriverio): isEqual and scrollIntoView on an element that the page rendered again (@plum117)
    • #16138 fix(webdriverio): set the W3C script timeout when an Appium iOS session starts (@plum117)
    • #16136 fix(webdriverio): find a stale element of a BiDi frame or tab again (@plum117)
  • wdio-browser-runner, wdio-globals, wdio-jasmine-framework, wdio-runner, wdio-session, wdio-snapshot
    • #16344 fix(@wdio/session,@wdio/snapshot): make webdriverio a peer dependency (@Winify)
  • wdio-runner
    • #16331 fix(@wdio/runner): keep the worker alive on a late rejection that no framework reports, and fail the run (@plum117)
    • #16152 fix(@wdio/runner): ignore the browser error check that is in flight when the session ends (@Winify)
  • wdio-utils
    • #16340 fix(@wdio/utils): measure the Mocha timer with the clock of the timers (@plum117)
    • #16337 fix(@wdio/utils): name the Jasmine spec in the WDIO timeout error (@plum117)
    • #16320 feat(@wdio/utils): create the Firefox profiles in RUNNER_TEMP on Windows in GitHub Actions, and type every driver option for users (@plum117)
    • #16303 fix(@wdio/utils): don't pass spawnOpts to Chromedriver as a --spawn-ppts flag (@Winify)
  • wdio-snapshot, wdio-utils, webdriverio
    • #16323 fix(webdriverio, @wdio/utils, @wdio/snapshot): valid XPath literals in text selectors (@plum117)
  • wdio-config, wdio-cucumber-framework, wdio-runner, wdio-utils, webdriverio
    • #16299 fix: reloadSession state, url() headers mock, spec selection and spec/hook timeouts (@mccmrunal)
  • wdio-protocols, webdriverio
    • #16219 fix(webdriverio, @wdio/protocols): follow WebDriver BiDi for cookies with wdio:experimentalBiDiCommands, and accept both sameSite spellings (@plum117)
  • wdio-types, webdriver
    • #16305 fix(webdriver, @wdio/types): make Chrome on Android through Appium work in the default session (@plum117)
  • wdio-ai-service, wdio-allure-reporter, wdio-cli, wdio-cucumber-framework, wdio-html-reporter, wdio-jasmine-framework, wdio-junit-reporter, wdio-mocha-framework, wdio-reporter, wdio-spec-reporter, wdio-utils
    • #16300 fix(@wdio/reporter, @wdio/html-reporter, @wdio/jasmine-framework): hide an empty (root) box and show the spec files of its tests (@plum117)
  • wdio-session, webdriverio
    • #16308 fix(webdriverio, @wdio/session): report a value the browser rejected or reformatted in fill, and reject an empty range value (@plum117)
  • wdio-protocols, webdriver
    • #16290 fix(webdriver): don't retry W3C errors, fix retried deleteSession and error args; uninstallAddOn is POST (@mccmrunal)
  • wdio-cli, webdriver
    • #16265 fix(webdriver, @wdio/cli): don't crash on a failed BiDi attach, and reject --shard 0/N (@mccmrunal)
  • wdio-html-reporter, wdio-mocha-framework, wdio-reporter, wdio-video-reporter
    • #16277 fix(@wdio/html-reporter, @wdio/reporter, @wdio/video-reporter, @wdio/mocha-framework): label each failed attempt of a retried test, copy the styles safely on Windows, give the Mocha config root hooks their own title, and use the base reporter's hook owner and spec file attempt (@plum117)
  • wdio-allure-reporter
    • #16167 fix(@wdio/allure-reporter): carry the hook error and a historyId on failed hook results (@horizonbymuneeb)
  • wdio-html-reporter
    • #16234 fix(@wdio/html-reporter): give before hook logs to the next test in sequential mode, and keep each spec file retry (@plum117)
  • wdio-allure-reporter, wdio-cli, wdio-html-reporter, wdio-junit-reporter, wdio-reporter, wdio-vitest-framework
    • #16243 fix(@wdio/vitest-framework, @wdio/reporter, @wdio/html-reporter, @wdio/cli): Closes #16232 items 1, 2 and 20, link grouped hooks to their test, and reject --repeat (@Winify)
  • wdio-utils, webdriver
    • #16242 fix(@wdio/utils, webdriver): stop adding a shared Chrome profile on Windows, and delete the driver profile at the end (@plum117)
  • wdio-session
    • #16244 fix(@wdio/session): act on a ref that has no selector instead of reporting it as stale (@Winify)
  • wdio-allure-reporter, wdio-html-reporter, wdio-json-reporter, wdio-junit-reporter, wdio-reporter, wdio-spec-reporter, wdio-vitest-framework
    • #16233 fix(@wdio/vitest-framework, @wdio/reporter, @wdio/json-reporter, @wdio/junit-reporter, @wdio/html-reporter, @wdio/allure-reporter, @wdio/spec-reporter): count a hook error one time, as the failure of its test (@plum117)
  • wdio-config
    • #16239 fix(@wdio/config): apply --headless to multi-remote capabilities (@sp1r1n)
  • wdio-cucumber-framework, wdio-cucumberjs-json-reporter, wdio-reporter, wdio-spec-reporter
    • #16226 fix(@wdio/cucumber-framework, @wdio/reporter, @wdio/spec-reporter): end a step of a retried attempt with test:retry, and name the pending scenarios under strict (@plum117)
  • wdio-jasmine-framework
    • #16195 fix(@wdio/jasmine-framework): fail the run when an afterAll hook fails (@mccmrunal)
  • wdio-junit-reporter
  • webdriver
    • #16192 fix(webdriver): apply strictSSL to HTTP requests in Node (@mccmrunal)
    • #16037 fix(webdriver): keep aborting in-flight commands after the first command completes (@mccmrunal)
  • wdio-sauce-service, wdio-testingbot-service, wdio-types
    • #16197 fix(@wdio/sauce-service, @wdio/testingbot-service): only count the last attempt of a retried Cucumber scenario (@mccmrunal)
  • wdio-cli
    • #16189 fix(@wdio/cli): support filesToWatch globs and wdio:specs capabilitieies (@mccmrunal)
  • wdio-allure-reporter, wdio-cucumber-framework, wdio-html-reporter, wdio-reporter, wdio-spec-reporter, wdio-video-reporter
    • #16221 fix(@wdio/cucumber-framework): send test:end, test:retry and context:end as Mocha does, in both modes (@plum117)
  • wdio-allure-reporter, wdio-html-reporter
    • #16217 fix(@wdio/allure-reporter, @wdio/html-reporter): find an element screenshot by its command name (@plum117)
  • wdio-mocha-framework
    • #16203 fix(@wdio/mocha-framework): fail the test of an uncaught error in parallel mode instead of ending the worker (@plum117)
  • wdio-ai-service
    • #16207 fix(@wdio/ai-service): a stopped act() or extract() never uses the browser again (@plum117)
    • #16188 fix(@wdio/ai-service): stop act() and extract() when their test ends (@plum117)
    • #16155 fix(@wdio/ai-service): keep the response status when Chrome sends a false fetch error (@plum117)
  • wdio-snapshot
    • #16131 fix(snapshot): skip role/ candidate on leading whitespace and anchor ambiguous css path (@sh011)
  • wdio-allure-reporter, wdio-mocha-framework, wdio-reporter, wdio-utils
    • #16171 fix(@wdio/mocha-framework): send the hook and test events of a sequential run in parallel mode (@plum117)
  • wdio-appium-service
  • wdio-browser-runner, wdio-cli, wdio-cucumber-framework, wdio-runner
  • wdio-cucumber-framework, wdio-spec-reporter
    • #16161 fix(@wdio/cucumber-framework): report step results in parallel mode as in sequential mode (@plum117)
  • wdio-session, wdio-snapshot
    • #16150 fix(@wdio/snapshot): emit UiSelector for package-less Android resource ids (@Winify)
  • wdio-allure-reporter, wdio-cucumber-framework, wdio-junit-reporter, wdio-mocha-framework, wdio-reporter, wdio-runner, wdio-spec-reporter, wdio-types
    • #16146 fix: Address gaps in reporters for parallel-mode (@Winify)
  • create-wdio, wdio-cucumber-framework

💅 Polish

  • create-wdio, wdio-session
    • #16346 refactor(@wdio/session): expose snapshot diffing as snapshot --diff (@Winify)

📝 Documentation

  • create-wdio, wdio-ai-service, wdio-cli, wdio-html-reporter, wdio-junit-reporter, wdio-session, wdio-shared-store-service, wdio-snapshot, wdio-types, wdio-video-reporter, wdio-vitest-framework, webdriver, webdriverio
    • #16369 docs: add the missing v9 to v10 changes, with small reporter and template fixes (@plum117)
  • Other
    • #16367 docs(devtools): render capability cells as a plain mark and a footnote number (@vishnuv688)
    • #16353 docs(website): show the new BrowserStack logo everywhere, in both themes (@vishnuv688)
    • #16351 docs(website): use new BrowserStack logo in sponsors section (@AutomatedTester)
    • #16302 docs(mcp): update MCP docs for v4 (@Winify)
    • #16287 docs(devtools): describe wait rows, assertion targets, pytest trace precedence, and plain capability ticks (@vishnuv688)
    • #16283 Revert "docs(devtools): mark the Source tab tested for every adapter" (@vishnuv688)
    • #16280 docs(devtools): mark the Source tab tested for every adapter (@vishnuv688)
    • #16256 docs(devtools): generate the capability tables from the devtools feature list (@vishnuv688)
    • #16270 docs(devtools): read a heading example.com still serves in the Selenium example (@vishnuv688)
    • #16176 docs(devtools): Node.js 22.19 floor and native app network capture (@vishnuv688)
    • #16071 docs(devtools): bring the DevTools pages to parity with the adapters (@vishnuv688)
  • wdio-lighthouse-service, wdio-vitest-framework
    • #16257 fix(@wdio/vitest-framework, @wdio/lighthouse-service): require Node.js 22.23.4, 24.22.1 or 26.12.1 in engines and docs (@plum117)
  • wdio-types, webdriverio

🏠 Internal

  • wdio-lighthouse-service
  • wdio-local-runner
    • #16358 test(@wdio/local-runner): check the shutdown wait with fake timers (@plum117)
  • wdio-vitest-framework
    • #16349 test(@wdio/vitest-framework): wait for the JUnit report file, and give the macOS unit job a 4 GB heap (@plum117)
  • wdio-appium-service, wdio-lighthouse-service
    • #16338 chore(deps): bump the patch-deps-updates-main group across 1 directory with 7 updates (@dependabot[bot])
  • Other
  • wdio-config, wdio-cucumber-framework
  • wdio-cli, wdio-config
  • create-wdio
    • #16252 chore(deps): bump normalize-package-data from 8.0.0 to 9.0.0 in the major-deps-updates-main group (@dependabot[bot])
  • wdio-session
    • #16237 chore(@wdio/depcheck): fail on a peer dependency that Dependabot cannot update (@plum117)
  • wdio-webdriver-mock-service, webdriver
    • #16222 fix(webdriver): require the patched undici 8.12.3 and move the undici 7 copies to 7.30.1 (@plum117)
  • wdio-cli, wdio-concise-reporter, wdio-html-reporter, wdio-spec-reporter, wdio-utils, webdriverio
    • #16208 chore(deps): bump chokidar, pretty-ms, open, decamelize and safe-stable-stringify majors (@plum117)
  • wdio-cucumber-framework
    • #16202 test(@wdio/cucumber-framework): remove the root folder link with unlinkSync (@plum117)
  • wdio-allure-reporter
    • #16153 test(@wdio/allure-reporter): check step names, not the uuids, in the Mocha parallel fixture test (@plum117)
  • wdio
    • #16151 test(wdio): retry the temp folder removal when Windows locks pnpm.exe (@plum117)

Committers: 15

Don't miss a new webdriverio release

NewReleases is sending notifications on new releases.