From 3ee0fb11784142f18cba55be3e302e9effebd85b Mon Sep 17 00:00:00 2001 From: YASH JAIN Date: Thu, 16 Jul 2026 21:42:51 +0530 Subject: [PATCH] fix(wdio-browserstack-service): refresh framework session id on reloadSession --- packages/browserstack-service/src/service.ts | 6 ++++ .../tests/service.test.ts | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/packages/browserstack-service/src/service.ts b/packages/browserstack-service/src/service.ts index c5f21d1..8698a31 100644 --- a/packages/browserstack-service/src/service.ts +++ b/packages/browserstack-service/src/service.ts @@ -762,6 +762,12 @@ export default class BrowserstackService implements Services.ServiceInstance { } this._reloadHappened = true + if (BrowserstackCLI.getInstance().isRunning()) { + const instance = AutomationFramework.getTrackedInstance() as AutomationFrameworkInstance + if (instance) { + AutomationFramework.setState(instance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID, newSessionId) + } + } const { setSessionName, setSessionStatus } = this._options const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true diff --git a/packages/browserstack-service/tests/service.test.ts b/packages/browserstack-service/tests/service.test.ts index 7cfd42e..a617ec1 100644 --- a/packages/browserstack-service/tests/service.test.ts +++ b/packages/browserstack-service/tests/service.test.ts @@ -8,6 +8,8 @@ import * as utils from '../src/util.js' import InsightsHandler from '../src/insights-handler.js' import { BrowserstackCLI } from '../src/cli/index.js' import * as bstackLogger from '../src/bstackLogger.js' +import AutomationFramework from '../src/cli/frameworks/automationFramework.js' +import { AutomationFrameworkConstants } from '../src/cli/frameworks/constants/automationFrameworkConstants.js' const jasmineSuiteTitle = 'Jasmine__TopLevel__Suite' const sessionBaseUrl = 'https://api.browserstack.com/automate/sessions' @@ -206,6 +208,39 @@ describe('onReload()', () => { }) expect(service['_suiteTitle']).toEqual('my suite title') }) + + it('should update framework session id on tracked instance when CLI is running', async () => { + const getInstanceSpy = vi.spyOn(BrowserstackCLI, 'getInstance').mockReturnValue({ isRunning: () => true } as any) + const trackedInstance = {} as any + const getTrackedInstanceSpy = vi.spyOn(AutomationFramework, 'getTrackedInstance').mockReturnValue(trackedInstance) + const setStateSpy = vi.spyOn(AutomationFramework, 'setState').mockImplementation(() => {}) + const updateSpy = vi.spyOn(service, '_update').mockResolvedValue(undefined as any) + const printSpy = vi.spyOn(service, '_printSessionURL').mockResolvedValue(undefined as any) + service['_browser'] = browser + + await service.onReload('1', '2') + expect(setStateSpy).toHaveBeenCalledWith(trackedInstance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID, '2') + + getInstanceSpy.mockRestore() + getTrackedInstanceSpy.mockRestore() + setStateSpy.mockRestore() + updateSpy.mockRestore() + printSpy.mockRestore() + }) + + it('should not update framework session id when CLI is not running', async () => { + const setStateSpy = vi.spyOn(AutomationFramework, 'setState').mockImplementation(() => {}) + const updateSpy = vi.spyOn(service, '_update').mockResolvedValue(undefined as any) + const printSpy = vi.spyOn(service, '_printSessionURL').mockResolvedValue(undefined as any) + service['_browser'] = browser + + await service.onReload('1', '2') + expect(setStateSpy).not.toHaveBeenCalled() + + setStateSpy.mockRestore() + updateSpy.mockRestore() + printSpy.mockRestore() + }) }) describe('beforeSession', () => {