@e2e-dev/web 0.11.0-canary-20260928184528 → 0.11.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 +17 -14
- package/dist/.build.json +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +24 -4
- package/dist/actions.js.map +1 -1
- package/dist/attempt-session.d.ts +38 -3
- package/dist/attempt-session.d.ts.map +1 -1
- package/dist/attempt-session.js +71 -16
- package/dist/attempt-session.js.map +1 -1
- package/dist/browser-connection.d.ts.map +1 -1
- package/dist/browser-connection.js +12 -1
- package/dist/browser-connection.js.map +1 -1
- package/dist/{web.d.ts → browser.d.ts} +18 -9
- package/dist/browser.d.ts.map +1 -0
- package/dist/{web.js → browser.js} +35 -19
- package/dist/browser.js.map +1 -0
- package/dist/downloads.d.ts +29 -0
- package/dist/downloads.d.ts.map +1 -0
- package/dist/downloads.js +74 -0
- package/dist/downloads.js.map +1 -0
- package/dist/engine.d.ts +2 -2
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +113 -18
- package/dist/engine.js.map +1 -1
- package/dist/in-page/read-semantics.d.ts.map +1 -1
- package/dist/in-page/read-semantics.js +143 -34
- package/dist/in-page/read-semantics.js.map +1 -1
- package/dist/index.d.ts +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/locators.d.ts.map +1 -1
- package/dist/locators.js +26 -7
- package/dist/locators.js.map +1 -1
- package/dist/protected-app.d.ts +6 -2
- package/dist/protected-app.d.ts.map +1 -1
- package/dist/protected-app.js +18 -5
- package/dist/protected-app.js.map +1 -1
- package/dist/provider-video.d.ts +48 -0
- package/dist/provider-video.d.ts.map +1 -0
- package/dist/provider-video.js +80 -0
- package/dist/provider-video.js.map +1 -0
- package/dist/provider.d.ts +100 -5
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +148 -14
- package/dist/provider.js.map +1 -1
- package/dist/surface.d.ts +57 -13
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +41 -10
- package/dist/surface.js.map +1 -1
- package/dist/video.d.ts +34 -10
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +19 -10
- package/dist/video.js.map +1 -1
- package/package.json +4 -4
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `
|
|
2
|
+
* The `browser` fixture: the browser-shaped deterministic surface this engine
|
|
3
3
|
* contributes. It lives here, not in core, because the harness knows the
|
|
4
4
|
* engine contract and never a platform's fixture shape. Every async method
|
|
5
|
-
* runs as a harness-recorded `
|
|
5
|
+
* runs as a harness-recorded `browser.<method>` step; `expect(browser)` reaches the
|
|
6
6
|
* matchers attached through `context.expectable`.
|
|
7
7
|
*
|
|
8
8
|
* Layering rule: validation (`resolveUrl`, JSON checks, cookie URLs, the
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* never re-implemented here: `context.app.resolveUrl` is the one place that
|
|
12
12
|
* says which URLs a test may open.
|
|
13
13
|
*/
|
|
14
|
-
import { Deadline, describePattern, matchesText, pollCondition, TestError, toTextPattern, urlMatches, validateJsonValue, } from 'e2e/engine';
|
|
14
|
+
import { Deadline, describePattern, EngineError, matchesText, pollCondition, TestError, toTextPattern, urlMatches, validateJsonValue, } from 'e2e/engine';
|
|
15
|
+
import { saveDownloadsTo, saveFromBrowser, saveLocally } from './downloads.js';
|
|
15
16
|
import { isTestErrorCode, message as causeMessage, translatePwError } from './support.js';
|
|
16
17
|
import { compileEvaluation } from './evaluation.js';
|
|
17
18
|
import { routePatternMatches, routePatternsEqual } from './route-pattern.js';
|
|
@@ -37,8 +38,8 @@ async function readResponseBody(response) {
|
|
|
37
38
|
return () => Promise.reject(error);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
/** Builds the `
|
|
41
|
-
export function
|
|
41
|
+
/** Builds the `browser` fixture for one attempt over the shared surface. */
|
|
42
|
+
export function createBrowserFixture(surface, context) {
|
|
42
43
|
const latch = surface.latch;
|
|
43
44
|
const routes = [];
|
|
44
45
|
/**
|
|
@@ -60,8 +61,8 @@ export function createWebFixture(surface, context) {
|
|
|
60
61
|
const deadlineFor = (timeout) => new Deadline(context.operation(timeout ?? context.timeouts.assertion).timeoutMs);
|
|
61
62
|
const currentUrl = () => surface.guard(context.operation(), 'url', async () => surface.requirePage().url());
|
|
62
63
|
const currentTitle = () => surface.guard(context.operation(), 'title', () => surface.requirePage().title());
|
|
63
|
-
const expectation =
|
|
64
|
-
const
|
|
64
|
+
const expectation = createBrowserExpectation({ currentUrl, currentTitle, baseHref, deadlineFor, context });
|
|
65
|
+
const browser = {
|
|
65
66
|
goto(url, options) {
|
|
66
67
|
const resolved = context.app.resolveUrl(url);
|
|
67
68
|
return navigation(options, async (operation) => {
|
|
@@ -83,10 +84,10 @@ export function createWebFixture(surface, context) {
|
|
|
83
84
|
}),
|
|
84
85
|
url: currentUrl,
|
|
85
86
|
title: currentTitle,
|
|
86
|
-
// The same poll as `expect(
|
|
87
|
+
// The same poll as `expect(browser).toHaveURL`, exposed as a wait.
|
|
87
88
|
waitForURL: (url, options) => expectation.toHaveURL(url, options),
|
|
88
|
-
locator: (selector) => context.locator({ kind: 'selector', selector: requireSelector('
|
|
89
|
-
frameLocator: (selector) => frameScreen(context, [requireSelector('
|
|
89
|
+
locator: (selector) => context.locator({ kind: 'selector', selector: requireSelector('browser.locator', selector) }),
|
|
90
|
+
frameLocator: (selector) => frameScreen(context, [requireSelector('browser.frameLocator', selector)]),
|
|
90
91
|
async evaluate(fn, arg) {
|
|
91
92
|
const source = typeof fn === 'string' ? fn : fn.toString();
|
|
92
93
|
validateJsonValue(arg, 'evaluate argument');
|
|
@@ -230,10 +231,10 @@ export function createWebFixture(surface, context) {
|
|
|
230
231
|
});
|
|
231
232
|
},
|
|
232
233
|
setViewport: (size) => surface.guard(context.operation(), 'setViewport', async () => {
|
|
233
|
-
await surface.
|
|
234
|
+
await surface.setViewport(size);
|
|
234
235
|
context.attachViewport({ width: size.width, height: size.height, scale: 1 });
|
|
235
236
|
}),
|
|
236
|
-
// Async so the harness records the registration as a `
|
|
237
|
+
// Async so the harness records the registration as a `browser.onDialog` step.
|
|
237
238
|
async onDialog(handler) {
|
|
238
239
|
const unsubscribe = surface.dialogs.add(handler);
|
|
239
240
|
return async () => unsubscribe();
|
|
@@ -241,11 +242,16 @@ export function createWebFixture(surface, context) {
|
|
|
241
242
|
async waitForDownload(trigger, options) {
|
|
242
243
|
const operation = context.operation(options?.timeout);
|
|
243
244
|
let triggerFailure;
|
|
245
|
+
let awaiting;
|
|
244
246
|
return surface.guard(operation, 'download', async (currentOperation) => {
|
|
247
|
+
const remote = surface.remoteDownloads();
|
|
248
|
+
if (remote !== undefined)
|
|
249
|
+
await saveDownloadsTo(surface.requirePage(), remote.dir);
|
|
245
250
|
const waiter = surface.requirePage()
|
|
246
251
|
.waitForEvent('download', { timeout: currentOperation.timeoutMs });
|
|
247
252
|
// The trigger may fail before the waiter settles; absorb its later rejection.
|
|
248
253
|
waiter.catch(() => undefined);
|
|
254
|
+
const triggerStart = Date.now();
|
|
249
255
|
try {
|
|
250
256
|
await trigger();
|
|
251
257
|
}
|
|
@@ -253,17 +259,27 @@ export function createWebFixture(surface, context) {
|
|
|
253
259
|
triggerFailure = { cause };
|
|
254
260
|
throw cause;
|
|
255
261
|
}
|
|
262
|
+
awaiting = { waitMs: currentOperation.timeoutMs, triggerMs: Date.now() - triggerStart };
|
|
256
263
|
const download = await waiter;
|
|
264
|
+
awaiting = undefined;
|
|
257
265
|
const suggestedFilename = download.suggestedFilename();
|
|
258
266
|
const { relative, absolute } = surface.artifactPath('downloads', suggestedFilename, '');
|
|
259
|
-
|
|
267
|
+
if (remote === undefined)
|
|
268
|
+
await saveLocally(download, absolute, surface.unservedDownloads());
|
|
269
|
+
else
|
|
270
|
+
await saveFromBrowser(download, remote, absolute, currentOperation.signal);
|
|
260
271
|
context.attachArtifact('download', relative);
|
|
261
272
|
return { path: relative, suggestedFilename };
|
|
262
273
|
}, (cause, label) => {
|
|
263
274
|
// The trigger is test code, so its errors keep their original classification.
|
|
264
275
|
if (triggerFailure !== undefined && Object.is(cause, triggerFailure.cause))
|
|
265
276
|
throw cause;
|
|
266
|
-
|
|
277
|
+
const translated = translatePwError(cause, label);
|
|
278
|
+
// The waiter's clock starts before the trigger runs, so the message names both.
|
|
279
|
+
if (awaiting !== undefined && translated instanceof EngineError && translated.code === 'OPERATION_TIMEOUT') {
|
|
280
|
+
return new TestError('ACTION_FAILED', `no download started within ${awaiting.waitMs}ms; the trigger resolved after ${awaiting.triggerMs}ms`, { cause });
|
|
281
|
+
}
|
|
282
|
+
return translated;
|
|
267
283
|
});
|
|
268
284
|
},
|
|
269
285
|
keyboard: {
|
|
@@ -285,7 +301,7 @@ export function createWebFixture(surface, context) {
|
|
|
285
301
|
toHaveClass: { kind: 'assertion', timeout: false, label: (_target, expected) => String(expected) },
|
|
286
302
|
get not() { return matchers; },
|
|
287
303
|
};
|
|
288
|
-
return context.fixture('
|
|
304
|
+
return context.fixture('browser', context.expectable(browser, () => context.fixture('expect', expectation, matchers)), {
|
|
289
305
|
goto: { ...navigationCall, label: (url) => url },
|
|
290
306
|
reload: navigationCall,
|
|
291
307
|
back: navigationCall,
|
|
@@ -306,8 +322,8 @@ export function createWebFixture(surface, context) {
|
|
|
306
322
|
mouse: { move: action, wheel: action, down: action, up: action },
|
|
307
323
|
});
|
|
308
324
|
}
|
|
309
|
-
/** `expect(
|
|
310
|
-
function
|
|
325
|
+
/** `expect(browser)` matchers: URL, title, and class polling against the assertion budget. */
|
|
326
|
+
function createBrowserExpectation(deps, negated = false) {
|
|
311
327
|
const poll = async (api, label, condition, observed, timeout) => {
|
|
312
328
|
await pollCondition({
|
|
313
329
|
deadline: deps.deadlineFor(timeout),
|
|
@@ -319,7 +335,7 @@ function createWebExpectation(deps, negated = false) {
|
|
|
319
335
|
};
|
|
320
336
|
return {
|
|
321
337
|
get not() {
|
|
322
|
-
return
|
|
338
|
+
return createBrowserExpectation(deps, !negated);
|
|
323
339
|
},
|
|
324
340
|
toHaveURL(expected, options) {
|
|
325
341
|
const label = typeof expected === 'string' ? expected : String(expected);
|
|
@@ -379,4 +395,4 @@ function frameScreen(context, frames) {
|
|
|
379
395
|
frameLocator: (selector) => frameScreen(context, [...frames, requireSelector('frameLocator', selector)]),
|
|
380
396
|
});
|
|
381
397
|
}
|
|
382
|
-
//# sourceMappingURL=
|
|
398
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Downloads from a browser on another machine. Playwright asks a CDP-attached
|
|
3
|
+
* browser to save each file under a directory of the runner's, which a
|
|
4
|
+
* remote browser does not have, so the download is canceled. A provider
|
|
5
|
+
* that serves downloads names a directory on the browser's own disk; the
|
|
6
|
+
* browser saves there, and the provider reads each finished file back.
|
|
7
|
+
*/
|
|
8
|
+
import type { Download, Page } from 'playwright';
|
|
9
|
+
import type { LeaseDownloads } from './provider.ts';
|
|
10
|
+
/**
|
|
11
|
+
* Has the browser behind `page` save the downloads of the page's context
|
|
12
|
+
* under `dir` on its own disk, each file named by its download id, with the
|
|
13
|
+
* download events Playwright's waiter reads left on.
|
|
14
|
+
*/
|
|
15
|
+
export declare function saveDownloadsTo(page: Page, dir: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Copies a finished download off the browser's disk to `file` through the
|
|
18
|
+
* provider: it lies under `dir`, named by its download id, as
|
|
19
|
+
* `saveDownloadsTo` had the browser name it. A download that failed or was
|
|
20
|
+
* canceled fails with the browser's reason.
|
|
21
|
+
*/
|
|
22
|
+
export declare function saveFromBrowser(download: Download, downloads: LeaseDownloads, file: string, signal: AbortSignal): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Saves a download Playwright received for the runner to `file`. When the
|
|
25
|
+
* file may have stayed on another machine, `unserved` says why, and a failed
|
|
26
|
+
* save names it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function saveLocally(download: Download, file: string, unserved: string | undefined): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=downloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloads.d.ts","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAuB,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrI;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/G"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Downloads from a browser on another machine. Playwright asks a CDP-attached
|
|
3
|
+
* browser to save each file under a directory of the runner's, which a
|
|
4
|
+
* remote browser does not have, so the download is canceled. A provider
|
|
5
|
+
* that serves downloads names a directory on the browser's own disk; the
|
|
6
|
+
* browser saves there, and the provider reads each finished file back.
|
|
7
|
+
*/
|
|
8
|
+
import { writeFile } from 'node:fs/promises';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { EngineError } from 'e2e/engine';
|
|
11
|
+
import { invalidState, message } from './support.js';
|
|
12
|
+
/** One browser-level CDP session per connection: a download behavior lives as long as the session that set it. */
|
|
13
|
+
const browserSessions = new WeakMap();
|
|
14
|
+
/**
|
|
15
|
+
* Has the browser behind `page` save the downloads of the page's context
|
|
16
|
+
* under `dir` on its own disk, each file named by its download id, with the
|
|
17
|
+
* download events Playwright's waiter reads left on.
|
|
18
|
+
*/
|
|
19
|
+
export async function saveDownloadsTo(page, dir) {
|
|
20
|
+
const context = page.context();
|
|
21
|
+
const browser = context.browser();
|
|
22
|
+
if (browser === null)
|
|
23
|
+
throw invalidState('the page has no browser to set a download directory on');
|
|
24
|
+
const pageSession = await context.newCDPSession(page);
|
|
25
|
+
let browserContextId;
|
|
26
|
+
try {
|
|
27
|
+
({ targetInfo: { browserContextId } } = await pageSession.send('Target.getTargetInfo'));
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await pageSession.detach().catch(() => undefined);
|
|
31
|
+
}
|
|
32
|
+
let session = browserSessions.get(browser);
|
|
33
|
+
if (session === undefined) {
|
|
34
|
+
session = browser.newBrowserCDPSession();
|
|
35
|
+
browserSessions.set(browser, session);
|
|
36
|
+
session.catch(() => browserSessions.delete(browser));
|
|
37
|
+
}
|
|
38
|
+
await (await session).send('Browser.setDownloadBehavior', {
|
|
39
|
+
behavior: 'allowAndName',
|
|
40
|
+
downloadPath: dir,
|
|
41
|
+
eventsEnabled: true,
|
|
42
|
+
...(browserContextId === undefined ? {} : { browserContextId }),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Copies a finished download off the browser's disk to `file` through the
|
|
47
|
+
* provider: it lies under `dir`, named by its download id, as
|
|
48
|
+
* `saveDownloadsTo` had the browser name it. A download that failed or was
|
|
49
|
+
* canceled fails with the browser's reason.
|
|
50
|
+
*/
|
|
51
|
+
export async function saveFromBrowser(download, downloads, file, signal) {
|
|
52
|
+
const failure = await download.failure();
|
|
53
|
+
if (failure !== null)
|
|
54
|
+
throw new EngineError('ENGINE_FAILURE', `download failed: ${failure}`, { retryable: false });
|
|
55
|
+
// Playwright names its own record of the file by the same download id.
|
|
56
|
+
const saved = path.posix.join(downloads.dir, path.basename(await download.path()));
|
|
57
|
+
await writeFile(file, await downloads.read(saved, signal));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Saves a download Playwright received for the runner to `file`. When the
|
|
61
|
+
* file may have stayed on another machine, `unserved` says why, and a failed
|
|
62
|
+
* save names it.
|
|
63
|
+
*/
|
|
64
|
+
export async function saveLocally(download, file, unserved) {
|
|
65
|
+
try {
|
|
66
|
+
await download.saveAs(file);
|
|
67
|
+
}
|
|
68
|
+
catch (cause) {
|
|
69
|
+
if (unserved === undefined)
|
|
70
|
+
throw cause;
|
|
71
|
+
throw new EngineError('ENGINE_FAILURE', `download failed: ${message(cause)}; ${unserved}`, { retryable: false, cause });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=downloads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloads.js","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The Playwright engine for e2e: a browser body built with the
|
|
3
3
|
* public `defineEngine`, validated by the same rules and graded by the same
|
|
4
4
|
* capabilities as any other engine. Core imports nothing from here; this
|
|
5
|
-
* package imports the contract from `e2e/engine` and contributes the `
|
|
5
|
+
* package imports the contract from `e2e/engine` and contributes the `browser`
|
|
6
6
|
* fixture the way a device engine contributes `device`.
|
|
7
7
|
*/
|
|
8
8
|
import type { BrowserContext, Page } from 'playwright';
|
|
@@ -13,7 +13,7 @@ import { type WebOptions } from './surface.ts';
|
|
|
13
13
|
* that replaces the toolset wholesale (spec chapter 16) and drives the page with
|
|
14
14
|
* its own Playwright tooling. Both accessors read the current attempt: the
|
|
15
15
|
* context exists from `startAttempt`, the page from the first `app.open()` or
|
|
16
|
-
* `
|
|
16
|
+
* `browser.goto()`, and either throws `INVALID_STATE` before that. The harness
|
|
17
17
|
* remains the notary for what it witnesses; a caller here acts out of band.
|
|
18
18
|
*/
|
|
19
19
|
export interface PlaywrightLiveSurface {
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AASlE;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC;CACxC;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS,CAIjF;AAED,wBAAgB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAsG1D"}
|
package/dist/engine.js
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
* The Playwright engine for e2e: a browser body built with the
|
|
3
3
|
* public `defineEngine`, validated by the same rules and graded by the same
|
|
4
4
|
* capabilities as any other engine. Core imports nothing from here; this
|
|
5
|
-
* package imports the contract from `e2e/engine` and contributes the `
|
|
5
|
+
* package imports the contract from `e2e/engine` and contributes the `browser`
|
|
6
6
|
* fixture the way a device engine contributes `device`.
|
|
7
7
|
*/
|
|
8
|
-
import { ConfigurationError, defineEngine, LOCATOR_ACTION_KINDS, POINTER_ACTION_KINDS,
|
|
8
|
+
import { ConfigurationError, defineEngine, isSecret, LOCATOR_ACTION_KINDS, POINTER_ACTION_KINDS, rejectUnknownKeys, } from 'e2e/engine';
|
|
9
9
|
import { createRequire } from 'node:module';
|
|
10
10
|
import { asBrowserProvider } from './provider.js';
|
|
11
11
|
import { PlaywrightSurface } from './surface.js';
|
|
12
|
-
import {
|
|
12
|
+
import { createBrowserFixture } from './browser.js';
|
|
13
|
+
/** App fields only a device target reads. */
|
|
14
|
+
const NATIVE_APP_KEYS = ['bundleId', 'appPath', 'launchArguments', 'permissions'];
|
|
13
15
|
/** Creates one Playwright engine: one browser per worker, one context per attempt. */
|
|
14
16
|
const surfaces = new WeakMap();
|
|
15
17
|
/** The live surface of a handle this module created, or undefined for any other engine. */
|
|
@@ -20,31 +22,41 @@ export function surfaceOf(engine) {
|
|
|
20
22
|
return { page: () => surface.requirePage(), context: () => surface.requireContext() };
|
|
21
23
|
}
|
|
22
24
|
export function web(options = {}) {
|
|
25
|
+
if ('allowedOrigins' in options) {
|
|
26
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ allowedOrigins }) is gone: navigation and secret fills are not gated by origin; remove the option');
|
|
27
|
+
}
|
|
28
|
+
if ('video' in options) {
|
|
29
|
+
throw new ConfigurationError('INVALID_CONFIG', "web({ video }) was renamed web({ screencast }): it takes { size?, quality? } for the page screencast; which attempts record is the video mode on the config or a target");
|
|
30
|
+
}
|
|
31
|
+
rejectUnknownKeys('web()', options, WEB_OPTION_KEYS);
|
|
23
32
|
const provider = typeof options.browser === 'object' && options.browser !== null ? asBrowserProvider(options.browser) : undefined;
|
|
24
33
|
if (provider !== undefined && options.connect !== undefined) {
|
|
25
34
|
throw new ConfigurationError('INVALID_CONFIG', `web({ browser, connect }) names two browser sources; browser provider "${provider.name}" leases its own browsers, so remove connect`);
|
|
26
35
|
}
|
|
36
|
+
if (isRecord(options.connect))
|
|
37
|
+
rejectUnknownKeys('web({ connect })', options.connect, ['cdpEndpoint', 'reconnectEndpoint']);
|
|
27
38
|
if (options.connect !== undefined && typeof options.browser === 'string' && options.browser !== 'chromium') {
|
|
28
39
|
throw new ConfigurationError('INVALID_CONFIG', `web({ connect }) requires the chromium browser; CDP attach is chromium-only, got "${options.browser}"`);
|
|
29
40
|
}
|
|
30
|
-
if ('allowedOrigins' in options) {
|
|
31
|
-
throw new ConfigurationError('INVALID_CONFIG', 'web({ allowedOrigins }) is gone: navigation and secret fills are not gated by origin; remove the option');
|
|
32
|
-
}
|
|
33
41
|
if (options.headers !== undefined)
|
|
34
42
|
validateHeaders(options.headers);
|
|
35
43
|
if (options.basicAuth !== undefined)
|
|
36
44
|
validateBasicAuth(options.basicAuth);
|
|
37
45
|
if (options.testIdAttribute !== undefined)
|
|
38
46
|
validateTestIdAttribute(options.testIdAttribute);
|
|
47
|
+
if (options.userAgent !== undefined)
|
|
48
|
+
validateUserAgent(options.userAgent, options.headers);
|
|
49
|
+
if (options.screencast !== undefined)
|
|
50
|
+
validateScreencast(options.screencast);
|
|
39
51
|
const reconnecting = options.connect?.reconnectEndpoint !== undefined;
|
|
40
52
|
if (reconnecting && typeof options.connect?.reconnectEndpoint !== 'function') {
|
|
41
53
|
throw new ConfigurationError('INVALID_CONFIG', 'connect.reconnectEndpoint must be a function');
|
|
42
54
|
}
|
|
43
55
|
// A per-attempt lease rides the same persistent context as `reconnectEndpoint`, with the same limits.
|
|
44
56
|
const recoverable = reconnecting || provider?.scope === 'attempt';
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
throw new ConfigurationError('INVALID_CONFIG', `${mode} uses a persistent context; headers and
|
|
57
|
+
const mode = provider === undefined ? 'connect.reconnectEndpoint' : `browser provider "${provider.name}" with scope "attempt"`;
|
|
58
|
+
if (recoverable && (options.headers !== undefined || options.basicAuth !== undefined || options.userAgent !== undefined)) {
|
|
59
|
+
throw new ConfigurationError('INVALID_CONFIG', `${mode} uses a persistent context; headers, basicAuth, and userAgent require a newly created context`);
|
|
48
60
|
}
|
|
49
61
|
const surface = new PlaywrightSurface(options);
|
|
50
62
|
const handle = defineEngine({
|
|
@@ -64,6 +76,8 @@ export function web(options = {}) {
|
|
|
64
76
|
perform: (ref, action, operation) => surface.perform(ref, action, operation),
|
|
65
77
|
// A browser honors every action kind of the contract; `actions.ts` dispatches each.
|
|
66
78
|
actions: LOCATOR_ACTION_KINDS,
|
|
79
|
+
// Playwright holds each modifier for the click.
|
|
80
|
+
tapModifiers: true,
|
|
67
81
|
// A page takes every pointer action of the contract at a bare point too.
|
|
68
82
|
performAt: (point, action, operation) => surface.performAt(point, action, operation),
|
|
69
83
|
pointerActions: POINTER_ACTION_KINDS,
|
|
@@ -71,12 +85,13 @@ export function web(options = {}) {
|
|
|
71
85
|
type: (text, keyboardOptions, operation) => surface.typeText(text, keyboardOptions, operation),
|
|
72
86
|
press: (key, operation) => surface.pressKey(key, operation),
|
|
73
87
|
},
|
|
74
|
-
|
|
88
|
+
validateApp,
|
|
89
|
+
...(isSecret(options.basicAuth?.password) ? { secrets: [options.basicAuth.password] } : {}),
|
|
75
90
|
session: {
|
|
76
91
|
open: (url, operation) => surface.open(url, operation),
|
|
77
92
|
back: (operation) => surface.back(operation),
|
|
78
93
|
restart: (operation) => surface.restart(operation),
|
|
79
|
-
|
|
94
|
+
reset: recoverable ? () => Promise.reject(persistentContextLimit('app.clearState()', mode, provider !== undefined)) : (operation) => surface.reset(operation),
|
|
80
95
|
},
|
|
81
96
|
artifacts: {
|
|
82
97
|
screenshot: (label, operation) => surface.screenshot(label, operation),
|
|
@@ -94,12 +109,32 @@ export function web(options = {}) {
|
|
|
94
109
|
},
|
|
95
110
|
}),
|
|
96
111
|
fixtures: {
|
|
97
|
-
|
|
112
|
+
browser: (context) => createBrowserFixture(surface, context),
|
|
98
113
|
},
|
|
99
114
|
});
|
|
100
115
|
surfaces.set(handle, surface);
|
|
101
116
|
return handle;
|
|
102
117
|
}
|
|
118
|
+
/** Every option `web()` takes, kept equal to `WebOptions` by the compiler. */
|
|
119
|
+
const WEB_OPTION_KEYS = Object.keys({
|
|
120
|
+
browser: true,
|
|
121
|
+
viewport: true,
|
|
122
|
+
screencast: true,
|
|
123
|
+
connect: true,
|
|
124
|
+
headers: true,
|
|
125
|
+
basicAuth: true,
|
|
126
|
+
testIdAttribute: true,
|
|
127
|
+
userAgent: true,
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* What a persistent context rules out, named with its cause: `what` replaces
|
|
131
|
+
* the browser context, which `mode` never does. A per-attempt lease starts
|
|
132
|
+
* every attempt on a fresh browser already, and worker scope has the reset.
|
|
133
|
+
*/
|
|
134
|
+
function persistentContextLimit(what, mode, leased) {
|
|
135
|
+
const remedy = leased ? '; every attempt already starts on a fresh browser, and scope "worker" can clear one mid-test' : '';
|
|
136
|
+
return new ConfigurationError('UNSUPPORTED_CAPABILITY', `${what} is unavailable with ${mode}: it replaces the browser context, and the attempt rides one persistent context${remedy}`);
|
|
137
|
+
}
|
|
103
138
|
/** An HTTP header field name: one or more `token` characters (RFC 9110). */
|
|
104
139
|
const HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
|
|
105
140
|
/** A control character no HTTP field value may carry; a horizontal tab is the one the grammar allows. */
|
|
@@ -136,6 +171,7 @@ function validateBasicAuth(basicAuth) {
|
|
|
136
171
|
if (!isRecord(basicAuth)) {
|
|
137
172
|
throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) must be an object with username and password');
|
|
138
173
|
}
|
|
174
|
+
rejectUnknownKeys('web({ basicAuth })', basicAuth, ['username', 'password']);
|
|
139
175
|
const { username, password } = basicAuth;
|
|
140
176
|
if (typeof username !== 'string' || username === '') {
|
|
141
177
|
throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a non-empty username string');
|
|
@@ -143,8 +179,24 @@ function validateBasicAuth(basicAuth) {
|
|
|
143
179
|
if (username.includes(':')) {
|
|
144
180
|
throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) username must not contain ":"');
|
|
145
181
|
}
|
|
146
|
-
if (typeof password !== 'string') {
|
|
147
|
-
throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a password string');
|
|
182
|
+
if (typeof password !== 'string' && !isSecret(password)) {
|
|
183
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a password string or secrets.get(name)');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Refuses a user agent the browser could not send (not a string, empty, or
|
|
188
|
+
* carrying a control character) and one a `user-agent` header would override
|
|
189
|
+
* on the app's site while `navigator.userAgent` kept reporting it.
|
|
190
|
+
*/
|
|
191
|
+
function validateUserAgent(userAgent, headers) {
|
|
192
|
+
if (typeof userAgent !== 'string' || userAgent === '') {
|
|
193
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) must be a non-empty string');
|
|
194
|
+
}
|
|
195
|
+
if (FIELD_VALUE_CONTROL.test(userAgent)) {
|
|
196
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) must not contain a control character');
|
|
197
|
+
}
|
|
198
|
+
if (headers !== undefined && Object.keys(headers).some((name) => name.toLowerCase() === 'user-agent')) {
|
|
199
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) and a user-agent header in web({ headers }) conflict; set userAgent only');
|
|
148
200
|
}
|
|
149
201
|
}
|
|
150
202
|
/**
|
|
@@ -153,16 +205,59 @@ function validateBasicAuth(basicAuth) {
|
|
|
153
205
|
* and every `testId` query would fail silently.
|
|
154
206
|
*/
|
|
155
207
|
const ATTRIBUTE_NAME = /^[A-Za-z_:][A-Za-z0-9_:.-]*$/;
|
|
208
|
+
/** `web({ screencast })`: a whole-pixel frame size and a 0-100 JPEG quality, each optional. */
|
|
209
|
+
function validateScreencast(screencast) {
|
|
210
|
+
if (!isPlainObject(screencast)) {
|
|
211
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast }) must be a plain object: { size?, quality? }');
|
|
212
|
+
}
|
|
213
|
+
for (const key of Object.keys(screencast)) {
|
|
214
|
+
if (key !== 'size' && key !== 'quality') {
|
|
215
|
+
throw new ConfigurationError('INVALID_CONFIG', `web({ screencast }) has unknown key "${key}"; it is { size?, quality? }, and which attempts record is the config's video`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const { size, quality } = screencast;
|
|
219
|
+
if (size !== undefined) {
|
|
220
|
+
const fields = isPlainObject(size) ? size : {};
|
|
221
|
+
const { width, height } = fields;
|
|
222
|
+
const unknownKey = Object.keys(fields).find((key) => key !== 'width' && key !== 'height');
|
|
223
|
+
if (unknownKey !== undefined) {
|
|
224
|
+
throw new ConfigurationError('INVALID_CONFIG', `web({ screencast: { size } }) has unknown key "${unknownKey}"; it is { width, height }`);
|
|
225
|
+
}
|
|
226
|
+
if (!Number.isInteger(width) || !Number.isInteger(height) || width < 1 || height < 1) {
|
|
227
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast: { size } }) must be { width, height } in whole pixels, each at least 1');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (quality !== undefined && (!Number.isInteger(quality) || quality < 0 || quality > 100)) {
|
|
231
|
+
throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast: { quality } }) must be an integer from 0 through 100');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** An object literal (or `Object.create(null)`): not an array, a class instance, or a primitive. */
|
|
235
|
+
function isPlainObject(value) {
|
|
236
|
+
if (typeof value !== 'object' || value === null)
|
|
237
|
+
return false;
|
|
238
|
+
const prototype = Object.getPrototypeOf(value);
|
|
239
|
+
return prototype === Object.prototype || prototype === null;
|
|
240
|
+
}
|
|
156
241
|
/** Refuses a test-id attribute no element could carry, at config load. */
|
|
157
242
|
function validateTestIdAttribute(attribute) {
|
|
158
243
|
if (typeof attribute !== 'string' || !ATTRIBUTE_NAME.test(attribute)) {
|
|
159
244
|
throw new ConfigurationError('INVALID_CONFIG', `web({ testIdAttribute }) must be an attribute name such as "data-testid", got ${JSON.stringify(attribute)}`);
|
|
160
245
|
}
|
|
161
246
|
}
|
|
162
|
-
/**
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
247
|
+
/**
|
|
248
|
+
* A browser target opens a URL: without `app.url` there is nothing for
|
|
249
|
+
* `app.open()` to open, and the fields that describe an installed device app
|
|
250
|
+
* have nothing to act on here.
|
|
251
|
+
*/
|
|
252
|
+
function validateApp(app, { targetName }) {
|
|
253
|
+
for (const key of NATIVE_APP_KEYS) {
|
|
254
|
+
if (app[key] !== undefined) {
|
|
255
|
+
throw new ConfigurationError('INVALID_CONFIG', `target "${targetName}" declares app.${key}, which describes an installed device app; a web() target opens app.url`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (app.url === undefined) {
|
|
259
|
+
throw new ConfigurationError('INVALID_CONFIG', `target "${targetName}" needs app.url: a web() target opens the app at a URL, targets: [{ engine: web(), app: { url: 'http://localhost:3000' } }]`);
|
|
260
|
+
}
|
|
166
261
|
}
|
|
167
262
|
/** This package's published version, read through require resolution. */
|
|
168
263
|
function ownVersion() {
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-semantics.d.ts","sourceRoot":"","sources":["../../src/in-page/read-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAgC,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,YAAY,WACpD,OAAO,WACP;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KAC5E,cAAc,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"read-semantics.d.ts","sourceRoot":"","sources":["../../src/in-page/read-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAgC,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,YAAY,WACpD,OAAO,WACP;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KAC5E,cAAc,CAAC,IAAI,CAquCrB,CAAC"}
|