@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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 WebdriverIO
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/selenium-devtools",
3
- "version": "0.0.1",
3
+ "version": "1.0.0",
4
4
  "description": "Selenium WebDriver adapter for WebdriverIO DevTools — runner-agnostic, reuses existing backend, UI, and capture infrastructure",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,16 +21,6 @@
21
21
  "dist",
22
22
  "README.md"
23
23
  ],
24
- "scripts": {
25
- "build": "tsc",
26
- "watch": "tsc --watch",
27
- "clean": "rm -rf dist",
28
- "lint": "eslint .",
29
- "example:mocha": "mocha --require @wdio/selenium-devtools --timeout 60000 example/mocha-test/test/example.js",
30
- "example:jest": "NODE_OPTIONS=--experimental-vm-modules jest --config example/jest-test/jest.config.json",
31
- "example:vitest": "vitest run --config example/vitest-test/vitest.config.js",
32
- "example:cucumber": "cucumber-js --config example/cucumber-test/cucumber.json"
33
- },
34
24
  "keywords": [
35
25
  "selenium",
36
26
  "selenium-webdriver",
@@ -41,12 +31,12 @@
41
31
  "author": "WebdriverIO Team",
42
32
  "license": "MIT",
43
33
  "dependencies": {
44
- "@wdio/devtools-backend": "workspace:*",
45
- "@wdio/devtools-script": "workspace:*",
46
34
  "@wdio/logger": "^9.6.0",
47
35
  "stacktrace-parser": "^0.1.11",
48
36
  "webdriverio": "^9.18.0",
49
- "ws": "^8.18.3"
37
+ "ws": "^8.18.3",
38
+ "@wdio/devtools-backend": "1.4.0",
39
+ "@wdio/devtools-script": "1.4.0"
50
40
  },
51
41
  "optionalDependencies": {
52
42
  "fluent-ffmpeg": "^2.1.3"
@@ -64,5 +54,15 @@
64
54
  },
65
55
  "peerDependencies": {
66
56
  "selenium-webdriver": ">=4.8.0"
57
+ },
58
+ "scripts": {
59
+ "build": "tsc",
60
+ "watch": "tsc --watch",
61
+ "clean": "rm -rf dist",
62
+ "lint": "eslint .",
63
+ "example:mocha": "mocha --require @wdio/selenium-devtools --timeout 60000 example/mocha-test/test/example.js",
64
+ "example:jest": "NODE_OPTIONS=--experimental-vm-modules jest --config example/jest-test/jest.config.json",
65
+ "example:vitest": "vitest run --config example/vitest-test/vitest.config.js",
66
+ "example:cucumber": "cucumber-js --config example/cucumber-test/cucumber.json"
67
67
  }
68
- }
68
+ }
@@ -1,11 +0,0 @@
1
- import type { CapturedCommand } from './types.js';
2
- /**
3
- * Patch `node:assert` so each tracked method emits a `CapturedCommand` to
4
- * the supplied hook. Idempotent — calling twice doesn't double-wrap.
5
- *
6
- * Note: we patch BOTH the function-form (`assert(...)`) and the namespace
7
- * methods (`assert.equal(...)`). User code that imported the methods BEFORE
8
- * this patcher loaded will already have stale references — to be safe,
9
- * the plugin's main entry imports node:assert before the user's test files.
10
- */
11
- export declare function patchNodeAssert(onCommand: (cmd: CapturedCommand) => void): boolean;
@@ -1,123 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import logger from '@wdio/logger';
3
- import { ASSERT_PATCHED_SYMBOL, TRACKED_ASSERT_METHODS } from './constants.js';
4
- import { getCallSourceFromStack } from './helpers/utils.js';
5
- const log = logger('@wdio/selenium-devtools:assertPatcher');
6
- const require = createRequire(import.meta.url);
7
- function safeSerialize(value) {
8
- if (value === null || value === undefined) {
9
- return value;
10
- }
11
- if (value instanceof RegExp) {
12
- return value.toString();
13
- }
14
- if (typeof value === 'function') {
15
- return '[Function]';
16
- }
17
- if (typeof value === 'object') {
18
- try {
19
- return JSON.parse(JSON.stringify(value));
20
- }
21
- catch {
22
- return String(value);
23
- }
24
- }
25
- return value;
26
- }
27
- /**
28
- * Patch `node:assert` so each tracked method emits a `CapturedCommand` to
29
- * the supplied hook. Idempotent — calling twice doesn't double-wrap.
30
- *
31
- * Note: we patch BOTH the function-form (`assert(...)`) and the namespace
32
- * methods (`assert.equal(...)`). User code that imported the methods BEFORE
33
- * this patcher loaded will already have stale references — to be safe,
34
- * the plugin's main entry imports node:assert before the user's test files.
35
- */
36
- export function patchNodeAssert(onCommand) {
37
- let assertModule;
38
- try {
39
- assertModule = require('node:assert');
40
- }
41
- catch {
42
- log.warn('node:assert not available — skipping assertion capture');
43
- return false;
44
- }
45
- if (assertModule[ASSERT_PATCHED_SYMBOL]) {
46
- return true;
47
- }
48
- ;
49
- assertModule[ASSERT_PATCHED_SYMBOL] = true;
50
- // Wrap each tracked method on `assert` and `assert.strict`. We don't
51
- // overwrite `assert.strict.equal` separately because Node's strict
52
- // namespace shares method bodies internally — patching the surface is
53
- // enough.
54
- const wrapMethod = (methodName) => {
55
- const original = assertModule[methodName];
56
- if (typeof original !== 'function') {
57
- return;
58
- }
59
- ;
60
- assertModule[methodName] = function patchedAssert(...args) {
61
- const callInfo = getCallSourceFromStack();
62
- const startedAt = Date.now();
63
- const sanitizedArgs = args.map(safeSerialize);
64
- try {
65
- const result = original.apply(this, args);
66
- // Async assert methods (rejects/doesNotReject) return a Promise.
67
- if (result && typeof result.then === 'function') {
68
- return result.then((v) => {
69
- onCommand({
70
- command: `assert.${methodName}`,
71
- args: sanitizedArgs,
72
- result: 'passed',
73
- error: undefined,
74
- callSource: callInfo.callSource,
75
- timestamp: startedAt,
76
- fromElement: false
77
- });
78
- return v;
79
- }, (err) => {
80
- onCommand({
81
- command: `assert.${methodName}`,
82
- args: sanitizedArgs,
83
- result: undefined,
84
- error: err instanceof Error ? err : new Error(String(err)),
85
- callSource: callInfo.callSource,
86
- timestamp: startedAt,
87
- fromElement: false
88
- });
89
- throw err;
90
- });
91
- }
92
- onCommand({
93
- command: `assert.${methodName}`,
94
- args: sanitizedArgs,
95
- result: 'passed',
96
- error: undefined,
97
- callSource: callInfo.callSource,
98
- timestamp: startedAt,
99
- fromElement: false
100
- });
101
- return result;
102
- }
103
- catch (err) {
104
- onCommand({
105
- command: `assert.${methodName}`,
106
- args: sanitizedArgs,
107
- result: undefined,
108
- error: err instanceof Error ? err : new Error(String(err)),
109
- callSource: callInfo.callSource,
110
- timestamp: startedAt,
111
- fromElement: false
112
- });
113
- throw err;
114
- }
115
- };
116
- };
117
- for (const m of TRACKED_ASSERT_METHODS) {
118
- wrapMethod(m);
119
- }
120
- log.info(`Patched ${TRACKED_ASSERT_METHODS.length} node:assert method(s)`);
121
- return true;
122
- }
123
- //# sourceMappingURL=assertPatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assertPatcher.js","sourceRoot":"","sources":["../src/assertPatcher.ts"],"names":[],"mappings":"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"}
package/dist/bidi.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { BidiHandlerSinks } from './types.js';
2
- import type { SessionCapturer } from './session.js';
3
- export declare function ensureBidiCapability(builder: any): void;
4
- export declare function ensureHeadlessChrome(builder: any): void;
5
- export declare function attachBidiHandlers(driver: any, sinks: BidiHandlerSinks): Promise<boolean>;
6
- export declare function buildBidiSinks(capturer: SessionCapturer): BidiHandlerSinks;
package/dist/bidi.js DELETED
@@ -1,222 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import logger from '@wdio/logger';
3
- import { LOG_SOURCES } from './constants.js';
4
- import { chromeLogLevelToLogLevel, getRequestType } from './helpers/utils.js';
5
- const log = logger('@wdio/selenium-devtools:bidi');
6
- function loadSeleniumSubmodule(subpath) {
7
- try {
8
- const userRequire = createRequire(`${process.cwd()}/`);
9
- return userRequire(`selenium-webdriver/${subpath}`);
10
- }
11
- catch {
12
- try {
13
- const localRequire = createRequire(import.meta.url);
14
- return localRequire(`selenium-webdriver/${subpath}`);
15
- }
16
- catch {
17
- return null;
18
- }
19
- }
20
- }
21
- // Sets webSocketUrl=true so the driver actually exposes the BiDi channel.
22
- export function ensureBidiCapability(builder) {
23
- try {
24
- const caps = typeof builder?.getCapabilities === 'function'
25
- ? builder.getCapabilities()
26
- : null;
27
- if (!caps || typeof caps.set !== 'function') {
28
- return;
29
- }
30
- if (typeof caps.has === 'function' && caps.has('webSocketUrl')) {
31
- return;
32
- }
33
- caps.set('webSocketUrl', true);
34
- log.info('Set webSocketUrl=true on builder capabilities (BiDi enabled)');
35
- }
36
- catch (err) {
37
- log.warn(`Failed to set webSocketUrl capability: ${err.message}`);
38
- }
39
- }
40
- // `--headless=old` (not `=new`) — `new` produces all-black frames under
41
- // CDP `Page.startScreencast` on macOS (upstream Chrome bug).
42
- export function ensureHeadlessChrome(builder) {
43
- try {
44
- const caps = typeof builder?.getCapabilities === 'function'
45
- ? builder.getCapabilities()
46
- : null;
47
- if (!caps || typeof caps.get !== 'function') {
48
- return;
49
- }
50
- const existing = caps.get('goog:chromeOptions') ?? {};
51
- const args = Array.isArray(existing.args)
52
- ? [...existing.args]
53
- : [];
54
- const hasHeadless = args.some((a) => typeof a === 'string' && a.startsWith('--headless'));
55
- if (hasHeadless) {
56
- return;
57
- }
58
- args.push('--headless=old');
59
- caps.set('goog:chromeOptions', { ...existing, args });
60
- log.info('Injected --headless=old into Chrome capabilities');
61
- }
62
- catch (err) {
63
- log.warn(`Failed to set headless Chrome option: ${err.message}`);
64
- }
65
- }
66
- // Returns true when at least one stream connected — caller disables the
67
- // equivalent script-injection collectors to avoid duplicates.
68
- export async function attachBidiHandlers(driver, sinks) {
69
- const logInspectorFactory = loadSeleniumSubmodule('bidi/logInspector');
70
- const networkInspectorFactory = loadSeleniumSubmodule('bidi/networkInspector');
71
- let attached = 0;
72
- if (typeof logInspectorFactory === 'function') {
73
- try {
74
- const inspector = await logInspectorFactory(driver);
75
- await inspector.onConsoleEntry((entry) => {
76
- try {
77
- const level = (entry?.level ?? entry?.type ?? 'info').toString();
78
- const text = entry?.text ?? entry?.message ?? '';
79
- sinks.pushConsoleLog({
80
- timestamp: Number(entry?.timestamp) || Date.now(),
81
- type: chromeLogLevelToLogLevel(level),
82
- args: [text],
83
- source: LOG_SOURCES.BROWSER
84
- });
85
- }
86
- catch (err) {
87
- log.warn(`onConsoleEntry handler threw: ${err.message}`);
88
- }
89
- });
90
- await inspector.onJavascriptException((exception) => {
91
- try {
92
- const text = exception?.text ?? exception?.message ?? String(exception);
93
- const trimmed = String(text).replace(/\s+/g, ' ').slice(0, 200);
94
- log.warn(`🐛 JS error in page: ${trimmed}${String(text).length > 200 ? '…' : ''}`);
95
- sinks.pushConsoleLog({
96
- timestamp: Date.now(),
97
- type: 'error',
98
- args: [text],
99
- source: LOG_SOURCES.BROWSER
100
- });
101
- }
102
- catch (err) {
103
- log.warn(`onJavascriptException handler threw: ${err.message}`);
104
- }
105
- });
106
- attached++;
107
- log.info('✓ BiDi LogInspector attached (console + JS exceptions)');
108
- }
109
- catch (err) {
110
- log.warn(`BiDi LogInspector attach failed: ${err.message}`);
111
- }
112
- }
113
- else {
114
- log.info('selenium-webdriver/bidi/logInspector not available — skipping');
115
- }
116
- if (typeof networkInspectorFactory === 'function') {
117
- try {
118
- const inspector = await networkInspectorFactory(driver);
119
- const pending = new Map();
120
- await inspector.beforeRequestSent((event) => {
121
- try {
122
- const requestId = String(event?.request?.request ?? event?.id ?? '');
123
- if (!requestId) {
124
- return;
125
- }
126
- const entry = {
127
- id: requestId,
128
- url: event?.request?.url ?? '',
129
- method: event?.request?.method ?? 'GET',
130
- requestHeaders: arrayHeadersToObject(event?.request?.headers),
131
- timestamp: Date.now(),
132
- startTime: Number(event?.timestamp ?? Date.now()),
133
- type: getRequestType(event?.request?.url ?? '')
134
- };
135
- pending.set(requestId, entry);
136
- sinks.pushNetworkRequest(entry);
137
- }
138
- catch (err) {
139
- log.warn(`beforeRequestSent threw: ${err.message}`);
140
- }
141
- });
142
- await inspector.responseCompleted((event) => {
143
- try {
144
- const requestId = String(event?.request?.request ?? event?.id ?? '');
145
- const previous = pending.get(requestId);
146
- if (!previous) {
147
- return;
148
- }
149
- const finalized = {
150
- ...previous,
151
- status: Number(event?.response?.status) || previous.status,
152
- statusText: event?.response?.statusText ?? previous.statusText,
153
- responseHeaders: arrayHeadersToObject(event?.response?.headers),
154
- type: getRequestType(previous.url, event?.response?.mimeType),
155
- endTime: Number(event?.timestamp ?? Date.now()),
156
- time: Number(event?.timestamp ?? Date.now()) - previous.startTime,
157
- size: Number(event?.response?.bytesReceived) || undefined
158
- };
159
- pending.delete(requestId);
160
- sinks.replaceNetworkRequest(requestId, finalized);
161
- }
162
- catch (err) {
163
- log.warn(`responseCompleted threw: ${err.message}`);
164
- }
165
- });
166
- attached++;
167
- log.info('✓ BiDi NetworkInspector attached (request + response)');
168
- }
169
- catch (err) {
170
- log.warn(`BiDi NetworkInspector attach failed: ${err.message}`);
171
- }
172
- }
173
- else {
174
- log.info('selenium-webdriver/bidi/networkInspector not available — skipping');
175
- }
176
- return attached > 0;
177
- }
178
- // BiDi headers arrive as Array<{name, value:{value|type}}>; flatten to a
179
- // lowercased dictionary.
180
- function arrayHeadersToObject(headers) {
181
- if (!Array.isArray(headers)) {
182
- return undefined;
183
- }
184
- const out = {};
185
- for (const h of headers) {
186
- const name = String(h?.name ?? '').toLowerCase();
187
- if (!name) {
188
- continue;
189
- }
190
- const v = h?.value;
191
- out[name] =
192
- typeof v === 'string'
193
- ? v
194
- : typeof v?.value === 'string'
195
- ? v.value
196
- : JSON.stringify(v ?? '');
197
- }
198
- return out;
199
- }
200
- export function buildBidiSinks(capturer) {
201
- return {
202
- pushConsoleLog: (entry) => {
203
- capturer.consoleLogs.push(entry);
204
- capturer.sendUpstream('consoleLogs', [entry]);
205
- },
206
- pushNetworkRequest: (entry) => {
207
- capturer.networkRequests.push(entry);
208
- capturer.sendUpstream('networkRequests', [entry]);
209
- },
210
- replaceNetworkRequest: (id, entry) => {
211
- const idx = capturer.networkRequests.findIndex((r) => r.id === id);
212
- if (idx !== -1) {
213
- capturer.networkRequests[idx] = entry;
214
- }
215
- else {
216
- capturer.networkRequests.push(entry);
217
- }
218
- capturer.sendUpstream('networkRequests', [entry]);
219
- }
220
- };
221
- }
222
- //# sourceMappingURL=bidi.js.map
package/dist/bidi.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bidi.js","sourceRoot":"","sources":["../src/bidi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,MAAM,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAI7E,MAAM,GAAG,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAA;AAElD,SAAS,qBAAqB,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACtD,OAAO,WAAW,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACnD,OAAO,YAAY,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,OAAY;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GACR,OAAO,OAAO,EAAE,eAAe,KAAK,UAAU;YAC5C,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAA;QACV,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5C,OAAM;QACR,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/D,OAAM;QACR,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QAC9B,GAAG,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,0CAA2C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9E,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,6DAA6D;AAC7D,MAAM,UAAU,oBAAoB,CAAC,OAAY;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GACR,OAAO,OAAO,EAAE,eAAe,KAAK,UAAU;YAC5C,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAA;QACV,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5C,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;QACrD,MAAM,IAAI,GAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjD,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;YACpB,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAC3D,CAAA;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,yCAA0C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAW,EACX,KAAuB;IAEvB,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAA;IACtE,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,uBAAuB,CAAC,CAAA;IAE9E,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAA;YACnD,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5C,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;oBAChE,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,IAAI,EAAE,CAAA;oBAChD,KAAK,CAAC,cAAc,CAAC;wBACnB,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;wBACjD,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAa;wBACjD,IAAI,EAAE,CAAC,IAAI,CAAC;wBACZ,MAAM,EAAE,WAAW,CAAC,OAAO;qBAC5B,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrE,CAAC;YACH,CAAC,CAAC,CAAA;YACF,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAC,SAAc,EAAE,EAAE;gBACvD,IAAI,CAAC;oBACH,MAAM,IAAI,GACR,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAA;oBAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;oBAC/D,GAAG,CAAC,IAAI,CACN,wBAAwB,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzE,CAAA;oBACD,KAAK,CAAC,cAAc,CAAC;wBACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,CAAC,IAAI,CAAC;wBACZ,MAAM,EAAE,WAAW,CAAC,OAAO;qBAC5B,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CACN,wCAAyC,GAAa,CAAC,OAAO,EAAE,CACjE,CAAA;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;YACF,QAAQ,EAAE,CAAA;YACV,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,oCAAqC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAA;YACvD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;YAEjD,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC/C,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;oBACpE,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAM;oBACR,CAAC;oBACD,MAAM,KAAK,GAAmB;wBAC5B,EAAE,EAAE,SAAS;wBACb,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;wBAC9B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;wBACvC,cAAc,EAAE,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;wBAC7D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;wBACjD,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;qBAChD,CAAA;oBACD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;oBAC7B,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC/C,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;oBACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;oBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,OAAM;oBACR,CAAC;oBACD,MAAM,SAAS,GAAmB;wBAChC,GAAG,QAAQ;wBACX,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM;wBAC1D,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU;wBAC9D,eAAe,EAAE,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;wBAC/D,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;wBAC7D,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC/C,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS;wBACjE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,SAAS;qBAC1D,CAAA;oBACD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;oBACzB,KAAK,CAAC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBACnD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,QAAQ,EAAE,CAAA;YACV,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,wCAAyC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CACN,mEAAmE,CACpE,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,GAAG,CAAC,CAAA;AACrB,CAAC;AAED,yEAAyE;AACzE,yBAAyB;AACzB,SAAS,oBAAoB,CAC3B,OAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAQ;QACV,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAA;QAClB,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,CAAC,KAAK,QAAQ;gBACnB,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,QAAQ;oBAC5B,CAAC,CAAC,CAAC,CAAC,KAAK;oBACT,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,OAAO;QACL,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,CAAC;QACD,qBAAqB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YACvE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtC,CAAC;YACD,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,75 +0,0 @@
1
- /**
2
- * Selenium WebDriver methods we don't want to surface as user commands.
3
- * These are either internal lifecycle (quit, close, getSession), capability
4
- * inspection (getCapabilities), or low-level helpers (sleep, schedule).
5
- */
6
- export declare const INTERNAL_DRIVER_METHODS: readonly ["constructor", "getSession", "getCapabilities", "getExecutor", "execute", "schedule", "manage", "navigate", "switchTo", "actions", "wait", "sleep", "setFileDetector", "getNetworkConnection", "setNetworkConnection", "on", "once", "addListener", "removeListener", "emit", "eventNames", "getBidi", "getCdpTargets", "createCDPConnection", "getWsUrl", "quit", "close"];
7
- /**
8
- * WebElement methods we DO surface (everything else is skipped).
9
- * Whitelist approach because WebElement's prototype carries fewer interesting
10
- * action methods than WebDriver's, and skipping is cheaper.
11
- */
12
- export declare const TRACKED_ELEMENT_METHODS: readonly ["click", "sendKeys", "clear", "submit", "getText", "getAttribute", "getCssValue", "getRect", "getTagName", "isDisplayed", "isEnabled", "isSelected"];
13
- export declare const NAVIGATION_COMMANDS: readonly ["get", "navigate", "to", "back", "forward", "refresh"];
14
- export declare const CONSOLE_METHODS: readonly ["log", "info", "warn", "error"];
15
- export declare const LOG_SOURCES: {
16
- readonly BROWSER: "browser";
17
- readonly TEST: "test";
18
- readonly TERMINAL: "terminal";
19
- };
20
- export declare const ANSI_REGEX: RegExp;
21
- export declare const SPINNER_RE: RegExp;
22
- export declare const DEFAULTS: {
23
- readonly CID: "0-0";
24
- readonly SESSION_TITLE: "Selenium Session";
25
- readonly FILE_NAME: "selenium";
26
- readonly RETRIES: 0;
27
- readonly DURATION: 0;
28
- };
29
- export declare const TIMING: {
30
- readonly UI_RENDER_DELAY: 150;
31
- readonly TEST_START_DELAY: 100;
32
- readonly SUITE_COMPLETE_DELAY: 200;
33
- readonly UI_CONNECTION_WAIT: 2000;
34
- readonly BROWSER_CLOSE_WAIT: 2000;
35
- readonly INITIAL_CONNECTION_WAIT: 500;
36
- readonly BROWSER_POLL_INTERVAL: 1000;
37
- };
38
- export declare const TEST_STATE: {
39
- readonly PENDING: "pending";
40
- readonly RUNNING: "running";
41
- readonly PASSED: "passed";
42
- readonly FAILED: "failed";
43
- readonly SKIPPED: "skipped";
44
- };
45
- export declare const LOG_LEVEL_PATTERNS: ReadonlyArray<{
46
- level: 'trace' | 'debug' | 'info' | 'warn' | 'error';
47
- pattern: RegExp;
48
- }>;
49
- export declare const SCREENCAST_DEFAULTS: {
50
- enabled: boolean;
51
- captureFormat: "jpeg";
52
- quality: number;
53
- maxWidth: number;
54
- maxHeight: number;
55
- pollIntervalMs: number;
56
- };
57
- /** Test-state environment markers used by the rerun handshake. */
58
- export declare const REUSE_ENV: {
59
- readonly REUSE: "DEVTOOLS_APP_REUSE";
60
- readonly HOST: "DEVTOOLS_APP_HOST";
61
- readonly PORT: "DEVTOOLS_APP_PORT";
62
- readonly RERUN_LABEL: "DEVTOOLS_RERUN_LABEL";
63
- readonly RERUN_ENTRY_TYPE: "DEVTOOLS_RERUN_ENTRY_TYPE";
64
- };
65
- /**
66
- * Decoded JPEG bytes below which a frame is treated as blank/uniform
67
- * (Chrome's about:blank — solid colour compresses to <2KB; real renders >5KB).
68
- */
69
- export declare const BLANK_FRAME_THRESHOLD_BYTES = 4000;
70
- /** Per-prototype "already patched" guard for driverPatcher / assertPatcher. */
71
- export declare const PATCHED_SYMBOL: unique symbol;
72
- /** Per-prototype guard for the (currently disabled) node:assert patcher. */
73
- export declare const ASSERT_PATCHED_SYMBOL: unique symbol;
74
- /** node:assert methods the (currently disabled) assertPatcher would wrap. */
75
- export declare const TRACKED_ASSERT_METHODS: readonly ["equal", "strictEqual", "deepEqual", "deepStrictEqual", "notEqual", "notStrictEqual", "notDeepEqual", "notDeepStrictEqual", "ok", "fail", "throws", "doesNotThrow", "rejects", "doesNotReject", "match", "doesNotMatch"];