@wdio/selenium-devtools 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +15 -15
  3. package/dist/assertPatcher.d.ts +0 -11
  4. package/dist/assertPatcher.js +0 -123
  5. package/dist/assertPatcher.js.map +0 -1
  6. package/dist/bidi.d.ts +0 -6
  7. package/dist/bidi.js +0 -222
  8. package/dist/bidi.js.map +0 -1
  9. package/dist/constants.d.ts +0 -75
  10. package/dist/constants.js +0 -146
  11. package/dist/constants.js.map +0 -1
  12. package/dist/driverPatcher.d.ts +0 -4
  13. package/dist/driverPatcher.js +0 -256
  14. package/dist/driverPatcher.js.map +0 -1
  15. package/dist/helpers/detachedBackend.d.ts +0 -7
  16. package/dist/helpers/detachedBackend.js +0 -34
  17. package/dist/helpers/detachedBackend.js.map +0 -1
  18. package/dist/helpers/runtime.d.ts +0 -3
  19. package/dist/helpers/runtime.js +0 -47
  20. package/dist/helpers/runtime.js.map +0 -1
  21. package/dist/helpers/suiteManager.d.ts +0 -19
  22. package/dist/helpers/suiteManager.js +0 -131
  23. package/dist/helpers/suiteManager.js.map +0 -1
  24. package/dist/helpers/testManager.d.ts +0 -47
  25. package/dist/helpers/testManager.js +0 -158
  26. package/dist/helpers/testManager.js.map +0 -1
  27. package/dist/helpers/utils.d.ts +0 -26
  28. package/dist/helpers/utils.js +0 -187
  29. package/dist/helpers/utils.js.map +0 -1
  30. package/dist/helpers/videoEncoder.d.ts +0 -2
  31. package/dist/helpers/videoEncoder.js +0 -89
  32. package/dist/helpers/videoEncoder.js.map +0 -1
  33. package/dist/index.d.ts +0 -15
  34. package/dist/index.js +0 -801
  35. package/dist/index.js.map +0 -1
  36. package/dist/reporter.d.ts +0 -18
  37. package/dist/reporter.js +0 -72
  38. package/dist/reporter.js.map +0 -1
  39. package/dist/rerunManager.d.ts +0 -8
  40. package/dist/rerunManager.js +0 -78
  41. package/dist/rerunManager.js.map +0 -1
  42. package/dist/runnerHooks.d.ts +0 -6
  43. package/dist/runnerHooks.js +0 -594
  44. package/dist/runnerHooks.js.map +0 -1
  45. package/dist/screencast.d.ts +0 -11
  46. package/dist/screencast.js +0 -179
  47. package/dist/screencast.js.map +0 -1
  48. package/dist/session.d.ts +0 -48
  49. package/dist/session.js +0 -480
  50. package/dist/session.js.map +0 -1
  51. package/dist/setupConsole.d.ts +0 -1
  52. package/dist/setupConsole.js +0 -13
  53. package/dist/setupConsole.js.map +0 -1
  54. package/dist/types.d.ts +0 -235
  55. package/dist/types.js +0 -5
  56. package/dist/types.js.map +0 -1
package/dist/session.js DELETED
@@ -1,480 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { createRequire } from 'node:module';
4
- import logger from '@wdio/logger';
5
- import { WebSocket } from 'ws';
6
- import { CONSOLE_METHODS, LOG_SOURCES, NAVIGATION_COMMANDS, SPINNER_RE } from './constants.js';
7
- import { stripAnsiCodes, detectLogLevel, createConsoleLogEntry, chromeLogLevelToLogLevel } from './helpers/utils.js';
8
- import { getDriverOriginals } from './driverPatcher.js';
9
- const require = createRequire(import.meta.url);
10
- const log = logger('@wdio/selenium-devtools:SessionCapturer');
11
- export class SessionCapturer {
12
- #ws;
13
- #originalConsoleMethods;
14
- #originalProcessMethods;
15
- #isCapturingConsole = false;
16
- #isCapturingStream = false;
17
- #hasConnected = false;
18
- #driver;
19
- #commandCounter = 0;
20
- #sentCommandIds = new Set();
21
- // True once BiDi inspectors are attached — script-trace path skips streams.
22
- bidiActive = false;
23
- #clientConnected = false;
24
- #clientConnectedWaiters = [];
25
- #onClientDisconnected;
26
- commandsLog = [];
27
- sources = new Map();
28
- consoleLogs = [];
29
- mutations = [];
30
- traceLogs = [];
31
- networkRequests = [];
32
- metadata;
33
- constructor(devtoolsOptions = {}, driver) {
34
- const { port, hostname } = devtoolsOptions;
35
- this.#driver = driver;
36
- if (hostname && port) {
37
- this.#ws = new WebSocket(`ws://${hostname}:${port}/worker`);
38
- this.#ws.on('open', () => {
39
- this.#hasConnected = true;
40
- log.info('✓ Worker WebSocket connected to backend');
41
- });
42
- this.#ws.on('message', (raw) => {
43
- try {
44
- const parsed = JSON.parse(raw.toString());
45
- if (parsed?.scope === 'clientConnected') {
46
- this.#clientConnected = true;
47
- const waiters = this.#clientConnectedWaiters;
48
- this.#clientConnectedWaiters = [];
49
- for (const w of waiters) {
50
- try {
51
- w();
52
- }
53
- catch {
54
- /* ignore */
55
- }
56
- }
57
- }
58
- else if (parsed?.scope === 'clientDisconnected') {
59
- this.#onClientDisconnected?.();
60
- }
61
- }
62
- catch {
63
- // ignore non-JSON messages
64
- }
65
- });
66
- this.#ws.on('error', (err) => log.error(`Couldn't connect to devtools backend: ${err.message}`));
67
- this.#ws.on('close', () => {
68
- log.info('Worker WebSocket disconnected');
69
- });
70
- }
71
- this.#originalConsoleMethods = {
72
- log: console.log,
73
- info: console.info,
74
- warn: console.warn,
75
- error: console.error
76
- };
77
- this.#originalProcessMethods = {
78
- stdoutWrite: process.stdout.write.bind(process.stdout),
79
- stderrWrite: process.stderr.write.bind(process.stderr)
80
- };
81
- this.#patchConsole();
82
- this.#interceptProcessStreams();
83
- }
84
- setDriver(driver) {
85
- this.#driver = driver;
86
- }
87
- awaitClientConnected() {
88
- if (this.#clientConnected) {
89
- return Promise.resolve();
90
- }
91
- return new Promise((resolve) => {
92
- this.#clientConnectedWaiters.push(resolve);
93
- });
94
- }
95
- setClientDisconnectedHandler(fn) {
96
- this.#onClientDisconnected = fn;
97
- }
98
- // ---- console & terminal capture ------------------------------------------
99
- #patchConsole() {
100
- // Non-standard consoles (Jest CustomConsole, Vitest) reroute writes past
101
- // our text filter and create a feedback loop — rely on stream interception.
102
- const protoName = Object.getPrototypeOf(console)?.constructor?.name;
103
- if (protoName && protoName !== 'Console') {
104
- log.info(`Detected non-standard console (${protoName}) — skipping console patching, using stdout interception only`);
105
- return;
106
- }
107
- CONSOLE_METHODS.forEach((method) => {
108
- const originalMethod = this.#originalConsoleMethods[method];
109
- console[method] = (...consoleArgs) => {
110
- this.#isCapturingConsole = true;
111
- const result = originalMethod.apply(console, consoleArgs);
112
- this.#isCapturingConsole = false;
113
- const rawText = consoleArgs
114
- .map((a) => typeof a === 'object' && a !== null ? JSON.stringify(a) : String(a))
115
- .join(' ');
116
- const cleanText = stripAnsiCodes(rawText).trim();
117
- if (!cleanText) {
118
- return result;
119
- }
120
- if (this.#isInternalStreamLine(cleanText)) {
121
- return result;
122
- }
123
- const logEntry = createConsoleLogEntry(method, [cleanText], LOG_SOURCES.TEST);
124
- this.consoleLogs.push(logEntry);
125
- this.sendUpstream('consoleLogs', [logEntry]);
126
- return result;
127
- };
128
- });
129
- }
130
- // Drop lines that would feed back into sendUpstream and loop: pino JSON,
131
- // [SESSION] markers, backend logs, Jest console.info framing.
132
- #isInternalStreamLine(line) {
133
- const t = line.trim();
134
- if (t.startsWith('{"') || t.startsWith('[SESSION]')) {
135
- return true;
136
- }
137
- if (t.includes('@wdio/devtools-backend')) {
138
- return true;
139
- }
140
- if (/^console\.(log|info|warn|error|debug|trace)$/.test(t)) {
141
- return true;
142
- }
143
- if (/^at\s.+:\d+:\d+\)?$/.test(t)) {
144
- return true;
145
- }
146
- return false;
147
- }
148
- #interceptProcessStreams() {
149
- const captureTerminalOutput = (outputData) => {
150
- if (this.#isCapturingStream) {
151
- return;
152
- }
153
- const outputText = typeof outputData === 'string' ? outputData : outputData.toString();
154
- if (!outputText?.trim()) {
155
- return;
156
- }
157
- this.#isCapturingStream = true;
158
- try {
159
- const linesToCapture = [];
160
- for (const rawLine of outputText.split('\n')) {
161
- const segments = rawLine.split('\r').filter((s) => s.trim());
162
- const lastSegment = segments[segments.length - 1] ?? rawLine;
163
- const clean = stripAnsiCodes(lastSegment).trim();
164
- if (!clean ||
165
- this.#isInternalStreamLine(clean) ||
166
- SPINNER_RE.test(clean)) {
167
- continue;
168
- }
169
- linesToCapture.push(clean);
170
- }
171
- for (const clean of linesToCapture) {
172
- const entry = createConsoleLogEntry(detectLogLevel(clean), [clean], LOG_SOURCES.TERMINAL);
173
- this.consoleLogs.push(entry);
174
- this.sendUpstream('consoleLogs', [entry]);
175
- }
176
- }
177
- finally {
178
- this.#isCapturingStream = false;
179
- }
180
- };
181
- const interceptStreamWrite = (stream, original) => {
182
- const capturer = this;
183
- stream.write = function (chunk, ...rest) {
184
- const writeResult = original.call(stream, chunk, ...rest);
185
- if (chunk && !capturer.#isCapturingConsole) {
186
- captureTerminalOutput(chunk);
187
- }
188
- return writeResult;
189
- };
190
- };
191
- interceptStreamWrite(process.stdout, this.#originalProcessMethods.stdoutWrite);
192
- interceptStreamWrite(process.stderr, this.#originalProcessMethods.stderrWrite);
193
- }
194
- #restoreConsole() {
195
- CONSOLE_METHODS.forEach((method) => {
196
- console[method] = this.#originalConsoleMethods[method];
197
- });
198
- }
199
- #restoreProcessStreams() {
200
- process.stdout.write = this.#originalProcessMethods.stdoutWrite;
201
- process.stderr.write = this.#originalProcessMethods.stderrWrite;
202
- }
203
- cleanup() {
204
- this.#restoreConsole();
205
- this.#restoreProcessStreams();
206
- }
207
- // ---- WebSocket plumbing --------------------------------------------------
208
- get isReportingUpstream() {
209
- return Boolean(this.#ws) && this.#ws?.readyState === WebSocket.OPEN;
210
- }
211
- isConnected() {
212
- return this.#ws?.readyState === WebSocket.OPEN;
213
- }
214
- async waitForConnection(timeoutMs = 5000) {
215
- if (!this.#ws) {
216
- return false;
217
- }
218
- if (this.#ws.readyState === WebSocket.OPEN) {
219
- return true;
220
- }
221
- return new Promise((resolve) => {
222
- const timeout = setTimeout(() => {
223
- log.warn(`WebSocket connection timeout after ${timeoutMs}ms`);
224
- resolve(false);
225
- }, timeoutMs);
226
- this.#ws.once('open', () => {
227
- clearTimeout(timeout);
228
- resolve(true);
229
- });
230
- this.#ws.once('error', () => {
231
- clearTimeout(timeout);
232
- resolve(false);
233
- });
234
- });
235
- }
236
- async closeWebSocket() {
237
- if (!this.#ws || this.#ws.readyState === WebSocket.CLOSED) {
238
- return;
239
- }
240
- return new Promise((resolve) => {
241
- const timeout = setTimeout(resolve, 2000);
242
- this.#ws.once('close', () => {
243
- clearTimeout(timeout);
244
- resolve();
245
- });
246
- this.#ws.close();
247
- });
248
- }
249
- sendUpstream(event, data) {
250
- // Silent drops — logging here would loop back through stream interception.
251
- if (!this.#ws || this.#ws.readyState !== WebSocket.OPEN) {
252
- return;
253
- }
254
- try {
255
- this.#ws.send(JSON.stringify({ scope: event, data }));
256
- }
257
- catch {
258
- /* teardown */
259
- }
260
- }
261
- // ---- command capture -----------------------------------------------------
262
- #serializeError(error) {
263
- return error
264
- ? { name: error.name, message: error.message, stack: error.stack }
265
- : undefined;
266
- }
267
- async captureCommand(command, args, result, error, testUid, callSource, timestamp) {
268
- const commandId = this.#commandCounter++;
269
- // `id` is the stable lookup key — chained calls share a ms timestamp,
270
- // so timestamp-based matching rewrites the wrong entry on async updates.
271
- const entry = {
272
- _id: commandId,
273
- id: commandId,
274
- command,
275
- args,
276
- result,
277
- error: this.#serializeError(error),
278
- timestamp: timestamp || Date.now(),
279
- callSource,
280
- testUid
281
- };
282
- this.commandsLog.push(entry);
283
- return entry;
284
- }
285
- sendCommand(command) {
286
- if (command._id !== undefined && !this.#sentCommandIds.has(command._id)) {
287
- this.#sentCommandIds.add(command._id);
288
- const toSend = { ...command };
289
- delete toSend._id;
290
- this.sendUpstream('commands', [toSend]);
291
- }
292
- }
293
- sendReplaceCommand(oldTimestamp, command) {
294
- const toSend = { ...command };
295
- delete toSend._id;
296
- this.sendUpstream('replaceCommand', { oldTimestamp, command: toSend });
297
- }
298
- /** Update an existing entry in place (matched by `_id`) for retry coalesce. */
299
- replaceCommand(oldId, command, args, result, error, testUid, callSource, timestamp) {
300
- const idx = this.commandsLog.findIndex((c) => c._id === oldId);
301
- const oldTimestamp = idx !== -1 ? (this.commandsLog[idx].timestamp ?? 0) : 0;
302
- if (idx === -1) {
303
- const fresh = {
304
- _id: this.#commandCounter++,
305
- id: undefined,
306
- command,
307
- args,
308
- result,
309
- error: this.#serializeError(error),
310
- timestamp: timestamp || Date.now(),
311
- callSource,
312
- testUid
313
- };
314
- fresh.id = fresh._id;
315
- this.commandsLog.push(fresh);
316
- return { entry: fresh, oldTimestamp: 0 };
317
- }
318
- const previous = this.commandsLog[idx];
319
- previous.command = command;
320
- previous.args = args;
321
- previous.result = result;
322
- previous.error = this.#serializeError(error);
323
- previous.timestamp = timestamp || Date.now();
324
- previous.callSource = callSource;
325
- previous.testUid = testUid;
326
- return { entry: previous, oldTimestamp };
327
- }
328
- // Uses the unwrapped original to avoid recursing through the command capturer.
329
- async takeScreenshot() {
330
- const driver = this.#driver;
331
- const originals = getDriverOriginals();
332
- const fn = originals.takeScreenshot;
333
- if (!driver || !fn) {
334
- return null;
335
- }
336
- try {
337
- const data = await fn(driver);
338
- return data || null;
339
- }
340
- catch (err) {
341
- log.warn(`[screenshot] Failed: ${err.message}`);
342
- return null;
343
- }
344
- }
345
- // ---- source files --------------------------------------------------------
346
- async captureSource(filePath) {
347
- if (this.sources.has(filePath)) {
348
- return;
349
- }
350
- try {
351
- const source = await fs.readFile(filePath, 'utf-8');
352
- this.sources.set(filePath, source.toString());
353
- this.sendUpstream('sources', { [filePath]: source.toString() });
354
- }
355
- catch (err) {
356
- log.warn(`Failed to read source file ${filePath}: ${err.message}`);
357
- }
358
- }
359
- // ---- browser-side trace (script injection) -------------------------------
360
- async injectScript() {
361
- const driver = this.#driver;
362
- const exec = getDriverOriginals().executeScript;
363
- if (!driver || !exec) {
364
- return;
365
- }
366
- try {
367
- const scriptPath = require.resolve('@wdio/devtools-script');
368
- const scriptDir = path.dirname(scriptPath);
369
- const preloadScriptPath = path.join(scriptDir, 'script.js');
370
- let scriptContent = await fs.readFile(preloadScriptPath, 'utf-8');
371
- // Wrap top-level await so it can run inside a <script> body.
372
- scriptContent = `(async function() { ${scriptContent} })()`;
373
- await exec(driver, "var s=document.createElement('script');s.textContent=arguments[0];document.head.appendChild(s);return true;", scriptContent);
374
- for (let i = 0; i < 5; i++) {
375
- await new Promise((r) => setTimeout(r, 200));
376
- const ready = await exec(driver, 'return typeof window.wdioTraceCollector !== "undefined";');
377
- if (ready === true) {
378
- log.info('✓ Script injected and collector ready');
379
- return;
380
- }
381
- }
382
- log.warn('Script injection may have failed — collector not found');
383
- }
384
- catch (err) {
385
- // Driver torn down between navigation and deferred trace work.
386
- const msg = err.message ?? '';
387
- if (msg.includes('ECONNREFUSED') ||
388
- msg.includes('no such session') ||
389
- msg.includes('invalid session id')) {
390
- return;
391
- }
392
- log.error(`Failed to inject script: ${msg}`);
393
- }
394
- }
395
- async captureTrace() {
396
- const driver = this.#driver;
397
- const exec = getDriverOriginals().executeScript;
398
- if (!driver || !exec) {
399
- return;
400
- }
401
- try {
402
- const ready = await exec(driver, 'return typeof window.wdioTraceCollector !== "undefined";');
403
- if (ready !== true) {
404
- return;
405
- }
406
- const traceData = await exec(driver, 'return window.wdioTraceCollector.getTraceData();');
407
- if (!traceData) {
408
- return;
409
- }
410
- const { mutations, traceLogs, consoleLogs, networkRequests, metadata } = traceData;
411
- if (metadata) {
412
- this.metadata = { ...this.metadata, ...metadata };
413
- this.sendUpstream('metadata', this.metadata);
414
- }
415
- if (!this.bidiActive &&
416
- Array.isArray(consoleLogs) &&
417
- consoleLogs.length > 0) {
418
- const tagged = consoleLogs.map((e) => ({
419
- ...e,
420
- source: LOG_SOURCES.BROWSER
421
- }));
422
- this.consoleLogs.push(...tagged);
423
- this.sendUpstream('consoleLogs', tagged);
424
- }
425
- if (!this.bidiActive &&
426
- Array.isArray(networkRequests) &&
427
- networkRequests.length > 0) {
428
- this.networkRequests.push(...networkRequests);
429
- this.sendUpstream('networkRequests', networkRequests);
430
- }
431
- if (Array.isArray(mutations) && mutations.length > 0) {
432
- this.mutations.push(...mutations);
433
- this.sendUpstream('mutations', mutations);
434
- }
435
- if (Array.isArray(traceLogs) && traceLogs.length > 0) {
436
- this.traceLogs.push(...traceLogs);
437
- this.sendUpstream('logs', traceLogs);
438
- }
439
- }
440
- catch (err) {
441
- const msg = err.message ?? '';
442
- if (msg.includes('ECONNREFUSED') ||
443
- msg.includes('no such session') ||
444
- msg.includes('invalid session id')) {
445
- return;
446
- }
447
- log.error(`Failed to capture trace from injected script: ${msg}`);
448
- }
449
- }
450
- // ---- WebDriver browser/perf log capture ----------------------------------
451
- /** Pulls Chrome browser logs (requires `goog:loggingPrefs: { browser: 'ALL' }`). */
452
- async captureBrowserLogs() {
453
- const driver = this.#driver;
454
- const manage = getDriverOriginals().manage;
455
- if (!driver || !manage) {
456
- return;
457
- }
458
- try {
459
- const entries = await manage(driver).logs().get('browser');
460
- if (!Array.isArray(entries) || entries.length === 0) {
461
- return;
462
- }
463
- const tagged = entries.map((entry) => ({
464
- timestamp: entry.timestamp,
465
- type: chromeLogLevelToLogLevel(entry.level),
466
- args: [entry.message],
467
- source: LOG_SOURCES.BROWSER
468
- }));
469
- this.consoleLogs.push(...tagged);
470
- this.sendUpstream('consoleLogs', tagged);
471
- }
472
- catch {
473
- // logging not enabled — silent
474
- }
475
- }
476
- isNavigationCommand(command) {
477
- return NAVIGATION_COMMANDS.some((c) => command.toLowerCase().includes(c.toLowerCase()));
478
- }
479
- }
480
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,13 +0,0 @@
1
- // MUST be the first import in `src/index.ts`. `loglevel` binds
2
- // `console[method]` at logger-creation time, so we have to swap Jest/Vitest's
3
- // buffered console for a plain Node Console before any logger is created.
4
- import { Console } from 'node:console';
5
- const protoName = Object.getPrototypeOf(globalThis.console)?.constructor?.name;
6
- if (protoName && protoName !== 'Console') {
7
- globalThis.console = new Console({
8
- stdout: process.stdout,
9
- stderr: process.stderr,
10
- colorMode: 'auto'
11
- });
12
- }
13
- //# sourceMappingURL=setupConsole.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupConsole.js","sourceRoot":"","sources":["../src/setupConsole.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8EAA8E;AAC9E,0EAA0E;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,CAAA;AAC9E,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;IACzC,UAAU,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM;KAClB,CAAC,CAAA;AACJ,CAAC"}