Skip to content

fix(interception): Return raw non-binary responses without metadata wrapper#14406

Merged
christian-bromann merged 7 commits intowebdriverio:mainfrom
Norva-bugged:fix/binary-handle
Apr 11, 2025
Merged

fix(interception): Return raw non-binary responses without metadata wrapper#14406
christian-bromann merged 7 commits intowebdriverio:mainfrom
Norva-bugged:fix/binary-handle

Conversation

@Norva-bugged
Copy link
Member

Proposed changes

This pull request fixes a regression where non-binary mock responses were returned wrapped in { type: "string", value: "<mocked value>" } instead of the raw value specified (e.g., {"data":{"someProperty":123}}). This issue, reported in #14390, was introduced by #14360, which modified response handling to support binary data but inadvertently affected non-binary mocks

Types of changes

  • Polish (an improvement for an existing feature)
  • Bugfix (non-breaking change which fixes an issue)
  • 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

Why this solution?

  • The regression stemmed from wrapping all responses in { type, value } structures to support binary data. Unwrapping non-binary responses in #handleResponseStarted restores the expected behavior without altering binary support
  • Simplifying getBinaryResponse with base64 validation (using a regex to detect invalid data) improves robustness for edge cases while keeping the method focused on binary data
  • Updating parseOverwrite ensures non-binary bodies are processed correctly without redundant encoding, maintaining compatibility with the WebDriver Bidi protocol

Alternatives considered:

  • Considered modifying respond to avoid wrapping non-binary payloads at creation, but this risked breaking binary response storage logic. Unwrapping at the response stage (#handleResponseStarted) was safer and more targeted
  • Explored bypassing #responseBodies for non-binary data but kept it for consistency across response types, as it’s required for getBinaryResponse

Reviewers: @webdriverio/project-committers

Norva-bugged added 5 commits April 1, 2025 19:37
…nterception

- Modified WebDriverInterception to correctly store and retrieve binary response data via getBinaryResponse()
- Updated parseOverwrite to properly encode binary data in base64 format
- Enhanced clear() to reset responseBodies map alongside calls array
- Improved #handleResponseStarted to store binary response data
- Added test case verifying binary response handling and clearing
- Maintained compatibility with existing string/JSON response handling
…rapper

- Updated WebDriverInterception.#handleResponseStarted to correctly unwrap non-binary responses before forwarding to networkProvideResponse, ensuring raw values are returned
- Enhanced parseOverwrite to properly handle non-binary response bodies
- Simplified convoluted getBinaryResponse with improved base64 validation
- Added tests for non-binary responses and edge cases in getBinaryResponse
@pkg-pr-new
Copy link

pkg-pr-new bot commented Apr 11, 2025

Open in StackBlitz

eslint-plugin-wdio

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

@wdio/allure-reporter

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

@wdio/appium-service

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

@wdio/browser-runner

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

@wdio/browserstack-service

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

@wdio/cli

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

@wdio/concise-reporter

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

@wdio/cucumber-framework

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

@wdio/config

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

@wdio/dot-reporter

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

@wdio/firefox-profile-service

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

@wdio/globals

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

@wdio/jasmine-framework

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

@wdio/json-reporter

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

@wdio/junit-reporter

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

@wdio/lighthouse-service

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

@wdio/local-runner

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

@wdio/logger

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

@wdio/mocha-framework

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

@wdio/protocols

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

@wdio/repl

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

@wdio/reporter

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

@wdio/runner

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

@wdio/sauce-service

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

@wdio/shared-store-service

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

@wdio/smoke-test-cjs-service

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

@wdio/smoke-test-reporter

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

@wdio/smoke-test-service

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

@wdio/spec-reporter

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

@wdio/static-server-service

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

@wdio/sumologic-reporter

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

@wdio/testingbot-service

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

@wdio/types

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

@wdio/utils

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

@wdio/webdriver-mock-service

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

webdriver

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

webdriverio

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

commit: b33038b

Copy link
Member

@christian-bromann christian-bromann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One comment, otherwise LGTM

@christian-bromann christian-bromann added the PR: Bug Fix 🐛 PRs that contain bug fixes label Apr 11, 2025
Copy link
Member

@christian-bromann christian-bromann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@christian-bromann christian-bromann merged commit 2367f48 into webdriverio:main Apr 11, 2025
43 checks passed
@Norva-bugged Norva-bugged deleted the fix/binary-handle branch April 15, 2025 08:12
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.

2 participants