Skip to content

fix(webdriverio): don't fail if last window is closed#14694

Merged
christian-bromann merged 1 commit intomainfrom
cb/context-manager-window-fix
Aug 11, 2025
Merged

fix(webdriverio): don't fail if last window is closed#14694
christian-bromann merged 1 commit intomainfrom
cb/context-manager-window-fix

Conversation

@christian-bromann
Copy link
Member

@christian-bromann christian-bromann commented Aug 11, 2025

Proposed changes

Handle edge cases for the closeWindow command in ContextManager where the command result may not include a value array (e.g., when an error is returned). The logic now safely treats missing value as an empty list and throws a clear, consistent error when no window handles remain. When handles do remain, it switches to the first handle as before.

Also adds unit tests covering:

  • closeWindow result with no value property
  • closeWindow result with an empty value array
  • closeWindow result containing an error object
  • Nominal case (switches to the first remaining handle)

This prevents crashes and ensures a consistent error message in both Classic and BiDi sessions for DELETE /session/:sessionId/window.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • Polish (an improvement for an existing feature)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update (improvements to the project's docs)
  • Specification changes (updates to WebDriver command specifications)
  • Internal updates (everything related to internal scripts, governance documentation and CI files)

Checklist

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works
  • I have added the necessary documentation (if appropriate)
  • I have added proper type definitions for new commands (if appropriate)

Backport Request

  • This change is solely for v9 and doesn't need to be back-ported
  • Back-ported PR at #XXXXX

Further comments

  • Change in packages/webdriverio/src/session/context.ts: tolerate result.value being undefined and keep error handling consistent.
  • Tests added in packages/webdriverio/tests/session/context.test.ts to cover all listed scenarios.

Reviewers: @webdriverio/project-committers

  • Implemented tests for undefined/empty handles and error-only payloads for closeWindow.
  • Confirmed all unit tests pass locally.

fixes #14678

@christian-bromann christian-bromann added the PR: Bug Fix 🐛 PRs that contain bug fixes label Aug 11, 2025
@christian-bromann christian-bromann merged commit 43c24eb into main Aug 11, 2025
11 checks passed
@christian-bromann christian-bromann deleted the cb/context-manager-window-fix branch August 11, 2025 01:16
@pkg-pr-new
Copy link

pkg-pr-new bot commented Aug 11, 2025

Open in StackBlitz

create-wdio

npm i https://pkg.pr.new/webdriverio/webdriverio/create-wdio@14694

eslint-plugin-wdio

npm i https://pkg.pr.new/webdriverio/webdriverio/eslint-plugin-wdio@14694

@wdio/allure-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/allure-reporter@14694

@wdio/appium-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/appium-service@14694

@wdio/browser-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browser-runner@14694

@wdio/browserstack-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browserstack-service@14694

@wdio/cli

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cli@14694

@wdio/concise-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/concise-reporter@14694

@wdio/config

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/config@14694

@wdio/cucumber-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cucumber-framework@14694

@wdio/dot-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/dot-reporter@14694

@wdio/firefox-profile-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/firefox-profile-service@14694

@wdio/globals

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/globals@14694

@wdio/jasmine-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/jasmine-framework@14694

@wdio/json-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/json-reporter@14694

@wdio/junit-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/junit-reporter@14694

@wdio/lighthouse-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/lighthouse-service@14694

@wdio/local-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/local-runner@14694

@wdio/logger

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/logger@14694

@wdio/mocha-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/mocha-framework@14694

@wdio/protocols

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/protocols@14694

@wdio/repl

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/repl@14694

@wdio/reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/reporter@14694

@wdio/runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/runner@14694

@wdio/sauce-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sauce-service@14694

@wdio/shared-store-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/shared-store-service@14694

@wdio/smoke-test-cjs-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-cjs-service@14694

@wdio/smoke-test-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-reporter@14694

@wdio/smoke-test-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-service@14694

@wdio/spec-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/spec-reporter@14694

@wdio/static-server-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/static-server-service@14694

@wdio/sumologic-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sumologic-reporter@14694

@wdio/testingbot-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/testingbot-service@14694

@wdio/types

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/types@14694

@wdio/utils

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/utils@14694

@wdio/webdriver-mock-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/webdriver-mock-service@14694

@wdio/xvfb

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/xvfb@14694

webdriver

npm i https://pkg.pr.new/webdriverio/webdriverio/webdriver@14694

webdriverio

npm i https://pkg.pr.new/webdriverio/webdriverio@14694

commit: 6b5a50b

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PR: Bug Fix 🐛 PRs that contain bug fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[🐛 Bug]: driver.closeWindow() returns TypeError: Cannot read properties of undefined (reading 'length')

1 participant