@webhands/core 0.5.0 → 0.6.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.
- package/README.md +20 -4
- package/dist/errors.d.ts +92 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -1
- package/dist/hand-host.d.ts +198 -5
- package/dist/hand-host.d.ts.map +1 -1
- package/dist/hand-host.js +664 -21
- package/dist/hand-host.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/playwright-attach-transport.d.ts +8 -1
- package/dist/playwright-attach-transport.d.ts.map +1 -1
- package/dist/playwright-attach-transport.js +19 -4
- package/dist/playwright-attach-transport.js.map +1 -1
- package/dist/playwright-launch-transport.d.ts.map +1 -1
- package/dist/playwright-launch-transport.js +13 -4
- package/dist/playwright-launch-transport.js.map +1 -1
- package/dist/profile-location.d.ts +19 -0
- package/dist/profile-location.d.ts.map +1 -1
- package/dist/profile-location.js +21 -0
- package/dist/profile-location.js.map +1 -1
- package/dist/seam.d.ts +501 -7
- package/dist/seam.d.ts.map +1 -1
- package/dist/seam.js +31 -0
- package/dist/seam.js.map +1 -1
- package/dist/session-rpc.d.ts +63 -1
- package/dist/session-rpc.d.ts.map +1 -1
- package/dist/session-rpc.js +174 -11
- package/dist/session-rpc.js.map +1 -1
- package/dist/stub-transport.d.ts.map +1 -1
- package/dist/stub-transport.js +74 -6
- package/dist/stub-transport.js.map +1 -1
- package/dist/test-fixtures/fixture-pages.d.ts.map +1 -1
- package/dist/test-fixtures/fixture-pages.js +994 -0
- package/dist/test-fixtures/fixture-pages.js.map +1 -1
- package/dist/test-fixtures/fixture-server.d.ts.map +1 -1
- package/dist/test-fixtures/fixture-server.js +33 -3
- package/dist/test-fixtures/fixture-server.js.map +1 -1
- package/package.json +1 -1
- package/src/errors.ts +134 -1
- package/src/hand-host.ts +797 -21
- package/src/index.ts +20 -1
- package/src/playwright-attach-transport.ts +25 -3
- package/src/playwright-launch-transport.ts +13 -2
- package/src/profile-location.ts +25 -0
- package/src/seam.ts +535 -7
- package/src/session-rpc.ts +276 -14
- package/src/stub-transport.ts +83 -6
- package/src/test-fixtures/fixture-pages.ts +1010 -0
- package/src/test-fixtures/fixture-server.ts +32 -3
package/dist/session-rpc.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Cookie, type WaitCondition } from './seam.js';
|
|
1
|
+
import { type ActionOptions, type Cookie, type MouseInput, type QueryOptions, type ScreenshotOptions, type ScrollTarget, type SelectChoice, type WaitCondition } from './seam.js';
|
|
2
2
|
import type { WebHandsPage } from './seam.js';
|
|
3
3
|
/**
|
|
4
4
|
* The wire protocol for driving the long-lived session over HTTP (ADR-0005).
|
|
@@ -59,13 +59,28 @@ export type SessionRpcBuiltInRequest = {
|
|
|
59
59
|
} | {
|
|
60
60
|
readonly verb: 'click';
|
|
61
61
|
readonly locator: string;
|
|
62
|
+
/**
|
|
63
|
+
* Optional {@link ActionOptions}: `{byRef: true}` marks `locator` as a
|
|
64
|
+
* durable `query` `ref` so the server resolves it with the loud-stale
|
|
65
|
+
* EXACTLY-ONE contract ({@link StaleRefError}). Omitted == plain locator
|
|
66
|
+
* click (additive, R1).
|
|
67
|
+
*/
|
|
68
|
+
readonly options?: ActionOptions;
|
|
62
69
|
} | {
|
|
63
70
|
readonly verb: 'type';
|
|
64
71
|
readonly locator: string;
|
|
65
72
|
readonly text: string;
|
|
73
|
+
/** Optional {@link ActionOptions} (`{byRef}`); see the `click` request. */
|
|
74
|
+
readonly options?: ActionOptions;
|
|
66
75
|
} | {
|
|
67
76
|
readonly verb: 'eval';
|
|
68
77
|
readonly expression: string;
|
|
78
|
+
/**
|
|
79
|
+
* Optional SAME-ORIGIN child-frame selector to evaluate in (Tier-3 frame
|
|
80
|
+
* scope). A plain string on the wire; the server passes it as the seam
|
|
81
|
+
* {@link EvalOptions.frame}. Omitted == top-document `eval`.
|
|
82
|
+
*/
|
|
83
|
+
readonly frame?: string;
|
|
69
84
|
} | {
|
|
70
85
|
readonly verb: 'wait';
|
|
71
86
|
readonly condition: WaitCondition;
|
|
@@ -74,6 +89,53 @@ export type SessionRpcBuiltInRequest = {
|
|
|
74
89
|
} | {
|
|
75
90
|
readonly verb: 'setCookies';
|
|
76
91
|
readonly cookies: readonly Cookie[];
|
|
92
|
+
} | {
|
|
93
|
+
readonly verb: 'query';
|
|
94
|
+
readonly locator: string;
|
|
95
|
+
readonly options?: QueryOptions;
|
|
96
|
+
} | {
|
|
97
|
+
readonly verb: 'count';
|
|
98
|
+
readonly locator: string;
|
|
99
|
+
} | {
|
|
100
|
+
readonly verb: 'exists';
|
|
101
|
+
readonly locator: string;
|
|
102
|
+
} | {
|
|
103
|
+
readonly verb: 'isVisible';
|
|
104
|
+
readonly locator: string;
|
|
105
|
+
} | {
|
|
106
|
+
readonly verb: 'getAttribute';
|
|
107
|
+
readonly locator: string;
|
|
108
|
+
readonly name: string;
|
|
109
|
+
} | {
|
|
110
|
+
readonly verb: 'press';
|
|
111
|
+
readonly key: string;
|
|
112
|
+
readonly locator?: string;
|
|
113
|
+
} | {
|
|
114
|
+
readonly verb: 'hover';
|
|
115
|
+
readonly locator: string;
|
|
116
|
+
} | {
|
|
117
|
+
readonly verb: 'select';
|
|
118
|
+
readonly locator: string;
|
|
119
|
+
readonly choice: SelectChoice;
|
|
120
|
+
} | {
|
|
121
|
+
readonly verb: 'scroll';
|
|
122
|
+
readonly target: ScrollTarget;
|
|
123
|
+
} | {
|
|
124
|
+
readonly verb: 'drag';
|
|
125
|
+
readonly source: string;
|
|
126
|
+
readonly target: string;
|
|
127
|
+
} | {
|
|
128
|
+
readonly verb: 'mouse';
|
|
129
|
+
readonly input: MouseInput;
|
|
130
|
+
} | {
|
|
131
|
+
readonly verb: 'screenshot';
|
|
132
|
+
/**
|
|
133
|
+
* The {@link ScreenshotOptions}, flattened onto the request. `locator`
|
|
134
|
+
* (the `element` scope's clip target) is a branded {@link LocatorString}
|
|
135
|
+
* that JSON flattens to a plain string; the server re-brands it with
|
|
136
|
+
* {@link locator}. No image bytes ever cross — only the path comes back.
|
|
137
|
+
*/
|
|
138
|
+
readonly options?: ScreenshotOptions;
|
|
77
139
|
};
|
|
78
140
|
/**
|
|
79
141
|
* The OPEN escape for a dynamically-loaded third-party hand verb (Phase 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-rpc.d.ts","sourceRoot":"","sources":["../src/session-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"session-rpc.d.ts","sourceRoot":"","sources":["../src/session-rpc.ts"],"names":[],"mappings":"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"}
|
package/dist/session-rpc.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { locator, } from './seam.js';
|
|
1
|
+
import { locator, validateSnapshotOptions, } from './seam.js';
|
|
2
2
|
/**
|
|
3
3
|
* The wire protocol for driving the long-lived session over HTTP (ADR-0005).
|
|
4
4
|
*
|
|
@@ -58,15 +58,25 @@ export async function applySessionRpc(page, request) {
|
|
|
58
58
|
await page.navigate(request.url);
|
|
59
59
|
return undefined;
|
|
60
60
|
case 'snapshot':
|
|
61
|
-
|
|
61
|
+
// Validate on the SERVER side so a malformed request from ANY client
|
|
62
|
+
// (not just the typed `makeRpcPage`) is rejected faithfully across the
|
|
63
|
+
// seam, mirroring how a page/eval throw rejects. A raw client could POST
|
|
64
|
+
// e.g. `{verb: 'snapshot', view: 'full'}`; we rebuild the snapshot
|
|
65
|
+
// options from the request's non-`verb` keys and reject unknown ones
|
|
66
|
+
// rather than silently dropping them and returning the wrong view.
|
|
67
|
+
return page.snapshot(snapshotOptionsFromRequest(request));
|
|
62
68
|
case 'click':
|
|
63
|
-
|
|
69
|
+
// Forward the optional ActionOptions only when given, so a plain-locator
|
|
70
|
+
// click stays `click(target)` (the byRef path is opt-in).
|
|
71
|
+
await page.click(locator(request.locator), request.options !== undefined ? request.options : undefined);
|
|
64
72
|
return undefined;
|
|
65
73
|
case 'type':
|
|
66
|
-
await page.type(locator(request.locator), request.text);
|
|
74
|
+
await page.type(locator(request.locator), request.text, request.options !== undefined ? request.options : undefined);
|
|
67
75
|
return undefined;
|
|
68
76
|
case 'eval':
|
|
69
|
-
|
|
77
|
+
// Forward the optional frame selector only when present, so a bare
|
|
78
|
+
// top-document eval stays `eval(expression)` (no options object).
|
|
79
|
+
return page.eval(request.expression, request.frame !== undefined ? { frame: request.frame } : undefined);
|
|
70
80
|
case 'wait':
|
|
71
81
|
await page.wait(rebrandWait(request.condition));
|
|
72
82
|
return undefined;
|
|
@@ -75,10 +85,64 @@ export async function applySessionRpc(page, request) {
|
|
|
75
85
|
case 'setCookies':
|
|
76
86
|
await page.setCookies(request.cookies);
|
|
77
87
|
return undefined;
|
|
88
|
+
case 'query':
|
|
89
|
+
return page.query(locator(request.locator), request.options);
|
|
90
|
+
case 'count':
|
|
91
|
+
return page.count(locator(request.locator));
|
|
92
|
+
case 'exists':
|
|
93
|
+
return page.exists(locator(request.locator));
|
|
94
|
+
case 'isVisible':
|
|
95
|
+
return page.isVisible(locator(request.locator));
|
|
96
|
+
case 'getAttribute':
|
|
97
|
+
return page.getAttribute(locator(request.locator), request.name);
|
|
98
|
+
case 'press':
|
|
99
|
+
await page.press(request.key, request.locator !== undefined ? locator(request.locator) : undefined);
|
|
100
|
+
return undefined;
|
|
101
|
+
case 'hover':
|
|
102
|
+
await page.hover(locator(request.locator));
|
|
103
|
+
return undefined;
|
|
104
|
+
case 'select':
|
|
105
|
+
await page.select(locator(request.locator), request.choice);
|
|
106
|
+
return undefined;
|
|
107
|
+
case 'scroll':
|
|
108
|
+
await page.scroll(rebrandScroll(request.target));
|
|
109
|
+
return undefined;
|
|
110
|
+
case 'drag':
|
|
111
|
+
await page.drag(locator(request.source), locator(request.target));
|
|
112
|
+
return undefined;
|
|
113
|
+
case 'mouse':
|
|
114
|
+
await page.mouse(request.input);
|
|
115
|
+
return undefined;
|
|
116
|
+
case 'screenshot':
|
|
117
|
+
// Re-brand the `element`-scope clip locator (plain string over the wire)
|
|
118
|
+
// before it reaches the page; the rest of the options are plain. Only the
|
|
119
|
+
// returned {path,width,height} crosses back — never image bytes.
|
|
120
|
+
return page.screenshot(rebrandScreenshot(request.options));
|
|
78
121
|
case 'hand':
|
|
79
122
|
return applyHandVerb(page, request);
|
|
80
123
|
}
|
|
81
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Rebuild and validate the {@link SnapshotOptions} carried by a wire `snapshot`
|
|
127
|
+
* request. The wire flattens `{full}` onto the request alongside `verb`; a raw
|
|
128
|
+
* (untyped) client may also send a misspelled key such as `view`. We collect
|
|
129
|
+
* every non-`verb` key into an options object and run it through the shared
|
|
130
|
+
* {@link validateSnapshotOptions} so the server rejects an unknown/misshapen
|
|
131
|
+
* option exactly as the in-process host does. Returns `undefined` when no
|
|
132
|
+
* options were sent (the bare `snapshot()` case).
|
|
133
|
+
*/
|
|
134
|
+
function snapshotOptionsFromRequest(request) {
|
|
135
|
+
const { verb: _verb, ...rest } = request;
|
|
136
|
+
// Drop an explicitly-absent `full` (the typed client always sends the key,
|
|
137
|
+
// even as `undefined`) so a bare `snapshot()` stays `undefined`.
|
|
138
|
+
if ('full' in rest && rest.full === undefined) {
|
|
139
|
+
delete rest.full;
|
|
140
|
+
}
|
|
141
|
+
if (Object.keys(rest).length === 0) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
return validateSnapshotOptions(rest);
|
|
145
|
+
}
|
|
82
146
|
/**
|
|
83
147
|
* Invoke a dynamically-loaded hand verb by name against the live composed page.
|
|
84
148
|
*
|
|
@@ -118,19 +182,41 @@ export function makeRpcPage(send) {
|
|
|
118
182
|
await send({ verb: 'navigate', url });
|
|
119
183
|
},
|
|
120
184
|
async snapshot(options) {
|
|
185
|
+
// Fail fast on the client too, so a typed caller's mistake (e.g.
|
|
186
|
+
// `{view: 'full'}`) is caught before a round-trip. The server
|
|
187
|
+
// re-validates as the load-bearing check for untyped clients.
|
|
188
|
+
validateSnapshotOptions(options);
|
|
121
189
|
return (await send({
|
|
122
190
|
verb: 'snapshot',
|
|
123
191
|
full: options?.full,
|
|
124
192
|
}));
|
|
125
193
|
},
|
|
126
|
-
async click(target) {
|
|
127
|
-
|
|
194
|
+
async click(target, options) {
|
|
195
|
+
// Carry the optional ActionOptions only when given, so a plain click sends
|
|
196
|
+
// no `options` key (mirrors `eval`'s optional frame).
|
|
197
|
+
await send({
|
|
198
|
+
verb: 'click',
|
|
199
|
+
locator: target,
|
|
200
|
+
...(options !== undefined ? { options } : {}),
|
|
201
|
+
});
|
|
128
202
|
},
|
|
129
|
-
async type(target, text) {
|
|
130
|
-
await send({
|
|
203
|
+
async type(target, text, options) {
|
|
204
|
+
await send({
|
|
205
|
+
verb: 'type',
|
|
206
|
+
locator: target,
|
|
207
|
+
text,
|
|
208
|
+
...(options !== undefined ? { options } : {}),
|
|
209
|
+
});
|
|
131
210
|
},
|
|
132
|
-
async eval(expression) {
|
|
133
|
-
|
|
211
|
+
async eval(expression, options) {
|
|
212
|
+
// Carry the optional frame selector only when given, so the focused
|
|
213
|
+
// top-document form sends no `frame` key (mirrors `press`'s optional
|
|
214
|
+
// locator).
|
|
215
|
+
return send({
|
|
216
|
+
verb: 'eval',
|
|
217
|
+
expression,
|
|
218
|
+
...(options?.frame !== undefined ? { frame: options.frame } : {}),
|
|
219
|
+
});
|
|
134
220
|
},
|
|
135
221
|
async wait(condition) {
|
|
136
222
|
await send({ verb: 'wait', condition });
|
|
@@ -141,6 +227,59 @@ export function makeRpcPage(send) {
|
|
|
141
227
|
async setCookies(cookies) {
|
|
142
228
|
await send({ verb: 'setCookies', cookies });
|
|
143
229
|
},
|
|
230
|
+
async query(target, options) {
|
|
231
|
+
return (await send({
|
|
232
|
+
verb: 'query',
|
|
233
|
+
locator: target,
|
|
234
|
+
options,
|
|
235
|
+
}));
|
|
236
|
+
},
|
|
237
|
+
async count(target) {
|
|
238
|
+
return (await send({ verb: 'count', locator: target }));
|
|
239
|
+
},
|
|
240
|
+
async exists(target) {
|
|
241
|
+
return (await send({ verb: 'exists', locator: target }));
|
|
242
|
+
},
|
|
243
|
+
async isVisible(target) {
|
|
244
|
+
return (await send({ verb: 'isVisible', locator: target }));
|
|
245
|
+
},
|
|
246
|
+
async getAttribute(target, name) {
|
|
247
|
+
return (await send({
|
|
248
|
+
verb: 'getAttribute',
|
|
249
|
+
locator: target,
|
|
250
|
+
name,
|
|
251
|
+
}));
|
|
252
|
+
},
|
|
253
|
+
async press(key, target) {
|
|
254
|
+
// Forward the optional locator only when given, so the wire request stays
|
|
255
|
+
// minimal (the focused-element form carries no locator key).
|
|
256
|
+
await send({
|
|
257
|
+
verb: 'press',
|
|
258
|
+
key,
|
|
259
|
+
...(target !== undefined ? { locator: target } : {}),
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
async hover(target) {
|
|
263
|
+
await send({ verb: 'hover', locator: target });
|
|
264
|
+
},
|
|
265
|
+
async select(target, choice) {
|
|
266
|
+
await send({ verb: 'select', locator: target, choice });
|
|
267
|
+
},
|
|
268
|
+
async scroll(target) {
|
|
269
|
+
await send({ verb: 'scroll', target });
|
|
270
|
+
},
|
|
271
|
+
async drag(source, target) {
|
|
272
|
+
await send({ verb: 'drag', source, target });
|
|
273
|
+
},
|
|
274
|
+
async mouse(input) {
|
|
275
|
+
await send({ verb: 'mouse', input });
|
|
276
|
+
},
|
|
277
|
+
async screenshot(options) {
|
|
278
|
+
return (await send({
|
|
279
|
+
verb: 'screenshot',
|
|
280
|
+
...(options !== undefined ? { options } : {}),
|
|
281
|
+
}));
|
|
282
|
+
},
|
|
144
283
|
};
|
|
145
284
|
}
|
|
146
285
|
/**
|
|
@@ -172,4 +311,28 @@ function rebrandWait(condition) {
|
|
|
172
311
|
}
|
|
173
312
|
return condition;
|
|
174
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* Re-brand a {@link ScrollTarget} that arrived as plain JSON: only the `to` form
|
|
316
|
+
* carries a branded {@link LocatorString}, flattened to a plain `string` over
|
|
317
|
+
* the wire, so we re-tag it before it reaches the page (mirrors
|
|
318
|
+
* {@link rebrandWait}). The `by` form carries only plain numbers.
|
|
319
|
+
*/
|
|
320
|
+
function rebrandScroll(target) {
|
|
321
|
+
if ('to' in target) {
|
|
322
|
+
return { to: locator(target.to) };
|
|
323
|
+
}
|
|
324
|
+
return target;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Re-brand a {@link ScreenshotOptions} that arrived as plain JSON: only the
|
|
328
|
+
* `element`-scope `locator` carries a branded {@link LocatorString}, flattened
|
|
329
|
+
* to a plain `string` over the wire, so we re-tag it before it reaches the page
|
|
330
|
+
* (mirrors {@link rebrandWait}/{@link rebrandScroll}). `scope`/`out` are plain.
|
|
331
|
+
*/
|
|
332
|
+
function rebrandScreenshot(options) {
|
|
333
|
+
if (options?.locator === undefined) {
|
|
334
|
+
return options;
|
|
335
|
+
}
|
|
336
|
+
return { ...options, locator: locator(options.locator) };
|
|
337
|
+
}
|
|
175
338
|
//# sourceMappingURL=session-rpc.js.map
|
package/dist/session-rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-rpc.js","sourceRoot":"","sources":["../src/session-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,
|
|
1
|
+
{"version":3,"file":"session-rpc.js","sourceRoot":"","sources":["../src/session-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-transport.d.ts","sourceRoot":"","sources":["../src/stub-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stub-transport.d.ts","sourceRoot":"","sources":["../src/stub-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKX,UAAU,EACV,YAAY,EAOZ,OAAO,EAGP,SAAS,EAET,MAAM,WAAW,CAAC;AAGnB;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,YAAY,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC9C,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAM;IAE1B,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;CA+IhD"}
|
package/dist/stub-transport.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { validateSnapshotOptions } from './seam.js';
|
|
1
2
|
/**
|
|
2
3
|
* An in-process, no-op {@link Transport} used to exercise the SEAM SHAPE
|
|
3
4
|
* without a real browser. It is NOT the Playwright transport (that lands in a
|
|
@@ -35,6 +36,7 @@ export class StubTransport {
|
|
|
35
36
|
},
|
|
36
37
|
async snapshot(options) {
|
|
37
38
|
ensureOpen();
|
|
39
|
+
validateSnapshotOptions(options);
|
|
38
40
|
calls.push({ verb: 'snapshot', args: [options] });
|
|
39
41
|
return {
|
|
40
42
|
url,
|
|
@@ -42,17 +44,26 @@ export class StubTransport {
|
|
|
42
44
|
content: '',
|
|
43
45
|
};
|
|
44
46
|
},
|
|
45
|
-
async click(t) {
|
|
47
|
+
async click(t, options) {
|
|
46
48
|
ensureOpen();
|
|
47
|
-
|
|
49
|
+
// Record the ActionOptions only when given, so a plain-locator click
|
|
50
|
+
// stays `[t]` (the existing seam assertions) and a `{byRef}` click
|
|
51
|
+
// records `[t, {byRef: true}]`.
|
|
52
|
+
calls.push({
|
|
53
|
+
verb: 'click',
|
|
54
|
+
args: options !== undefined ? [t, options] : [t],
|
|
55
|
+
});
|
|
48
56
|
},
|
|
49
|
-
async type(t, text) {
|
|
57
|
+
async type(t, text, options) {
|
|
50
58
|
ensureOpen();
|
|
51
|
-
calls.push({
|
|
59
|
+
calls.push({
|
|
60
|
+
verb: 'type',
|
|
61
|
+
args: options !== undefined ? [t, text, options] : [t, text],
|
|
62
|
+
});
|
|
52
63
|
},
|
|
53
|
-
async eval(expression) {
|
|
64
|
+
async eval(expression, options) {
|
|
54
65
|
ensureOpen();
|
|
55
|
-
calls.push({ verb: 'eval', args: [expression] });
|
|
66
|
+
calls.push({ verb: 'eval', args: [expression, options] });
|
|
56
67
|
return undefined;
|
|
57
68
|
},
|
|
58
69
|
async wait(condition) {
|
|
@@ -68,6 +79,63 @@ export class StubTransport {
|
|
|
68
79
|
ensureOpen();
|
|
69
80
|
calls.push({ verb: 'setCookies', args: [cookies] });
|
|
70
81
|
},
|
|
82
|
+
async query(t, options) {
|
|
83
|
+
ensureOpen();
|
|
84
|
+
calls.push({ verb: 'query', args: [t, options] });
|
|
85
|
+
return [];
|
|
86
|
+
},
|
|
87
|
+
async count(t) {
|
|
88
|
+
ensureOpen();
|
|
89
|
+
calls.push({ verb: 'count', args: [t] });
|
|
90
|
+
return 0;
|
|
91
|
+
},
|
|
92
|
+
async exists(t) {
|
|
93
|
+
ensureOpen();
|
|
94
|
+
calls.push({ verb: 'exists', args: [t] });
|
|
95
|
+
return false;
|
|
96
|
+
},
|
|
97
|
+
async isVisible(t) {
|
|
98
|
+
ensureOpen();
|
|
99
|
+
calls.push({ verb: 'isVisible', args: [t] });
|
|
100
|
+
return false;
|
|
101
|
+
},
|
|
102
|
+
async getAttribute(t, name) {
|
|
103
|
+
ensureOpen();
|
|
104
|
+
calls.push({ verb: 'getAttribute', args: [t, name] });
|
|
105
|
+
return null;
|
|
106
|
+
},
|
|
107
|
+
async press(key, t) {
|
|
108
|
+
ensureOpen();
|
|
109
|
+
calls.push({ verb: 'press', args: [key, t] });
|
|
110
|
+
},
|
|
111
|
+
async hover(t) {
|
|
112
|
+
ensureOpen();
|
|
113
|
+
calls.push({ verb: 'hover', args: [t] });
|
|
114
|
+
},
|
|
115
|
+
async select(t, choice) {
|
|
116
|
+
ensureOpen();
|
|
117
|
+
calls.push({ verb: 'select', args: [t, choice] });
|
|
118
|
+
},
|
|
119
|
+
async scroll(t) {
|
|
120
|
+
ensureOpen();
|
|
121
|
+
calls.push({ verb: 'scroll', args: [t] });
|
|
122
|
+
},
|
|
123
|
+
async drag(source, t) {
|
|
124
|
+
ensureOpen();
|
|
125
|
+
calls.push({ verb: 'drag', args: [source, t] });
|
|
126
|
+
},
|
|
127
|
+
async mouse(input) {
|
|
128
|
+
ensureOpen();
|
|
129
|
+
calls.push({ verb: 'mouse', args: [input] });
|
|
130
|
+
},
|
|
131
|
+
async screenshot(options) {
|
|
132
|
+
ensureOpen();
|
|
133
|
+
calls.push({ verb: 'screenshot', args: [options] });
|
|
134
|
+
// A deterministic stand-in path/dimensions so a wiring test can assert
|
|
135
|
+
// the verb round-trip + the attachment-capable `path` field WITHOUT a
|
|
136
|
+
// real browser (no PNG is written; the stub implements no behaviour).
|
|
137
|
+
return { path: 'stub://screenshot.png', width: 0, height: 0 };
|
|
138
|
+
},
|
|
71
139
|
};
|
|
72
140
|
return {
|
|
73
141
|
page,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-transport.js","sourceRoot":"","sources":["../src/stub-transport.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAa;IACzB,4EAA4E;IACnE,KAAK,GAAe,EAAE,CAAC;IAEhC,KAAK,CAAC,IAAI,CAAC,MAAkB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,aAA0B,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClD,aAAa,GAAG,OAAO,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,GAAG,EAAE;YACvB,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACtC,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,GAAG,GACR,MAAM,CAAC,IAAI,KAAK,QAAQ;YACvB,CAAC,CAAC,iBAAiB,MAAM,CAAC,OAAO,EAAE;YACnC,CAAC,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEvC,MAAM,IAAI,GAAiB;YAC1B,KAAK,CAAC,QAAQ,CAAC,EAAU;gBACxB,UAAU,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,OAAyB;gBACvC,UAAU,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC;gBAChD,OAAO;oBACN,GAAG;oBACH,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe;oBACvD,OAAO,EAAE,EAAE;iBACX,CAAC;YACH,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stub-transport.js","sourceRoot":"","sources":["../src/stub-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-pages.d.ts","sourceRoot":"","sources":["../../src/test-fixtures/fixture-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"fixture-pages.d.ts","sourceRoot":"","sources":["../../src/test-fixtures/fixture-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmqCH,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuB1D,CAAC"}
|