selenium-webdriver 4.44.0 → 4.46.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 (48) hide show
  1. package/CHANGES.md +20 -0
  2. package/bidi/browsingContextInspector.js +1 -1
  3. package/bidi/generated/bluetooth.d.ts +223 -0
  4. package/bidi/generated/bluetooth.js +154 -0
  5. package/bidi/generated/browser.d.ts +104 -0
  6. package/bidi/generated/browser.js +107 -0
  7. package/bidi/generated/browsing_context.d.ts +431 -0
  8. package/bidi/generated/browsing_context.js +280 -0
  9. package/bidi/generated/common.d.ts +38 -0
  10. package/bidi/generated/common.js +30 -0
  11. package/bidi/generated/emulation.d.ts +176 -0
  12. package/bidi/generated/emulation.js +133 -0
  13. package/bidi/generated/input.d.ts +151 -0
  14. package/bidi/generated/input.js +81 -0
  15. package/bidi/generated/log.d.ts +39 -0
  16. package/bidi/generated/log.js +67 -0
  17. package/bidi/generated/network.d.ts +359 -0
  18. package/bidi/generated/network.js +230 -0
  19. package/bidi/generated/permissions.d.ts +22 -0
  20. package/bidi/generated/permissions.js +43 -0
  21. package/bidi/generated/script.d.ts +410 -0
  22. package/bidi/generated/script.js +146 -0
  23. package/bidi/generated/session.d.ts +119 -0
  24. package/bidi/generated/session.js +82 -0
  25. package/bidi/generated/speculation.d.ts +17 -0
  26. package/bidi/generated/speculation.js +40 -0
  27. package/bidi/generated/storage.d.ts +84 -0
  28. package/bidi/generated/storage.js +70 -0
  29. package/bidi/generated/user_agent_client_hints.d.ts +33 -0
  30. package/bidi/generated/user_agent_client_hints.js +43 -0
  31. package/bidi/generated/webextension.d.ts +42 -0
  32. package/bidi/generated/webextension.js +53 -0
  33. package/bidi/index.js +24 -3
  34. package/bin/linux/selenium-manager +0 -0
  35. package/bin/macos/selenium-manager +0 -0
  36. package/bin/windows/selenium-manager.exe +0 -0
  37. package/common/driverFinder.js +2 -1
  38. package/common/seleniumManager.js +1 -1
  39. package/eslint.config.js +5 -5
  40. package/io/zip.js +1 -1
  41. package/lib/atoms/find-elements.js +272 -68
  42. package/lib/atoms/get-attribute.js +152 -17
  43. package/lib/atoms/is-displayed.js +385 -39
  44. package/lib/http.js +2 -1
  45. package/lib/pinnedScript.js +0 -1
  46. package/lib/until.js +7 -9
  47. package/lib/webdriver.js +2 -2
  48. package/package.json +17 -15
@@ -0,0 +1,410 @@
1
+ import type { BrowserUserContext } from './browser.js';
2
+ import type { BrowsingContextBrowsingContext } from './browsing_context.js';
3
+ import type { EmptyResult, Extensible, JsUint } from './common.js';
4
+ export type ScriptCommand = ScriptAddPreloadScript | ScriptCallFunction | ScriptDisown | ScriptEvaluate | ScriptGetRealms | ScriptRemovePreloadScript;
5
+ export type ScriptResult = ScriptAddPreloadScriptResult | ScriptCallFunctionResult | ScriptDisownResult | ScriptEvaluateResult | ScriptGetRealmsResult | ScriptRemovePreloadScriptResult;
6
+ export type ScriptEvent = ScriptMessage | ScriptRealmCreated | ScriptRealmDestroyed;
7
+ export type ScriptChannel = string;
8
+ export interface ScriptChannelValue {
9
+ type: "channel";
10
+ value: ScriptChannelProperties;
11
+ }
12
+ export interface ScriptChannelProperties {
13
+ channel: ScriptChannel;
14
+ serializationOptions?: ScriptSerializationOptions;
15
+ ownership?: ScriptResultOwnership;
16
+ }
17
+ export type ScriptEvaluateResult = ScriptEvaluateResultSuccess | ScriptEvaluateResultException;
18
+ export interface ScriptEvaluateResultSuccess {
19
+ type: "success";
20
+ result: ScriptRemoteValue;
21
+ realm: ScriptRealm;
22
+ }
23
+ export interface ScriptEvaluateResultException {
24
+ type: "exception";
25
+ exceptionDetails: ScriptExceptionDetails;
26
+ realm: ScriptRealm;
27
+ }
28
+ export interface ScriptExceptionDetails {
29
+ columnNumber: JsUint;
30
+ exception: ScriptRemoteValue;
31
+ lineNumber: JsUint;
32
+ stackTrace: ScriptStackTrace;
33
+ text: string;
34
+ }
35
+ export type ScriptHandle = string;
36
+ export type ScriptInternalId = string;
37
+ export type ScriptLocalValue = ScriptRemoteReference | ScriptPrimitiveProtocolValue | ScriptChannelValue | ScriptArrayLocalValue | ScriptDateLocalValue | ScriptMapLocalValue | ScriptObjectLocalValue | ScriptRegExpLocalValue | ScriptSetLocalValue;
38
+ export type ScriptListLocalValue = ScriptLocalValue[];
39
+ export interface ScriptArrayLocalValue {
40
+ type: "array";
41
+ value: ScriptListLocalValue;
42
+ }
43
+ export interface ScriptDateLocalValue {
44
+ type: "date";
45
+ value: string;
46
+ }
47
+ export type ScriptMappingLocalValue = (ScriptLocalValue | ScriptLocalValue)[];
48
+ export interface ScriptMapLocalValue {
49
+ type: "map";
50
+ value: ScriptMappingLocalValue;
51
+ }
52
+ export interface ScriptObjectLocalValue {
53
+ type: "object";
54
+ value: ScriptMappingLocalValue;
55
+ }
56
+ export interface ScriptRegExpValue {
57
+ pattern: string;
58
+ flags?: string;
59
+ }
60
+ export interface ScriptRegExpLocalValue {
61
+ type: "regexp";
62
+ value: ScriptRegExpValue;
63
+ }
64
+ export interface ScriptSetLocalValue {
65
+ type: "set";
66
+ value: ScriptListLocalValue;
67
+ }
68
+ export type ScriptPreloadScript = string;
69
+ export type ScriptRealm = string;
70
+ export type ScriptPrimitiveProtocolValue = ScriptUndefinedValue | ScriptNullValue | ScriptStringValue | ScriptNumberValue | ScriptBooleanValue | ScriptBigIntValue;
71
+ export interface ScriptUndefinedValue {
72
+ type: "undefined";
73
+ }
74
+ export interface ScriptNullValue {
75
+ type: "null";
76
+ }
77
+ export interface ScriptStringValue {
78
+ type: "string";
79
+ value: string;
80
+ }
81
+ export type ScriptSpecialNumber = "NaN" | "-0" | "Infinity" | "-Infinity";
82
+ export interface ScriptNumberValue {
83
+ type: "number";
84
+ value: Number | ScriptSpecialNumber;
85
+ }
86
+ export interface ScriptBooleanValue {
87
+ type: "boolean";
88
+ value: boolean;
89
+ }
90
+ export interface ScriptBigIntValue {
91
+ type: "bigint";
92
+ value: string;
93
+ }
94
+ export type ScriptRealmInfo = ScriptWindowRealmInfo | ScriptDedicatedWorkerRealmInfo | ScriptSharedWorkerRealmInfo | ScriptServiceWorkerRealmInfo | ScriptWorkerRealmInfo | ScriptPaintWorkletRealmInfo | ScriptAudioWorkletRealmInfo | ScriptWorkletRealmInfo;
95
+ export interface ScriptBaseRealmInfo {
96
+ realm: ScriptRealm;
97
+ origin: string;
98
+ }
99
+ export type ScriptWindowRealmInfo = ScriptBaseRealmInfo & {
100
+ type: "window";
101
+ context: BrowsingContextBrowsingContext;
102
+ userContext?: BrowserUserContext;
103
+ sandbox?: string;
104
+ };
105
+ export type ScriptDedicatedWorkerRealmInfo = ScriptBaseRealmInfo & {
106
+ type: "dedicated-worker";
107
+ owners: ScriptRealm[];
108
+ };
109
+ export type ScriptSharedWorkerRealmInfo = ScriptBaseRealmInfo & {
110
+ type: "shared-worker";
111
+ };
112
+ export type ScriptServiceWorkerRealmInfo = ScriptBaseRealmInfo & {
113
+ type: "service-worker";
114
+ };
115
+ export type ScriptWorkerRealmInfo = ScriptBaseRealmInfo & {
116
+ type: "worker";
117
+ };
118
+ export type ScriptPaintWorkletRealmInfo = ScriptBaseRealmInfo & {
119
+ type: "paint-worklet";
120
+ };
121
+ export type ScriptAudioWorkletRealmInfo = ScriptBaseRealmInfo & {
122
+ type: "audio-worklet";
123
+ };
124
+ export type ScriptWorkletRealmInfo = ScriptBaseRealmInfo & {
125
+ type: "worklet";
126
+ };
127
+ export type ScriptRealmType = "window" | "dedicated-worker" | "shared-worker" | "service-worker" | "worker" | "paint-worklet" | "audio-worklet" | "worklet";
128
+ export type ScriptRemoteReference = ScriptSharedReference | ScriptRemoteObjectReference;
129
+ export type ScriptSharedReference = Extensible & {
130
+ sharedId: ScriptSharedId;
131
+ handle?: ScriptHandle;
132
+ };
133
+ export type ScriptRemoteObjectReference = Extensible & {
134
+ handle: ScriptHandle;
135
+ sharedId?: ScriptSharedId;
136
+ };
137
+ export type ScriptRemoteValue = ScriptPrimitiveProtocolValue | ScriptSymbolRemoteValue | ScriptArrayRemoteValue | ScriptObjectRemoteValue | ScriptFunctionRemoteValue | ScriptRegExpRemoteValue | ScriptDateRemoteValue | ScriptMapRemoteValue | ScriptSetRemoteValue | ScriptWeakMapRemoteValue | ScriptWeakSetRemoteValue | ScriptGeneratorRemoteValue | ScriptErrorRemoteValue | ScriptProxyRemoteValue | ScriptPromiseRemoteValue | ScriptTypedArrayRemoteValue | ScriptArrayBufferRemoteValue | ScriptNodeListRemoteValue | ScriptHtmlCollectionRemoteValue | ScriptNodeRemoteValue | ScriptWindowProxyRemoteValue;
138
+ export type ScriptListRemoteValue = ScriptRemoteValue[];
139
+ export type ScriptMappingRemoteValue = (ScriptRemoteValue | ScriptRemoteValue)[];
140
+ export interface ScriptSymbolRemoteValue {
141
+ type: "symbol";
142
+ handle?: ScriptHandle;
143
+ internalId?: ScriptInternalId;
144
+ }
145
+ export interface ScriptArrayRemoteValue {
146
+ type: "array";
147
+ handle?: ScriptHandle;
148
+ internalId?: ScriptInternalId;
149
+ value?: ScriptListRemoteValue;
150
+ }
151
+ export interface ScriptObjectRemoteValue {
152
+ type: "object";
153
+ handle?: ScriptHandle;
154
+ internalId?: ScriptInternalId;
155
+ value?: ScriptMappingRemoteValue;
156
+ }
157
+ export interface ScriptFunctionRemoteValue {
158
+ type: "function";
159
+ handle?: ScriptHandle;
160
+ internalId?: ScriptInternalId;
161
+ }
162
+ export type ScriptRegExpRemoteValue = ScriptRegExpLocalValue & {
163
+ handle?: ScriptHandle;
164
+ internalId?: ScriptInternalId;
165
+ };
166
+ export type ScriptDateRemoteValue = ScriptDateLocalValue & {
167
+ handle?: ScriptHandle;
168
+ internalId?: ScriptInternalId;
169
+ };
170
+ export interface ScriptMapRemoteValue {
171
+ type: "map";
172
+ handle?: ScriptHandle;
173
+ internalId?: ScriptInternalId;
174
+ value?: ScriptMappingRemoteValue;
175
+ }
176
+ export interface ScriptSetRemoteValue {
177
+ type: "set";
178
+ handle?: ScriptHandle;
179
+ internalId?: ScriptInternalId;
180
+ value?: ScriptListRemoteValue;
181
+ }
182
+ export interface ScriptWeakMapRemoteValue {
183
+ type: "weakmap";
184
+ handle?: ScriptHandle;
185
+ internalId?: ScriptInternalId;
186
+ }
187
+ export interface ScriptWeakSetRemoteValue {
188
+ type: "weakset";
189
+ handle?: ScriptHandle;
190
+ internalId?: ScriptInternalId;
191
+ }
192
+ export interface ScriptGeneratorRemoteValue {
193
+ type: "generator";
194
+ handle?: ScriptHandle;
195
+ internalId?: ScriptInternalId;
196
+ }
197
+ export interface ScriptErrorRemoteValue {
198
+ type: "error";
199
+ handle?: ScriptHandle;
200
+ internalId?: ScriptInternalId;
201
+ }
202
+ export interface ScriptProxyRemoteValue {
203
+ type: "proxy";
204
+ handle?: ScriptHandle;
205
+ internalId?: ScriptInternalId;
206
+ }
207
+ export interface ScriptPromiseRemoteValue {
208
+ type: "promise";
209
+ handle?: ScriptHandle;
210
+ internalId?: ScriptInternalId;
211
+ }
212
+ export interface ScriptTypedArrayRemoteValue {
213
+ type: "typedarray";
214
+ handle?: ScriptHandle;
215
+ internalId?: ScriptInternalId;
216
+ }
217
+ export interface ScriptArrayBufferRemoteValue {
218
+ type: "arraybuffer";
219
+ handle?: ScriptHandle;
220
+ internalId?: ScriptInternalId;
221
+ }
222
+ export interface ScriptNodeListRemoteValue {
223
+ type: "nodelist";
224
+ handle?: ScriptHandle;
225
+ internalId?: ScriptInternalId;
226
+ value?: ScriptListRemoteValue;
227
+ }
228
+ export interface ScriptHtmlCollectionRemoteValue {
229
+ type: "htmlcollection";
230
+ handle?: ScriptHandle;
231
+ internalId?: ScriptInternalId;
232
+ value?: ScriptListRemoteValue;
233
+ }
234
+ export interface ScriptNodeRemoteValue {
235
+ type: "node";
236
+ sharedId?: ScriptSharedId;
237
+ handle?: ScriptHandle;
238
+ internalId?: ScriptInternalId;
239
+ value?: ScriptNodeProperties;
240
+ }
241
+ export interface ScriptNodeProperties {
242
+ nodeType: JsUint;
243
+ childNodeCount: JsUint;
244
+ attributes?: Record<string, string>;
245
+ children?: ScriptNodeRemoteValue[];
246
+ localName?: string;
247
+ mode?: "open" | "closed";
248
+ namespaceUri?: string;
249
+ nodeValue?: string;
250
+ shadowRoot?: ScriptNodeRemoteValue | null;
251
+ }
252
+ export interface ScriptWindowProxyRemoteValue {
253
+ type: "window";
254
+ value: ScriptWindowProxyProperties;
255
+ handle?: ScriptHandle;
256
+ internalId?: ScriptInternalId;
257
+ }
258
+ export interface ScriptWindowProxyProperties {
259
+ context: BrowsingContextBrowsingContext;
260
+ }
261
+ export type ScriptResultOwnership = "root" | "none";
262
+ export interface ScriptSerializationOptions {
263
+ maxDomDepth?: JsUint | null;
264
+ /**
265
+ * @default null
266
+ */
267
+ maxObjectDepth?: JsUint | null;
268
+ /**
269
+ * @default 'none'
270
+ */
271
+ includeShadowTree?: "none" | "open" | "all";
272
+ }
273
+ export type ScriptSharedId = string;
274
+ export interface ScriptStackFrame {
275
+ columnNumber: JsUint;
276
+ functionName: string;
277
+ lineNumber: JsUint;
278
+ url: string;
279
+ }
280
+ export interface ScriptStackTrace {
281
+ callFrames: ScriptStackFrame[];
282
+ }
283
+ export interface ScriptSource {
284
+ realm: ScriptRealm;
285
+ context?: BrowsingContextBrowsingContext;
286
+ userContext?: BrowserUserContext;
287
+ }
288
+ export interface ScriptRealmTarget {
289
+ realm: ScriptRealm;
290
+ }
291
+ export interface ScriptContextTarget {
292
+ context: BrowsingContextBrowsingContext;
293
+ sandbox?: string;
294
+ }
295
+ export type ScriptTarget = ScriptContextTarget | ScriptRealmTarget;
296
+ export interface ScriptAddPreloadScript {
297
+ method: "script.addPreloadScript";
298
+ params: ScriptAddPreloadScriptParameters;
299
+ }
300
+ export interface ScriptAddPreloadScriptParameters {
301
+ functionDeclaration: string;
302
+ arguments?: ScriptChannelValue[];
303
+ contexts?: BrowsingContextBrowsingContext[];
304
+ userContexts?: BrowserUserContext[];
305
+ sandbox?: string;
306
+ }
307
+ export interface ScriptAddPreloadScriptResult {
308
+ script: ScriptPreloadScript;
309
+ }
310
+ export interface ScriptDisown {
311
+ method: "script.disown";
312
+ params: ScriptDisownParameters;
313
+ }
314
+ export interface ScriptDisownParameters {
315
+ handles: ScriptHandle[];
316
+ target: ScriptTarget;
317
+ }
318
+ export type ScriptDisownResult = EmptyResult;
319
+ export interface ScriptCallFunction {
320
+ method: "script.callFunction";
321
+ params: ScriptCallFunctionParameters;
322
+ }
323
+ export interface ScriptCallFunctionParameters {
324
+ functionDeclaration: string;
325
+ awaitPromise: boolean;
326
+ target: ScriptTarget;
327
+ arguments?: ScriptLocalValue[];
328
+ resultOwnership?: ScriptResultOwnership;
329
+ serializationOptions?: ScriptSerializationOptions;
330
+ this?: ScriptLocalValue;
331
+ userActivation?: boolean;
332
+ }
333
+ export type ScriptCallFunctionResult = ScriptEvaluateResult;
334
+ export interface ScriptEvaluate {
335
+ method: "script.evaluate";
336
+ params: ScriptEvaluateParameters;
337
+ }
338
+ export interface ScriptEvaluateParameters {
339
+ expression: string;
340
+ target: ScriptTarget;
341
+ awaitPromise: boolean;
342
+ resultOwnership?: ScriptResultOwnership;
343
+ serializationOptions?: ScriptSerializationOptions;
344
+ userActivation?: boolean;
345
+ }
346
+ export interface ScriptGetRealms {
347
+ method: "script.getRealms";
348
+ params: ScriptGetRealmsParameters;
349
+ }
350
+ export interface ScriptGetRealmsParameters {
351
+ context?: BrowsingContextBrowsingContext;
352
+ type?: ScriptRealmType;
353
+ }
354
+ export interface ScriptGetRealmsResult {
355
+ realms: ScriptRealmInfo[];
356
+ }
357
+ export interface ScriptRemovePreloadScript {
358
+ method: "script.removePreloadScript";
359
+ params: ScriptRemovePreloadScriptParameters;
360
+ }
361
+ export interface ScriptRemovePreloadScriptParameters {
362
+ script: ScriptPreloadScript;
363
+ }
364
+ export type ScriptRemovePreloadScriptResult = EmptyResult;
365
+ export interface ScriptMessage {
366
+ method: "script.message";
367
+ params: ScriptMessageParameters;
368
+ }
369
+ export interface ScriptMessageParameters {
370
+ channel: ScriptChannel;
371
+ data: ScriptRemoteValue;
372
+ source: ScriptSource;
373
+ }
374
+ export interface ScriptRealmCreated {
375
+ method: "script.realmCreated";
376
+ params: ScriptRealmInfo;
377
+ }
378
+ export interface ScriptRealmDestroyed {
379
+ method: "script.realmDestroyed";
380
+ params: ScriptRealmDestroyedParameters;
381
+ }
382
+ export interface ScriptRealmDestroyedParameters {
383
+ realm: ScriptRealm;
384
+ }
385
+ /** @deprecated Use {@link Script.create} instead — will be removed in a future major version. */
386
+ export declare function getScriptManagerInstance(driver: unknown): Promise<Script>;
387
+ export declare class Script {
388
+ private readonly bidi;
389
+ private constructor();
390
+ static create(driver: unknown): Promise<Script>;
391
+ addPreloadScript(params: ScriptAddPreloadScriptParameters): Promise<ScriptAddPreloadScriptResult>;
392
+ callFunction(params: ScriptCallFunctionParameters): Promise<ScriptCallFunctionResult>;
393
+ disown(params: ScriptDisownParameters): Promise<void>;
394
+ evaluate(params: ScriptEvaluateParameters): Promise<ScriptEvaluateResult>;
395
+ getRealms(params: ScriptGetRealmsParameters): Promise<ScriptGetRealmsResult>;
396
+ removePreloadScript(params: ScriptRemovePreloadScriptParameters): Promise<void>;
397
+ onMessage(callback: (params: ScriptMessageParameters) => void): Promise<void>;
398
+ onRealmCreated(callback: (params: ScriptRealmInfo) => void): Promise<void>;
399
+ onRealmDestroyed(callback: (params: ScriptRealmDestroyedParameters) => void): Promise<void>;
400
+ getAllRealms(): Promise<ScriptGetRealmsResult>;
401
+ getRealmsByType(type: ScriptRealmType): Promise<ScriptGetRealmsResult>;
402
+ getRealmsInBrowsingContext(context: BrowsingContextBrowsingContext): Promise<ScriptGetRealmsResult>;
403
+ getRealmsInBrowsingContextByType(context: BrowsingContextBrowsingContext, type: ScriptRealmType): Promise<ScriptGetRealmsResult>;
404
+ callFunctionInRealm(realmId: ScriptRealm, functionDeclaration: string, awaitPromise: boolean, args?: ScriptLocalValue[], resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
405
+ callFunctionInBrowsingContext(browsingContextId: BrowsingContextBrowsingContext, functionDeclaration: string, awaitPromise: boolean, args?: ScriptLocalValue[], sandbox?: string, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
406
+ evaluateFunctionInRealm(realmId: ScriptRealm, expression: string, awaitPromise: boolean, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
407
+ evaluateFunctionInBrowsingContext(browsingContextId: BrowsingContextBrowsingContext, expression: string, awaitPromise: boolean, sandbox?: string, resultOwnership?: ScriptResultOwnership, serializationOptions?: ScriptSerializationOptions, userActivation?: boolean): Promise<ScriptEvaluateResult>;
408
+ disownRealmScript(realmId: ScriptRealm, handles: ScriptHandle[]): Promise<void>;
409
+ disownBrowsingContextScript(browsingContextId: BrowsingContextBrowsingContext, handles: ScriptHandle[], sandbox?: string): Promise<void>;
410
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ // Licensed to the Software Freedom Conservancy (SFC) under one
3
+ // or more contributor license agreements. See the NOTICE file
4
+ // distributed with this work for additional information
5
+ // regarding copyright ownership. The SFC licenses this file
6
+ // to you under the Apache License, Version 2.0 (the
7
+ // "License"); you may not use this file except in compliance
8
+ // with the License. You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing,
13
+ // software distributed under the License is distributed on an
14
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ // KIND, either express or implied. See the License for the
16
+ // specific language governing permissions and limitations
17
+ // under the License.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.Script = void 0;
20
+ exports.getScriptManagerInstance = getScriptManagerInstance;
21
+ // --- Additional Types ---
22
+ /** @deprecated Use {@link Script.create} instead — will be removed in a future major version. */
23
+ async function getScriptManagerInstance(driver) {
24
+ return Script.create(driver);
25
+ }
26
+ // --- Implementation ---
27
+ class Script {
28
+ constructor(bidi) {
29
+ this.bidi = bidi;
30
+ }
31
+ static async create(driver) {
32
+ const caps = await driver.getCapabilities();
33
+ if (!caps.get('webSocketUrl')) {
34
+ throw new Error('WebDriver instance must support BiDi protocol');
35
+ }
36
+ const bidi = await driver.getBidi();
37
+ return new Script(bidi);
38
+ }
39
+ async addPreloadScript(params) {
40
+ const response = await this.bidi.send({
41
+ method: 'script.addPreloadScript',
42
+ params: params,
43
+ });
44
+ if (response['type'] === 'error') {
45
+ throw new Error(`${response['error']}: ${response['message']}`);
46
+ }
47
+ return response.result;
48
+ }
49
+ async callFunction(params) {
50
+ const response = await this.bidi.send({
51
+ method: 'script.callFunction',
52
+ params: params,
53
+ });
54
+ if (response['type'] === 'error') {
55
+ throw new Error(`${response['error']}: ${response['message']}`);
56
+ }
57
+ return response.result;
58
+ }
59
+ async disown(params) {
60
+ const response = await this.bidi.send({
61
+ method: 'script.disown',
62
+ params: params,
63
+ });
64
+ if (response['type'] === 'error') {
65
+ throw new Error(`${response['error']}: ${response['message']}`);
66
+ }
67
+ }
68
+ async evaluate(params) {
69
+ const response = await this.bidi.send({
70
+ method: 'script.evaluate',
71
+ params: params,
72
+ });
73
+ if (response['type'] === 'error') {
74
+ throw new Error(`${response['error']}: ${response['message']}`);
75
+ }
76
+ return response.result;
77
+ }
78
+ async getRealms(params) {
79
+ const response = await this.bidi.send({
80
+ method: 'script.getRealms',
81
+ params: params,
82
+ });
83
+ if (response['type'] === 'error') {
84
+ throw new Error(`${response['error']}: ${response['message']}`);
85
+ }
86
+ return response.result;
87
+ }
88
+ async removePreloadScript(params) {
89
+ const response = await this.bidi.send({
90
+ method: 'script.removePreloadScript',
91
+ params: params,
92
+ });
93
+ if (response['type'] === 'error') {
94
+ throw new Error(`${response['error']}: ${response['message']}`);
95
+ }
96
+ }
97
+ async onMessage(callback) {
98
+ await this.bidi.subscribe('script.message');
99
+ this.bidi.on('script.message', (params) => {
100
+ callback(params);
101
+ });
102
+ }
103
+ async onRealmCreated(callback) {
104
+ await this.bidi.subscribe('script.realmCreated');
105
+ this.bidi.on('script.realmCreated', (params) => {
106
+ callback(params);
107
+ });
108
+ }
109
+ async onRealmDestroyed(callback) {
110
+ await this.bidi.subscribe('script.realmDestroyed');
111
+ this.bidi.on('script.realmDestroyed', (params) => {
112
+ callback(params);
113
+ });
114
+ }
115
+ async getAllRealms() {
116
+ return this.getRealms({});
117
+ }
118
+ async getRealmsByType(type) {
119
+ return this.getRealms({ type });
120
+ }
121
+ async getRealmsInBrowsingContext(context) {
122
+ return this.getRealms({ context });
123
+ }
124
+ async getRealmsInBrowsingContextByType(context, type) {
125
+ return this.getRealms({ context, type });
126
+ }
127
+ async callFunctionInRealm(realmId, functionDeclaration, awaitPromise, args, resultOwnership, serializationOptions, userActivation) {
128
+ return this.callFunction({ functionDeclaration, awaitPromise, target: { realm: realmId }, arguments: args, resultOwnership, serializationOptions, userActivation });
129
+ }
130
+ async callFunctionInBrowsingContext(browsingContextId, functionDeclaration, awaitPromise, args, sandbox, resultOwnership, serializationOptions, userActivation) {
131
+ return this.callFunction({ functionDeclaration, awaitPromise, target: { context: browsingContextId, sandbox }, arguments: args, resultOwnership, serializationOptions, userActivation });
132
+ }
133
+ async evaluateFunctionInRealm(realmId, expression, awaitPromise, resultOwnership, serializationOptions, userActivation) {
134
+ return this.evaluate({ expression, awaitPromise, target: { realm: realmId }, resultOwnership, serializationOptions, userActivation });
135
+ }
136
+ async evaluateFunctionInBrowsingContext(browsingContextId, expression, awaitPromise, sandbox, resultOwnership, serializationOptions, userActivation) {
137
+ return this.evaluate({ expression, awaitPromise, target: { context: browsingContextId, sandbox }, resultOwnership, serializationOptions, userActivation });
138
+ }
139
+ async disownRealmScript(realmId, handles) {
140
+ await this.disown({ handles, target: { realm: realmId } });
141
+ }
142
+ async disownBrowsingContextScript(browsingContextId, handles, sandbox) {
143
+ await this.disown({ handles, target: { context: browsingContextId, sandbox } });
144
+ }
145
+ }
146
+ exports.Script = Script;
@@ -0,0 +1,119 @@
1
+ import type { BrowserUserContext } from './browser.js';
2
+ import type { BrowsingContextBrowsingContext } from './browsing_context.js';
3
+ import type { EmptyParams, EmptyResult, Extensible } from './common.js';
4
+ export type SessionCommand = SessionEnd | SessionNew | SessionStatus | SessionSubscribe | SessionUnsubscribe;
5
+ export type SessionResult = SessionEndResult | SessionNewResult | SessionStatusResult | SessionSubscribeResult | SessionUnsubscribeResult;
6
+ export interface SessionCapabilitiesRequest {
7
+ alwaysMatch?: SessionCapabilityRequest;
8
+ firstMatch?: SessionCapabilityRequest[];
9
+ }
10
+ export type SessionCapabilityRequest = Extensible & {
11
+ acceptInsecureCerts?: boolean;
12
+ browserName?: string;
13
+ browserVersion?: string;
14
+ platformName?: string;
15
+ proxy?: SessionProxyConfiguration;
16
+ unhandledPromptBehavior?: SessionUserPromptHandler;
17
+ };
18
+ export type SessionProxyConfiguration = SessionAutodetectProxyConfiguration | SessionDirectProxyConfiguration | SessionManualProxyConfiguration | SessionPacProxyConfiguration | SessionSystemProxyConfiguration;
19
+ export type SessionAutodetectProxyConfiguration = Extensible & {
20
+ proxyType: "autodetect";
21
+ };
22
+ export type SessionDirectProxyConfiguration = Extensible & {
23
+ proxyType: "direct";
24
+ };
25
+ export type SessionManualProxyConfiguration = SessionSocksProxyConfiguration & Extensible & {
26
+ proxyType: "manual";
27
+ httpProxy?: string;
28
+ sslProxy?: string;
29
+ noProxy?: string[];
30
+ };
31
+ export interface SessionSocksProxyConfiguration {
32
+ socksProxy: string;
33
+ socksVersion: number;
34
+ }
35
+ export type SessionPacProxyConfiguration = Extensible & {
36
+ proxyType: "pac";
37
+ proxyAutoconfigUrl: string;
38
+ };
39
+ export type SessionSystemProxyConfiguration = Extensible & {
40
+ proxyType: "system";
41
+ };
42
+ export interface SessionUserPromptHandler {
43
+ alert?: SessionUserPromptHandlerType;
44
+ beforeUnload?: SessionUserPromptHandlerType;
45
+ confirm?: SessionUserPromptHandlerType;
46
+ default?: SessionUserPromptHandlerType;
47
+ file?: SessionUserPromptHandlerType;
48
+ prompt?: SessionUserPromptHandlerType;
49
+ }
50
+ export type SessionUserPromptHandlerType = "accept" | "dismiss" | "ignore";
51
+ export type SessionSubscription = string;
52
+ export interface SessionSubscribeParameters {
53
+ events: string[];
54
+ contexts?: BrowsingContextBrowsingContext[];
55
+ userContexts?: BrowserUserContext[];
56
+ }
57
+ export interface SessionUnsubscribeByIdRequest {
58
+ subscriptions: SessionSubscription[];
59
+ }
60
+ export interface SessionUnsubscribeByAttributesRequest {
61
+ events: string[];
62
+ }
63
+ export interface SessionStatus {
64
+ method: "session.status";
65
+ params: EmptyParams;
66
+ }
67
+ export interface SessionStatusResult {
68
+ ready: boolean;
69
+ message: string;
70
+ }
71
+ export interface SessionNew {
72
+ method: "session.new";
73
+ params: SessionNewParameters;
74
+ }
75
+ export interface SessionNewParameters {
76
+ capabilities: SessionCapabilitiesRequest;
77
+ }
78
+ export interface SessionNewResult {
79
+ sessionId: string;
80
+ capabilities: {
81
+ acceptInsecureCerts: boolean;
82
+ browserName: string;
83
+ browserVersion: string;
84
+ platformName: string;
85
+ setWindowRect: boolean;
86
+ userAgent: string;
87
+ proxy?: SessionProxyConfiguration;
88
+ unhandledPromptBehavior?: SessionUserPromptHandler;
89
+ webSocketUrl?: string;
90
+ };
91
+ }
92
+ export interface SessionEnd {
93
+ method: "session.end";
94
+ params: EmptyParams;
95
+ }
96
+ export type SessionEndResult = EmptyResult;
97
+ export interface SessionSubscribe {
98
+ method: "session.subscribe";
99
+ params: SessionSubscribeParameters;
100
+ }
101
+ export interface SessionSubscribeResult {
102
+ subscription: SessionSubscription;
103
+ }
104
+ export interface SessionUnsubscribe {
105
+ method: "session.unsubscribe";
106
+ params: SessionUnsubscribeParameters;
107
+ }
108
+ export type SessionUnsubscribeParameters = SessionUnsubscribeByAttributesRequest | SessionUnsubscribeByIdRequest;
109
+ export type SessionUnsubscribeResult = EmptyResult;
110
+ export declare class Session {
111
+ private readonly bidi;
112
+ private constructor();
113
+ static create(driver: unknown): Promise<Session>;
114
+ end(): Promise<void>;
115
+ new(params: SessionNewParameters): Promise<SessionNewResult>;
116
+ status(): Promise<SessionStatusResult>;
117
+ subscribe(params: SessionSubscribeParameters): Promise<SessionSubscribeResult>;
118
+ unsubscribe(params: SessionUnsubscribeParameters): Promise<void>;
119
+ }