From 5b4268ad160ac2458468746f178b1f90b883185d Mon Sep 17 00:00:00 2001 From: shadowusr Date: Wed, 18 Mar 2026 14:17:07 +0300 Subject: [PATCH] fix: do not log error message in case of successful connection to bidi --- packages/webdriver/src/node/bidi.ts | 7 ++++++- packages/webdriver/tests/node/bidi.test.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/webdriver/src/node/bidi.ts b/packages/webdriver/src/node/bidi.ts index 07f58369432..d699fbabec6 100644 --- a/packages/webdriver/src/node/bidi.ts +++ b/packages/webdriver/src/node/bidi.ts @@ -76,8 +76,9 @@ export async function connectWebsocket(candidateUrls: string[], options?: WebSoc return { promise, index } }) + let connectionTimeoutId: ReturnType | undefined const connectionTimeoutPromise = new Promise((resolve) => { - setTimeout(() => { + connectionTimeoutId = setTimeout(() => { log.error(`Could not connect to Bidi protocol of any candidate url in time: "${candidateUrls.join('", "')}"`) return resolve(undefined) }, CONNECTION_TIMEOUT) @@ -88,6 +89,10 @@ export async function connectWebsocket(candidateUrls: string[], options?: WebSoc connectionTimeoutPromise, ]) + if (connectionTimeoutId) { + clearTimeout(connectionTimeoutId) + } + const socketsToCleanup = wsInfo ? websockets.filter((_, index) => wsInfo.index !== index) : websockets for (const socket of socketsToCleanup) { socket.removeAllListeners() diff --git a/packages/webdriver/tests/node/bidi.test.ts b/packages/webdriver/tests/node/bidi.test.ts index 130336dec45..28fdead5ee8 100644 --- a/packages/webdriver/tests/node/bidi.test.ts +++ b/packages/webdriver/tests/node/bidi.test.ts @@ -51,6 +51,8 @@ const log = logger('test') describe('Bidi Node.js implementation', () => { beforeEach(() => { clearInstances() + vi.useRealTimers() + vi.clearAllMocks() }) it('listWebsocketCandidateUrls', async () => { @@ -89,6 +91,23 @@ describe('Bidi Node.js implementation', () => { expect(log.error).not.toHaveBeenCalled() }) + it('does not log a timeout after a successful connection', async () => { + vi.useFakeTimers() + const wsPromise = createBidiConnection('ws://foo/bar') + await vi.advanceTimersByTimeAsync(0) + + instances[1].once.mock.calls[0][1]() // success callback + + const ws = await wsPromise as any + await vi.advanceTimersByTimeAsync(10000) + + expect(ws.wsUrl).toBe('ws://127.0.0.1/bar') + expect(log.info).toHaveBeenCalledWith( + 'Connected to Bidi protocol at ws://127.0.0.1/bar' + ) + expect(log.error).not.toHaveBeenCalled() + }) + it('createBidiConnection returns undefined if no socket connection is established', async () => { const wsPromise = createBidiConnection('ws://foo/bar') await new Promise((resolve) => setTimeout(resolve, 100))