diff --git a/.circleci/cache-version.txt b/.circleci/cache-version.txt index f4e0d2ac7d..1275f06c8a 100644 --- a/.circleci/cache-version.txt +++ b/.circleci/cache-version.txt @@ -1,3 +1,3 @@ # Bump this version to force CI to re-create the cache from scratch. -5-12-2025 +5-14-2025 diff --git a/.circleci/workflows.yml b/.circleci/workflows.yml index 0dfb752e1b..8eef743ef4 100644 --- a/.circleci/workflows.yml +++ b/.circleci/workflows.yml @@ -1,7 +1,7 @@ version: 2.1 -chrome-stable-version: &chrome-stable-version "136.0.7103.92" -chrome-beta-version: &chrome-beta-version "137.0.7151.15" +chrome-stable-version: &chrome-stable-version "136.0.7103.113" +chrome-beta-version: &chrome-beta-version "137.0.7151.27" firefox-stable-version: &firefox-stable-version "137.0" orbs: diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 39a523ef12..e38f42dc7a 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -22,9 +22,17 @@ _Released 07/01/2025 (PENDING)_ - Migration helpers and related errors are no longer shown when upgrading from Cypress versions earlier than 10.0.0. To migrate from a pre-10.0.0 version, upgrade one major version at a time to receive the appropriate guidance. Addresses [#31345](https://github.com/cypress-io/cypress/issues/31345). Addressed in [https://github.com/cypress-io/cypress/pull/31629/](https://github.com/cypress-io/cypress/pull/31629/). +## 14.4.1 + +_Released 6/3/2025 (PENDING)_ + +**Dependency Updates:** + +- Updated `@sinonjs/fake-timers` from `10.3.0` to `11.3.1`. Addressed in [#31746](https://github.com/cypress-io/cypress/pull/31746). + ## 14.4.0 -_Released 5/20/2025 (PENDING)_ +_Released 5/20/2025_ **Features:** @@ -38,12 +46,15 @@ _Released 5/20/2025 (PENDING)_ **Misc:** +- Chrome 137+ no longer supports `--load-extension` in branded Chrome, breaking the `@cypress/puppeteer` plugin in `open` mode and headed `run` mode and [`launchOptions.extensions`](https://docs.cypress.io/api/node-events/browser-launch-api#Add-browser-extensions). We recommend using Electron, Chrome for Testing or Chromium to continue using these features. See Cypress Docker image examples for [Chrome for Testing](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chrome-for-testing) and [Chromium](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chromium). Addresses [#31702](https://github.com/cypress-io/cypress/issues/31702) and [#31703](https://github.com/cypress-io/cypress/issues/31703). - Cursor is now available as an IDE option for opening files in Cypress, if it is installed on your system. Addressed in [#31691](https://github.com/cypress-io/cypress/pull/31691). - The error shown when the `--record` flag is missing has been updated to be shorter. Addressed in [#31676](https://github.com/cypress-io/cypress/pull/31676). **Dependency Updates:** +- Upgraded `@sinonjs/fake-timers` from `8.1.0` to `10.3.0`. Addressed in [#31725](https://github.com/cypress-io/cypress/pull/31725) and [#31737](https://github.com/cypress-io/cypress/pull/31737). - Upgraded `trash` from `5.2.0` to `7.2.0`. Addressed in [#31667](https://github.com/cypress-io/cypress/pull/31667). +- Upgraded `webdriver` from `9.11.0` to `9.14.0`. Addressed in [#31689](https://github.com/cypress-io/cypress/pull/31689). ## 14.3.3 diff --git a/cli/package.json b/cli/package.json index 6d1a6a82d9..f07ee7ff13 100644 --- a/cli/package.json +++ b/cli/package.json @@ -83,7 +83,7 @@ "@types/minimatch": "3.0.5", "@types/mocha": "8.0.3", "@types/sinon": "9.0.9", - "@types/sinon-chai": "3.2.5", + "@types/sinon-chai": "3.2.12", "chai": "3.5.0", "chai-as-promised": "7.1.1", "chai-string": "1.5.0", diff --git a/cli/scripts/post-install.js b/cli/scripts/post-install.js index fdc4c6d947..b5da955439 100644 --- a/cli/scripts/post-install.js +++ b/cli/scripts/post-install.js @@ -71,7 +71,7 @@ makeReferenceTypesCommentRelative('chai', '../chai/index.d.ts', sinonChaiFilenam makeReferenceTypesCommentRelative('sinon', '../sinon/index.d.ts', sinonChaiFilename) // and an import sinon line to be changed to relative path -shell.sed('-i', 'from \'sinon\';', 'from \'../sinon\';', sinonChaiFilename) +shell.sed('-i', 'from \"sinon\";', 'from \"../sinon\";', sinonChaiFilename) // copy experimental network stubbing type definitions // so users can import: `import 'cypress/types/net-stubbing'` diff --git a/npm/eslint-plugin-dev/package.json b/npm/eslint-plugin-dev/package.json index 717a1e221d..5407a959ad 100644 --- a/npm/eslint-plugin-dev/package.json +++ b/npm/eslint-plugin-dev/package.json @@ -23,7 +23,7 @@ "eslint-plugin-mocha": "^8.2.0", "eslint-plugin-promise": "^4.2.1", "sinon": "^7.3.2", - "sinon-chai": "^3.3.0" + "sinon-chai": "^3.7.0" }, "peerDependencies": { "@babel/eslint-parser": "^7.25.1", diff --git a/npm/puppeteer/CHANGELOG.md b/npm/puppeteer/CHANGELOG.md index ed69fcb232..7942e0b0d0 100644 --- a/npm/puppeteer/CHANGELOG.md +++ b/npm/puppeteer/CHANGELOG.md @@ -1,3 +1,5 @@ +# [@cypress/puppeteer-v0.1.6](https://github.com/cypress-io/cypress/compare/@cypress/puppeteer-v0.1.5...@cypress/puppeteer-v0.1.6) (2025-05-16) + # [@cypress/puppeteer-v0.1.5](https://github.com/cypress-io/cypress/compare/@cypress/puppeteer-v0.1.4...@cypress/puppeteer-v0.1.5) (2024-06-07) diff --git a/npm/puppeteer/README.md b/npm/puppeteer/README.md index 80222c68a4..b4201eb7cf 100644 --- a/npm/puppeteer/README.md +++ b/npm/puppeteer/README.md @@ -46,7 +46,7 @@ Before using `@cypress/puppeteer`, ensure the following requirements are met: - Cypress 13.6.0+ is required. - Only Chromium-based browsers are supported, such as Chrome for Testing, Chromium, and Electron. -- Chrome-branded browsers (e.g., standard Chrome) are not supported in version 137+ due to Chrome's removal of the `--load-extension` flag. We recommend using Chrome for Testing or Chromium instead. See Cypress Docker image examples for [Chrome for Testing](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chrome-for-testing) and [Chromium](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chromium). +- Chrome-branded browsers (e.g., standard Chrome) are not supported in version 137+ due to Chrome's removal of the `--load-extension` flag. We recommend using Electron, Chrome for Testing or Chromium instead. See Cypress Docker image examples for [Chrome for Testing](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chrome-for-testing) and [Chromium](https://github.com/cypress-io/cypress-docker-images/tree/master/examples/chromium). Note this change only applies to headed applications such as `cypress open` or `cypress run --headed`. The plugin will work as expected in `cypress run` mode in any version of Chrome. ## Usage diff --git a/npm/puppeteer/src/plugin/setup.ts b/npm/puppeteer/src/plugin/setup.ts index 3f0d1f5133..e4122fce2d 100644 --- a/npm/puppeteer/src/plugin/setup.ts +++ b/npm/puppeteer/src/plugin/setup.ts @@ -63,6 +63,11 @@ export function setup (options: SetupOptions) { try { options.on('after:browser:launch', (browser: Cypress.Browser, options: Cypress.AfterBrowserLaunchDetails) => { + if (Number(browser.majorVersion) >= 137 && browser.name === 'chrome' && browser.isHeaded) { + // @see https://github.com/cypress-io/cypress/issues/31703 + throw pluginError('@cypress/puppeteer does not work in Google Chrome v137 and higher in cypress open mode (or headed run mode). If you need to use @cypress/puppeteer in headed mode, please use Electron, Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.') + } + cypressBrowser = browser debuggerUrl = options.webSocketDebuggerUrl }) diff --git a/npm/puppeteer/test/unit/setup.spec.ts b/npm/puppeteer/test/unit/setup.spec.ts index f33b4dc7f8..0a0009ed99 100644 --- a/npm/puppeteer/test/unit/setup.spec.ts +++ b/npm/puppeteer/test/unit/setup.spec.ts @@ -274,6 +274,17 @@ describe('#setup', () => { await task({ name: testTask, args: [] }) expect(activateMainTabExport.activateMainTab).not.to.be.called }) + + it('catastrophically fails when the browser is Google Chrome Branded 137 and up and we are running in headed mode', async () => { + setup({ on, onMessage, puppeteer: mockPuppeteer as PuppeteerNode }) + expect(() => { + on.withArgs('after:browser:launch').yield({ family: 'chromium', isHeaded: true, name: 'chrome', majorVersion: '137' }, { webSocketDebuggerUrl: 'ws://debugger' }) + }).to.throw('@cypress/puppeteer does not work in Google Chrome v137 and higher in cypress open mode (or headed run mode). If you need to use @cypress/puppeteer in headed mode, please use Electron, Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.') + + expect(() => { + on.withArgs('after:browser:launch').yield({ family: 'chromium', isHeaded: true, name: 'chrome', majorVersion: '141' }, { webSocketDebuggerUrl: 'ws://debugger' }) + }).to.throw('@cypress/puppeteer does not work in Google Chrome v137 and higher in cypress open mode (or headed run mode). If you need to use @cypress/puppeteer in headed mode, please use Electron, Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.') + }) }) describe('validation', () => { diff --git a/npm/webpack-preprocessor/package.json b/npm/webpack-preprocessor/package.json index b6f2739aa8..a07a422aa0 100644 --- a/npm/webpack-preprocessor/package.json +++ b/npm/webpack-preprocessor/package.json @@ -39,7 +39,7 @@ "proxyquire": "2.1.3", "semantic-release": "22.0.12", "sinon": "^9.0.0", - "sinon-chai": "^3.5.0", + "sinon-chai": "^3.7.0", "snap-shot-it": "7.9.10", "ts-node": "^10.9.2", "webpack": "^5.39.0" diff --git a/package.json b/package.json index 0e68a5ed1f..b5563dc500 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cypress", - "version": "14.3.3", + "version": "14.4.0", "description": "Cypress is a next generation front end testing tool built for the modern web", "private": true, "scripts": { @@ -117,7 +117,7 @@ "@types/react-dom": "18.3.1", "@types/request-promise": "4.1.45", "@types/send": "^0.17.1", - "@types/sinon-chai": "3.2.3", + "@types/sinon-chai": "3.2.12", "@types/through2": "^2.0.36", "@types/underscore.string": "0.0.38", "@typescript-eslint/eslint-plugin": "7.2.0", @@ -199,6 +199,7 @@ "semver": "^7.7.1", "shelljs": "0.8.5", "sinon": "7.3.2", + "sinon-chai": "3.7.0", "snap-shot-it": "7.9.10", "stop-only": "3.4.1", "strip-ansi": "6.0.1", @@ -278,7 +279,7 @@ "**/ua-parser-js": "0.7.33", "@types/react": "18.3.12", "browserify-sign": "4.2.2", - "devtools-protocol": "0.0.1413303", + "devtools-protocol": "0.0.1459876", "sharp": "0.29.3", "vue-template-compiler": "2.6.12" }, diff --git a/packages/app/cypress/e2e/studio/studio-cloud.cy.ts b/packages/app/cypress/e2e/studio/studio-cloud.cy.ts index 74149c8a12..e0a104e391 100644 --- a/packages/app/cypress/e2e/studio/studio-cloud.cy.ts +++ b/packages/app/cypress/e2e/studio/studio-cloud.cy.ts @@ -148,13 +148,16 @@ describe('Studio Cloud', () => { }) cy.mockStudioFullSnapshot({ - id: 1, - nodeType: 1, - nodeName: 'div', - localName: 'div', - nodeValue: 'div', - children: [], - shadowRoots: [], + fullSnapshot: { + id: 1, + nodeType: 1, + nodeName: 'div', + localName: 'div', + nodeValue: 'div', + children: [], + shadowRoots: [], + }, + url: 'http://localhost:3000/cypress/e2e/index.html', }) const deferred = pDefer() diff --git a/packages/data-context/package.json b/packages/data-context/package.json index c5207d95ab..32263a0e72 100644 --- a/packages/data-context/package.json +++ b/packages/data-context/package.json @@ -88,7 +88,7 @@ "@types/parse-glob": "3.0.29", "@types/prettier": "2.4.3", "@types/sinon": "10.0.11", - "@types/sinon-chai": "3.2.8", + "@types/sinon-chai": "3.2.12", "@types/stringify-object": "^3.0.0", "mocha": "7.0.1", "mocha-junit-reporter": "2.2.0", diff --git a/packages/driver/package.json b/packages/driver/package.json index f3b41808bf..2a4efcaeca 100644 --- a/packages/driver/package.json +++ b/packages/driver/package.json @@ -34,7 +34,7 @@ "@packages/telemetry": "0.0.0-development", "@packages/ts": "0.0.0-development", "@packages/types": "0.0.0-development", - "@sinonjs/fake-timers": "8.1.0", + "@sinonjs/fake-timers": "11.3.1", "@types/chai": "5.0.1", "@types/chai-subset": "1.3.5", "@types/common-tags": "^1.8.0", diff --git a/packages/errors/__snapshot-html__/CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED.html b/packages/errors/__snapshot-html__/CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED.html new file mode 100644 index 0000000000..daa57bd90a --- /dev/null +++ b/packages/errors/__snapshot-html__/CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED.html @@ -0,0 +1,38 @@ + + + + + + + + + + + +
Google Chrome v137 and higher does not allow loading extensions via --load-extension. If you need to load an extension to test with Cypress, please use Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.
+
\ No newline at end of file diff --git a/packages/errors/src/errors.ts b/packages/errors/src/errors.ts index 9b3e03d502..a81c9adc8c 100644 --- a/packages/errors/src/errors.ts +++ b/packages/errors/src/errors.ts @@ -98,6 +98,10 @@ export const AllCypressErrors = { This option will not have an effect in ${fmt.off(_.capitalize(browser))}. Tests that rely on web security being disabled will not run as expected.` }, + CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED: () => { + return errTemplate`\ + Google Chrome v137 and higher does not allow loading extensions via --load-extension. If you need to load an extension to test with Cypress, please use Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.` + }, BROWSER_UNSUPPORTED_LAUNCH_OPTION: (browser: string, options: string[]) => { return errTemplate`\ Warning: The following browser launch options were provided but are not supported by ${fmt.highlightSecondary(browser)} diff --git a/packages/errors/test/unit/visualSnapshotErrors_spec.ts b/packages/errors/test/unit/visualSnapshotErrors_spec.ts index c99e1bbd74..cc7ca5c953 100644 --- a/packages/errors/test/unit/visualSnapshotErrors_spec.ts +++ b/packages/errors/test/unit/visualSnapshotErrors_spec.ts @@ -339,6 +339,11 @@ describe('visual error templates', () => { default: [err], } }, + CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED: () => { + return { + default: [], + } + }, CHROME_WEB_SECURITY_NOT_SUPPORTED: () => { return { default: ['firefox'], diff --git a/packages/extension/package.json b/packages/extension/package.json index 37700dd447..cbc28271c8 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -34,7 +34,7 @@ "mock-require": "3.0.3", "rimraf": "5.0.10", "sinon": "7.3.2", - "sinon-chai": "3.3.0", + "sinon-chai": "3.7.0", "ts-loader": "9.5.2", "webextension-polyfill": "0.4.0", "webpack": "^5.88.2" diff --git a/packages/graphql/schemas/schema.graphql b/packages/graphql/schemas/schema.graphql index b7ec7bbf61..50c4487926 100644 --- a/packages/graphql/schemas/schema.graphql +++ b/packages/graphql/schemas/schema.graphql @@ -1128,6 +1128,7 @@ enum ErrorTypeEnum { CDP_COULD_NOT_RECONNECT CDP_RETRYING_CONNECTION CDP_VERSION_TOO_OLD + CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED CHROME_WEB_SECURITY_NOT_SUPPORTED CLOUD_ALREADY_COMPLETE CLOUD_API_RESPONSE_FAILED_RETRYING diff --git a/packages/https-proxy/package.json b/packages/https-proxy/package.json index 45ba0cfc6c..21873efd45 100644 --- a/packages/https-proxy/package.json +++ b/packages/https-proxy/package.json @@ -33,7 +33,7 @@ "mocha": "3.5.3", "sinon": "1.17.7", "sinon-as-promised": "4.0.3", - "sinon-chai": "3.3.0", + "sinon-chai": "3.7.0", "ssl-root-cas": "1.3.1", "supertest": "4.0.2" }, diff --git a/packages/launcher/package.json b/packages/launcher/package.json index e981276d6c..6667a6d875 100644 --- a/packages/launcher/package.json +++ b/packages/launcher/package.json @@ -34,7 +34,7 @@ "mocha": "3.5.3", "mock-fs": "5.4.0", "sinon": "^10.0.0", - "sinon-chai": "3.4.0", + "sinon-chai": "3.7.0", "typescript": "~5.4.5" }, "files": [ diff --git a/packages/network/package.json b/packages/network/package.json index 1d54439b9c..b7f67a604b 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -37,7 +37,7 @@ "express": "4.21.0", "mocha": "6.2.2", "sinon": "7.3.1", - "sinon-chai": "3.3.0", + "sinon-chai": "3.7.0", "typescript": "~5.4.5" }, "files": [ diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 353862cac3..6d9dc7543e 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -44,7 +44,7 @@ "@packages/types": "0.0.0-development", "@types/express": "4.17.2", "@types/supertest": "2.0.10", - "devtools-protocol": "0.0.1413303", + "devtools-protocol": "0.0.1459876", "express": "4.21.0", "supertest": "6.0.1", "typescript": "~5.4.5" diff --git a/packages/rewriter/package.json b/packages/rewriter/package.json index 72a68a3f19..b457f5122e 100644 --- a/packages/rewriter/package.json +++ b/packages/rewriter/package.json @@ -30,7 +30,7 @@ "mocha": "3.5.3", "nock": "13.2.9", "sinon": "9.0.2", - "sinon-chai": "3.5.0", + "sinon-chai": "3.7.0", "snap-shot-it": "7.9.10" }, "files": [ diff --git a/packages/server/lib/browsers/bidi_automation.ts b/packages/server/lib/browsers/bidi_automation.ts index a953b98c08..1266d45a71 100644 --- a/packages/server/lib/browsers/bidi_automation.ts +++ b/packages/server/lib/browsers/bidi_automation.ts @@ -6,6 +6,7 @@ import { cookieMatches } from '../automation/util' import { bidiKeyPress } from '../automation/commands/key_press' import { AutomationNotImplemented } from '../automation/automation_not_implemented' +import type Protocol from 'devtools-protocol' import type { Automation } from '../automation' import type { BrowserPreRequest, BrowserResponseReceived, ResourceType } from '@packages/proxy' import type { AutomationMiddleware, AutomationCommands } from '@packages/types' @@ -304,7 +305,7 @@ export class BidiAutomation { headers: parsedHeaders, resourceType, originalResourceType: params.request.initiatorType || params.request.destination, - initiator: params.initiator, + initiator: params.initiator as Protocol.Network.Initiator, // Since we are NOT using CDP, we set the values to 0 to indicate that we do not have this information. // This is important when determining pre-request timeout and removal behavior cdpRequestWillBeSentTimestamp: 0, diff --git a/packages/server/lib/browsers/chrome.ts b/packages/server/lib/browsers/chrome.ts index a891e26d35..c2d969d3b7 100644 --- a/packages/server/lib/browsers/chrome.ts +++ b/packages/server/lib/browsers/chrome.ts @@ -145,6 +145,14 @@ const _normalizeArgExtensions = function (extPath, args, pluginExtensions, brows return arg.includes(LOAD_EXTENSION) }) + if (loadExtension || pluginExtensions.length > 0) { + // @see https://github.com/cypress-io/cypress/issues/31702 + if (Number(browser.majorVersion) >= 137 && browser.name === 'chrome') { + // eslint-disable-next-line no-console + errors.warning('CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED') + } + } + if (loadExtension) { args = _.without(args, loadExtension) diff --git a/packages/server/package.json b/packages/server/package.json index ffd71511c1..60ef3ad542 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -135,7 +135,7 @@ "url-parse": "1.5.10", "uuid": "8.3.2", "wait-port": "1.1.0", - "webdriver": "9.11.0", + "webdriver": "9.14.0", "webpack-virtual-modules": "0.5.0", "widest-line": "3.1.0" }, @@ -181,7 +181,7 @@ "chai-uuid": "1.0.6", "chrome-har-capturer": "0.13.4", "cross-env": "6.0.3", - "devtools-protocol": "0.0.1413303", + "devtools-protocol": "0.0.1459876", "eol": "0.9.1", "esbuild": "^0.15.3", "eventsource": "2.0.2", diff --git a/packages/server/patches/@wdio+protocols+9.14.0.patch b/packages/server/patches/@wdio+protocols+9.14.0.patch new file mode 100644 index 0000000000..6de9073ee6 --- /dev/null +++ b/packages/server/patches/@wdio+protocols+9.14.0.patch @@ -0,0 +1,18 @@ +diff --git a/node_modules/@wdio/protocols/build/index.js b/node_modules/@wdio/protocols/build/index.js +index 374e3dd..9c820d0 100644 +--- a/node_modules/@wdio/protocols/build/index.js ++++ b/node_modules/@wdio/protocols/build/index.js +@@ -5276,9 +5276,11 @@ var gecko_default = { + ], + parameters: [ + { +- name: "addon", ++ // cypress uses 'path' over 'addon' to avoid zipping the extension, ++ // which is easier for cypress to incorporate and doesn't break users ++ name: "path", + type: "string", +- description: "base64 string of the add on file", ++ description: "path to the extension", + required: true + }, + { diff --git a/packages/server/patches/@wdio+protocols+9.7.0.patch b/packages/server/patches/@wdio+protocols+9.7.0.patch deleted file mode 100644 index d0b00d5de8..0000000000 --- a/packages/server/patches/@wdio+protocols+9.7.0.patch +++ /dev/null @@ -1,79 +0,0 @@ -diff --git a/node_modules/@wdio/protocols/README.md b/node_modules/@wdio/protocols/README.md -deleted file mode 100644 -index eea42bf..0000000 ---- a/node_modules/@wdio/protocols/README.md -+++ /dev/null -@@ -1,55 +0,0 @@ --WebdriverIO Protocol Helper --=========================== -- --This package stores the definition for various automation protocols such as [WebDriver](https://w3c.github.io/webdriver/) or vendor specific protocol extensions like for [SauceLabs](https://saucelabs.com/). Unless you are interested in generating a WebDriver client there should be no reason why you should need this package. This package holds the definition of the following protocols: -- --- [WebDriver](https://w3c.github.io/webdriver/) --- [JSON Wire Protocol](https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol) --- [Appium](http://appium.io/) --- [Mobile JSON Wire Protocol](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md) --- [Sauce Labs](https://saucelabs.com/) --- Chrome (WebDriver extension when running Chromedriver) --- Selenium (when running Selenium Standalone Server) -- --## Install -- --To install the package, run: -- --```sh --npm install @wdio/protocols --``` -- --## Usage -- --You can get data by importing the package as follows: -- --```js --import { WebDriverProtocol, MJsonWProtocol, AppiumProtocol, ChromiumProtocol, SauceLabsProtocol, SeleniumProtocol } from '@wdio/protocols' -- --/** -- * get description of session command -- */ --console.log(WebDriverProtocol['/session'].POST.description) --``` -- --## TypeScript Interfaces -- --The package exposes TypeScript interfaces for all protocols. You can use them for your own project as follows: -- --```ts --import type { WebDriverCommands } from '@wdio/protocol' -- --import { WebDriverCommands, WebDriverCommandsAsync } from './src' -- --const browser = {} as WebDriverCommands --browser.sendAlertText(true) --// fails with "Argument of type 'boolean' is not assignable to parameter of type 'string'.ts(2345)" -- --const asyncBrowser = {} as WebDriverCommandsAsync --const a = await asyncBrowser.getTitle() --type foo = typeof a // string --``` -- ------ -- --For more information on WebdriverIO see the [homepage](https://webdriver.io). -diff --git a/node_modules/@wdio/protocols/build/index.js b/node_modules/@wdio/protocols/build/index.js -index b33b8bd..0f7da3a 100644 ---- a/node_modules/@wdio/protocols/build/index.js -+++ b/node_modules/@wdio/protocols/build/index.js -@@ -5166,9 +5166,11 @@ var gecko_default = { - ], - parameters: [ - { -- name: "addon", -+ // cypress uses 'path' over 'addon' to avoid zipping the extension, -+ // which is easier for cypress to encorporate and doesn't break users -+ name: "path", - type: "string", -- description: "base64 string of the add on file", -+ description: "path to the extension", - required: true - }, - { diff --git a/packages/server/patches/@wdio+utils+9.11.0.patch b/packages/server/patches/@wdio+utils+9.14.0.patch similarity index 79% rename from packages/server/patches/@wdio+utils+9.11.0.patch rename to packages/server/patches/@wdio+utils+9.14.0.patch index cefe05ffbe..c20e3cb2ff 100644 --- a/packages/server/patches/@wdio+utils+9.11.0.patch +++ b/packages/server/patches/@wdio+utils+9.14.0.patch @@ -1,15 +1,5 @@ -diff --git a/node_modules/@wdio/utils/README.md b/node_modules/@wdio/utils/README.md -deleted file mode 100644 -index 3e8048a..0000000 ---- a/node_modules/@wdio/utils/README.md -+++ /dev/null -@@ -1,4 +0,0 @@ --WDIO Repl --========= -- --> A WDIO helper utility to provide a repl interface WebdriverIO diff --git a/node_modules/@wdio/utils/build/node.js b/node_modules/@wdio/utils/build/node.js -index c499226..92050be 100644 +index 6f664e3..4bb80b5 100644 --- a/node_modules/@wdio/utils/build/node.js +++ b/node_modules/@wdio/utils/build/node.js @@ -5,6 +5,7 @@ import cp2 from "node:child_process"; @@ -36,5 +26,5 @@ index c499226..92050be 100644 +// wrap in cypress debugger statement to avoid extraneous messages to the console +log2.setLevel(debugModule.enabled('cypress-verbose:server:browsers:webdriver') ? 'info' : 'silent') var DRIVER_WAIT_TIMEOUT = 10 * 1e3; + var DRIVER_RETRY_INTERVAL = 100; async function startWebDriver(options) { - if (process.env.WDIO_SKIP_DRIVER_SETUP) { diff --git a/packages/server/test/unit/browsers/chrome_spec.js b/packages/server/test/unit/browsers/chrome_spec.js index 7e61c07da0..62436c7a46 100644 --- a/packages/server/test/unit/browsers/chrome_spec.js +++ b/packages/server/test/unit/browsers/chrome_spec.js @@ -270,6 +270,32 @@ describe('lib/browsers/chrome', () => { }) }) + it('warns the user if `--load-extension` is passed into branded chrome 137 and up', async function () { + sinon.stub(console, 'log') + + plugins.registerEvent('before:browser:launch', (browser, config) => { + return Promise.resolve({ args: ['--foo=bar', '--load-extension=/foo/bar/baz.js,/quux.js'] }) + }) + + await chrome.open({ isHeaded: true, majorVersion: '137', name: 'chrome' }, 'http://', { onWarning: () => {}, onError: () => {} }, this.automation) + + // eslint-disable-next-line no-console + expect(console.log).to.have.been.calledWith(sinon.match('Google Chrome v137 and higher does not allow loading extensions via --load-extension. If you need to load an extension to test with Cypress, please use Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.')) + }) + + it('warns the user if launchOptions.extensions is passed into branded chrome 137 and up', async function () { + sinon.stub(console, 'log') + + plugins.registerEvent('before:browser:launch', (browser, config) => { + return Promise.resolve({ args: ['--foo=bar'], extensions: ['/foo/bar/baz.js', '/quux.js'] }) + }) + + await chrome.open({ isHeaded: true, majorVersion: '139', name: 'chrome' }, 'http://', { onWarning: () => {}, onError: () => {} }, this.automation) + + // eslint-disable-next-line no-console + expect(console.log).to.have.been.calledWith(sinon.match('Google Chrome v137 and higher does not allow loading extensions via --load-extension. If you need to load an extension to test with Cypress, please use Chrome for Testing, Chromium, or another Chrome variant that supports loading extensions.')) + }) + it('cleans up an unclean browser profile exit status', function () { this.readJson.withArgs('/profile/dir/Default/Preferences').resolves({ profile: { diff --git a/packages/socket/package.json b/packages/socket/package.json index 070324003c..22028c95c1 100644 --- a/packages/socket/package.json +++ b/packages/socket/package.json @@ -32,7 +32,7 @@ "@types/uuid": "8.3.2", "chai": "3.5.0", "cross-env": "6.0.3", - "devtools-protocol": "0.0.1413303", + "devtools-protocol": "0.0.1459876", "mocha": "3.5.3", "resolve-pkg": "2.0.0" }, diff --git a/packages/types/package.json b/packages/types/package.json index 3c8d7dc997..27f6d59d23 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -17,7 +17,7 @@ "@types/node": "20.16.0", "axios": "^1.8.3", "better-sqlite3": "11.5.0", - "devtools-protocol": "0.0.1413303", + "devtools-protocol": "0.0.1459876", "express": "4.21.0", "socket.io": "4.0.1", "typescript": "~5.4.5" diff --git a/packages/web-config/package.json b/packages/web-config/package.json index 4af7476520..f94783206a 100644 --- a/packages/web-config/package.json +++ b/packages/web-config/package.json @@ -37,7 +37,7 @@ "resolve-url-loader": "5.0.0", "sass": "1.64.1", "sass-loader": "13.3.2", - "sinon-chai": "3.3.0", + "sinon-chai": "3.7.0", "stream-browserify": "3.0.0", "url": "0.11.1", "webpack": "^5.88.2", diff --git a/tooling/v8-snapshot/cache/darwin/snapshot-meta.json b/tooling/v8-snapshot/cache/darwin/snapshot-meta.json index 284e835e5c..2ccd7f73f3 100644 --- a/tooling/v8-snapshot/cache/darwin/snapshot-meta.json +++ b/tooling/v8-snapshot/cache/darwin/snapshot-meta.json @@ -4169,5 +4169,5 @@ "./tooling/v8-snapshot/cache/darwin/snapshot-entry.js" ], "deferredHashFile": "yarn.lock", - "deferredHash": "f9e2de4e3ec1e82df68adb49af36c69e62529a89e528442412780a181a1b8af5" + "deferredHash": "be99987ecceeb9265c3a09152ee4ea5e02e0200f7afc4e21332a36e5e8819fe6" } \ No newline at end of file diff --git a/tooling/v8-snapshot/cache/linux/snapshot-meta.json b/tooling/v8-snapshot/cache/linux/snapshot-meta.json index 50bf20a152..bf6f031c52 100644 --- a/tooling/v8-snapshot/cache/linux/snapshot-meta.json +++ b/tooling/v8-snapshot/cache/linux/snapshot-meta.json @@ -4172,5 +4172,5 @@ "./tooling/v8-snapshot/cache/linux/snapshot-entry.js" ], "deferredHashFile": "yarn.lock", - "deferredHash": "f9e2de4e3ec1e82df68adb49af36c69e62529a89e528442412780a181a1b8af5" + "deferredHash": "be99987ecceeb9265c3a09152ee4ea5e02e0200f7afc4e21332a36e5e8819fe6" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8e3e5e8526..15593d552d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6716,19 +6716,12 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== +"@sinonjs/fake-timers@11.3.1", "@sinonjs/fake-timers@^11.2.2": + version "11.3.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz#51d6e8d83ca261ff02c0ab0e68e9db23d5cd5999" + integrity sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA== dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/fake-timers@^11.2.2": - version "11.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" - integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== - dependencies: - "@sinonjs/commons" "^3.0.0" + "@sinonjs/commons" "^3.0.1" "@sinonjs/fake-timers@^6.0.0", "@sinonjs/fake-timers@^6.0.1": version "6.0.1" @@ -8383,26 +8376,10 @@ dependencies: "@types/node" "*" -"@types/sinon-chai@3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.3.tgz#afe392303dda95cc8069685d1e537ff434fa506e" - integrity sha512-TOUFS6vqS0PVL1I8NGVSNcFaNJtFoyZPXZ5zur+qlhDfOmQECZZM4H4kKgca6O8L+QceX/ymODZASfUfn+y4yQ== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon-chai@3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.5.tgz#df21ae57b10757da0b26f512145c065f2ad45c48" - integrity sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon-chai@3.2.8": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== +"@types/sinon-chai@3.2.12": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.12.tgz#c7cb06bee44a534ec84f3a5534c3a3a46fd779b6" + integrity sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ== dependencies: "@types/chai" "*" "@types/sinon" "*" @@ -9193,14 +9170,14 @@ dependencies: vue-demi "*" -"@wdio/config@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-9.11.0.tgz#d16ba92ad0fdde2573e5861d1bd1642f8fb53d5e" - integrity sha512-lBcmd7r+3nHJwIWDZ/cLIXcIL9rCmQmMvMWQ+Ykcrlc2khePX92VZyd0igptrZATJGD3tQ7VySR5Bozz6uMzyA== +"@wdio/config@9.14.0": + version "9.14.0" + resolved "https://registry.yarnpkg.com/@wdio/config/-/config-9.14.0.tgz#7a37e6ec541dd942e7cf04d2d65a9634c9529250" + integrity sha512-mW6VAXfUgd2j+8YJfFWvg8Ba/7g1Brr6/+MFBpp5rTQsw/2bN3PBJsQbWpNl99OCgoS8vgc5Ykps5ZUEeffSVQ== dependencies: "@wdio/logger" "9.4.4" - "@wdio/types" "9.10.1" - "@wdio/utils" "9.11.0" + "@wdio/types" "9.14.0" + "@wdio/utils" "9.14.0" deepmerge-ts "^7.0.3" glob "^10.2.2" import-meta-resolve "^4.0.0" @@ -9215,26 +9192,26 @@ loglevel-plugin-prefix "^0.8.4" strip-ansi "^7.1.0" -"@wdio/protocols@9.7.0": - version "9.7.0" - resolved "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.7.0.tgz#2f2c0a7e371d65305e0d64980f63caa98ba5a4de" - integrity sha512-5DI8cqJqT9K6oQn8UpaSTmcGAl4ufkUWC5FoPT3oXdLjILfxvweZDf/2XNBCbGMk4+VOMKqB2ofOqKhDIB2nAg== +"@wdio/protocols@9.14.0": + version "9.14.0" + resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-9.14.0.tgz#5e4fd87413121cf6cc9164e13b096e565d01f0a9" + integrity sha512-inJR+G8iiFrk8/JPMfxpy6wA7rvMIZFV0T8vDN1Io7sGGj+EXX7ujpDxoCns53qxV4RytnSlgHRcCaASPFcecQ== -"@wdio/types@9.10.1": - version "9.10.1" - resolved "https://registry.yarnpkg.com/@wdio/types/-/types-9.10.1.tgz#89d3eb936ac2dc5675b01652ee9475e1ff31f325" - integrity sha512-/t1VXPU5Ad1FQjRUP0WlK7IR0dCTX5hSkul8SpCuUpWbeyI4Iol/Wx2b1YU6nS+Ydh78rJCyHxtV0eE5TM1rbw== +"@wdio/types@9.14.0": + version "9.14.0" + resolved "https://registry.yarnpkg.com/@wdio/types/-/types-9.14.0.tgz#50bde9f364d6b196d7d27edacf6825cee6241855" + integrity sha512-Zqc4sxaQLIXdI1EHItIuVIOn7LvPmDvl9JEANwiJ35ck82Xlj+X55Gd9NtELSwChzKgODD0OBzlLgXyxTr69KA== dependencies: "@types/node" "^20.1.0" -"@wdio/utils@9.11.0": - version "9.11.0" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-9.11.0.tgz#006234c865579e86b121998c78e47e86013de57d" - integrity sha512-chVbHqrjDlIKCLoAPLdrFK8Qozu/S+fbubqlyazohAKnouCUCa2goYs7faYR0lkmLqm92PllJS+KBRAha9V/tg== +"@wdio/utils@9.14.0": + version "9.14.0" + resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-9.14.0.tgz#963e0679730fe0473c760afddc335c157a839b5c" + integrity sha512-oJapwraSflOe0CmeF3TBocdt983hq9mCutLCfie4QmE+TKRlCsZz4iidG1NRAZPGdKB32nfHtyQlW0Dfxwn6RA== dependencies: "@puppeteer/browsers" "^2.2.0" "@wdio/logger" "9.4.4" - "@wdio/types" "9.10.1" + "@wdio/types" "9.14.0" decamelize "^6.0.0" deepmerge-ts "^7.0.3" edgedriver "^6.1.1" @@ -14144,10 +14121,10 @@ detective@^5.0.2: defined "^1.0.0" minimist "^1.1.1" -devtools-protocol@0.0.1159816, devtools-protocol@0.0.1413303, devtools-protocol@0.0.927104: - version "0.0.1413303" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1413303.tgz#72a194e7474a17cd75f8c1d2627db0563e2f719e" - integrity sha512-AjVpl/7DdE1gf40ydrVpBdGYprq/seOLgN46p+rYyJ/lfhrI6e4zvX0HWSr3cIvj16Ks9kwEdmvmwlyKcELBBw== +devtools-protocol@0.0.1159816, devtools-protocol@0.0.1459876, devtools-protocol@0.0.927104: + version "0.0.1459876" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1459876.tgz#07f69c1921ae89624f65ddd311d2214e8cb35e1e" + integrity sha512-9Dng0X6IdYO8CxlNlOYW+Jc8deGZdOQOL4Sy2UbA+XiCy1Xxi7QtP5CWZKEYv4EEfp7hxp7LhF6RQWfUXK1+/w== dicer@0.2.5: version "0.2.5" @@ -27927,22 +27904,7 @@ sinon-as-promised@4.0.3: create-thenable "~1.0.0" native-promise-only "~0.8.1" -sinon-chai@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.3.0.tgz#8084ff99451064910fbe2c2cb8ab540c00b740ea" - integrity sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA== - -sinon-chai@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.4.0.tgz#06fb88dee80decc565106a3061d380007f21e18d" - integrity sha512-BpVxsjEkGi6XPbDXrgWUe7Cb1ZzIfxKUbu/MmH5RoUnS7AXpKo3aIYIyQUg0FMvlUL05aPt7VZuAdaeQhEnWxg== - -sinon-chai@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.5.0.tgz#c9a78304b0e15befe57ef68e8a85a00553f5c60e" - integrity sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg== - -sinon-chai@3.7.0, sinon-chai@^3.3.0, sinon-chai@^3.5.0, sinon-chai@^3.7.0: +sinon-chai@3.7.0, sinon-chai@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== @@ -31580,18 +31542,18 @@ web-streams-polyfill@^3.0.3: resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -webdriver@9.11.0: - version "9.11.0" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-9.11.0.tgz#12c33e6481ca3ddfbda61ca07fb445615b8f4c45" - integrity sha512-KQdI5sK+YwnUqol8MhvW9y6V+fhaW82KRhqMYnVCOrG4sJFWg7A9OIqR11Buco804HpzxyocRO6MnOQrNvP0vQ== +webdriver@9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-9.14.0.tgz#b448d73ba36f24ab08882906fbb7081faa092d37" + integrity sha512-0mVjxafQ5GNdK4l/FVmmmXGUfLHCSBE4Ml2LG23rxgmw53CThAos6h01UgIEINonxIzgKEmwfqJioo3/frbpbQ== dependencies: "@types/node" "^20.1.0" "@types/ws" "^8.5.3" - "@wdio/config" "9.11.0" + "@wdio/config" "9.14.0" "@wdio/logger" "9.4.4" - "@wdio/protocols" "9.7.0" - "@wdio/types" "9.10.1" - "@wdio/utils" "9.11.0" + "@wdio/protocols" "9.14.0" + "@wdio/types" "9.14.0" + "@wdio/utils" "9.14.0" deepmerge-ts "^7.0.3" undici "^6.20.1" ws "^8.8.0"