@e2e-dev/mobile 0.8.0-canary-20260929180659 → 0.8.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 +26 -15
- package/dist/.build.json +1 -1
- package/dist/bindings.d.ts +5 -6
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +5 -5
- package/dist/bindings.js.map +1 -1
- package/dist/device.d.ts +5 -5
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +30 -18
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +14 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +0 -7
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +0 -11
- package/dist/links.js.map +1 -1
- package/dist/nodes.d.ts +1 -1
- package/dist/nodes.d.ts.map +1 -1
- package/dist/options.d.ts +13 -56
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +14 -1
- package/dist/options.js.map +1 -1
- package/dist/pool.js +2 -2
- package/dist/pool.js.map +1 -1
- package/dist/provider.d.ts +11 -5
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +7 -2
- package/dist/provider.js.map +1 -1
- package/dist/surface.d.ts +31 -10
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +92 -23
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +2 -2
- package/dist/tools.js +2 -2
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -27,13 +27,13 @@ import { mobile } from '@e2e-dev/mobile';
|
|
|
27
27
|
import { mobileTools } from '@e2e-dev/mobile/tools';
|
|
28
28
|
import { gateway } from 'ai';
|
|
29
29
|
|
|
30
|
-
const iphone = mobile({ platform: 'ios'
|
|
31
|
-
const pixel = mobile({ platform: 'android'
|
|
30
|
+
const iphone = mobile({ platform: 'ios' });
|
|
31
|
+
const pixel = mobile({ platform: 'android' });
|
|
32
32
|
|
|
33
33
|
export default {
|
|
34
34
|
targets: [
|
|
35
|
-
{ name: 'iphone', engine: iphone },
|
|
36
|
-
{ name: 'pixel', engine: pixel },
|
|
35
|
+
{ name: 'iphone', engine: iphone, app: { bundleId: 'Settings' } },
|
|
36
|
+
{ name: 'pixel', engine: pixel, app: { bundleId: 'com.android.settings' } },
|
|
37
37
|
],
|
|
38
38
|
workers: 1,
|
|
39
39
|
agents: {
|
|
@@ -50,24 +50,33 @@ targets unchanged. Only a check that names a platform label (`General` on iOS,
|
|
|
50
50
|
`Network & internet` on Android) needs `platforms: ['ios']` or
|
|
51
51
|
`platforms: ['android']` on the test.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
The app under test is the target's `app`; the engine only drives it. A
|
|
54
|
+
device target needs `bundleId` or `appPath`:
|
|
55
|
+
|
|
56
|
+
| Key | Meaning |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `bundleId` | Bundle id, package, or display name `app.open()`, `app.restart()`, and `app.clearState()` launch fresh; an attempt launches nothing on its own. |
|
|
59
|
+
| `appPath` | An iOS `.app` bundle or Android `.apk`, resolved against the project root. The engine does not install it: the suite calls `device.installApp()` (with no path, this build) once per device, unless a device provider already installed it. Without `bundleId`, the installed bundle id or package is the app `app.open()` launches. |
|
|
60
|
+
| `launchArguments` | Arguments every fresh launch of the pinned app carries (`app.open()`, `app.restart()`, `app.clearState()`): the process arguments on iOS, `am start` arguments on Android. The warm-up passes none. |
|
|
61
|
+
| `permissions` | Permissions the pinned app holds on every fresh launch, `{ camera: 'grant', location: 'deny', notifications: 'reset' }`, set before the app starts and put back after `app.clearState()` reset them. |
|
|
62
|
+
|
|
63
|
+
`app.url` is not supported on a device target yet, and `mobile({ app })` and
|
|
64
|
+
the other old app options are `INVALID_CONFIG` naming their key under `app`.
|
|
65
|
+
|
|
66
|
+
`mobile()` options:
|
|
54
67
|
|
|
55
68
|
| Option | Meaning |
|
|
56
69
|
| --- | --- |
|
|
57
70
|
| `platform` | `'ios'` or `'android'`. |
|
|
58
|
-
| `app` | Bundle id, package, or display name `app.open()` launches fresh; an attempt launches nothing on its own. Also unlocks `app.restart()` and `app.clearState()`. |
|
|
59
|
-
| `appPath` | An iOS `.app` bundle or Android `.apk` installed once per worker before the first attempt, resolved against the project root. Without `app`, the installed bundle id or package is the app `app.open()` launches. |
|
|
60
71
|
| `device` | Simulator or emulator name or UDID. A list is a pool: one worker per entry, worker slot `n` driving the `n`th. Omitted, every booted device of the platform is the pool, as many as the run has slots. |
|
|
61
72
|
| `session` | agent-device session name, before the worker slot: slot `n` drives its device under `<session>-<n>`, `e2e-<target name>-<n>` by default. One run per session at a time. |
|
|
62
73
|
| `snapshot` | `'full'` (default, includes static text) or `'interactive'` (actionable nodes only). |
|
|
63
74
|
| `settle` | For agent actions: milliseconds the UI must hold still after an action before the agent observes again, default `150`; `false` skips the wait. A test's own steps never settle; `expect` verifies their outcome. |
|
|
64
75
|
| `transition` | For a test's steps: milliseconds a control that appeared or moved with the last action gets to finish arriving before it is acted on, default `500`. Controls already in place before the action are acted on at once. |
|
|
65
|
-
| `launchArguments` | Arguments every fresh launch of the pinned app carries (`app.open()`, `app.restart()`, `app.clearState()`): the process arguments on iOS, `am start` arguments on Android. The warm-up passes none. |
|
|
66
|
-
| `permissions` | Permissions the pinned app holds on every fresh launch, `{ camera: 'grant', location: 'deny', notifications: 'reset' }`, set before the app starts and put back after `app.clearState()` reset them. |
|
|
67
76
|
|
|
68
|
-
Every optional value also accepts `undefined`, so a config passes
|
|
69
|
-
`device: process.env.E2E_DEVICE`
|
|
70
|
-
|
|
77
|
+
Every optional `mobile()` value also accepts `undefined`, so a config passes
|
|
78
|
+
`device: process.env.E2E_DEVICE` straight through, with no conditional
|
|
79
|
+
spread.
|
|
71
80
|
|
|
72
81
|
## What the engine declares
|
|
73
82
|
|
|
@@ -91,6 +100,7 @@ straight through, with no conditional spread.
|
|
|
91
100
|
every secure field are painted black before the file is kept, and a
|
|
92
101
|
screenshot that cannot be redacted is not written. No `state` capability: a
|
|
93
102
|
simulator has no portable session snapshot.
|
|
103
|
+
- **App kind**: a target with `app.bundleId` or `app.appPath` is a `native-app` target, so a portable suite can `requires: ['native-app']`.
|
|
94
104
|
|
|
95
105
|
## Replay cache
|
|
96
106
|
|
|
@@ -101,7 +111,7 @@ toolbar on Android. The app identity is part of the location, so two apps with
|
|
|
101
111
|
a "General" screen never share an anchor. A step recorded on
|
|
102
112
|
`com.apple.Preferences / General` replays only when that app is on that
|
|
103
113
|
screen again, and a flow that stays within tap, type, and scroll replays with
|
|
104
|
-
zero model calls.
|
|
114
|
+
zero model calls. Declare `app.bundleId` and call `app.open()` first, so steps start on
|
|
105
115
|
the same screen, and
|
|
106
116
|
prefer the grammar over the `open_app` tool inside a step: a tool call is a
|
|
107
117
|
replay gap.
|
|
@@ -119,7 +129,7 @@ test('shows the version offline in dark mode', async ({ agent, device, screen })
|
|
|
119
129
|
await device.setAppearance('dark');
|
|
120
130
|
await device.setNetwork('offline');
|
|
121
131
|
await agent.act('go to General, then About');
|
|
122
|
-
await expect(screen.getByRole('button',
|
|
132
|
+
await expect(screen.getByRole('button', /^iOS Version/)).toBeVisible();
|
|
123
133
|
await expect(device.locator('role=NavigationBar id=About')).toBeVisible();
|
|
124
134
|
});
|
|
125
135
|
```
|
|
@@ -131,7 +141,8 @@ Methods: `setNetwork`, `setAirplaneMode`, `setPermission`, `setLocation`,
|
|
|
131
141
|
`setClipboard`, and the `locator` accessor.
|
|
132
142
|
|
|
133
143
|
`installApp(appPath, { app, reinstall })` puts a build on the device from a
|
|
134
|
-
test, for upgrade and fresh-install paths the `appPath`
|
|
144
|
+
test, for upgrade and fresh-install paths the target's `app.appPath` cannot
|
|
145
|
+
express.
|
|
135
146
|
A plain install replaces the binary and keeps its data; `reinstall: true`
|
|
136
147
|
removes the app named by `app` (default: the pinned app) first. It resolves to
|
|
137
148
|
the bundle id or package to `openApp` the build by. `openApp` takes an app id,
|
package/dist/.build.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.8.0
|
|
1
|
+
{"version":"0.8.0"}
|
package/dist/bindings.d.ts
CHANGED
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
* reads one shape through one environment variable, whatever produced it.
|
|
7
7
|
*/
|
|
8
8
|
import type { createAgentDeviceClient } from 'agent-device';
|
|
9
|
-
import { type EngineFinishInfo, type EnginePrepareInfo } from 'e2e/engine';
|
|
10
|
-
import type { MobileOptions } from './options.ts';
|
|
9
|
+
import { type EngineAppInfo, type EngineFinishInfo, type EnginePrepareInfo } from 'e2e/engine';
|
|
11
10
|
type AgentDeviceClientConfig = NonNullable<Parameters<typeof createAgentDeviceClient>[0]>;
|
|
12
11
|
/** An agent-device daemon other than the local one. */
|
|
13
12
|
export interface DeviceDaemon {
|
|
@@ -71,11 +70,11 @@ export interface DeviceSource {
|
|
|
71
70
|
export declare function deviceLabel(binding: Pick<SlotBinding, 'device' | 'deviceId'> | undefined): string | undefined;
|
|
72
71
|
/**
|
|
73
72
|
* The app a slot's `app.open()` launches, and its warm-up opens once: the
|
|
74
|
-
* `
|
|
75
|
-
* `device.installApp()` (or a device provider) has. `undefined` with
|
|
76
|
-
* nobody has installed and no `
|
|
73
|
+
* target's `bundleId`, else the app the build `appPath` installed, once the
|
|
74
|
+
* suite's `device.installApp()` (or a device provider) has. `undefined` with
|
|
75
|
+
* a build nobody has installed and no `bundleId`.
|
|
77
76
|
*/
|
|
78
|
-
export declare function pinnedApp(
|
|
77
|
+
export declare function pinnedApp(app: Pick<EngineAppInfo, 'bundleId'>, installedApp: string | undefined): string | undefined;
|
|
79
78
|
/**
|
|
80
79
|
* The environment variable a target's bindings travel to the workers in: the
|
|
81
80
|
* name made environment-safe for reading, plus a digest of the exact name so
|
package/dist/bindings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAoB,KAAK,
|
|
1
|
+
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAoB,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjH,KAAK,uBAAuB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1F,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,CAAC;AAEpI,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAEtE,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,qGAAqG;IACrG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACjD,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IACvD,yFAAyF;IACzF,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7G;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEpH;AASD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAuBvE;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,WAAW,EAAE,GAAG,SAAS,CAS1F;AAMD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAYlE"}
|
package/dist/bindings.js
CHANGED
|
@@ -13,12 +13,12 @@ export function deviceLabel(binding) {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* The app a slot's `app.open()` launches, and its warm-up opens once: the
|
|
16
|
-
* `
|
|
17
|
-
* `device.installApp()` (or a device provider) has. `undefined` with
|
|
18
|
-
* nobody has installed and no `
|
|
16
|
+
* target's `bundleId`, else the app the build `appPath` installed, once the
|
|
17
|
+
* suite's `device.installApp()` (or a device provider) has. `undefined` with
|
|
18
|
+
* a build nobody has installed and no `bundleId`.
|
|
19
19
|
*/
|
|
20
|
-
export function pinnedApp(
|
|
21
|
-
return
|
|
20
|
+
export function pinnedApp(app, installedApp) {
|
|
21
|
+
return app.bundleId ?? installedApp;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* The most the serialized bindings of one target may occupy in a worker's
|
package/dist/bindings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
|
package/dist/device.d.ts
CHANGED
|
@@ -50,20 +50,20 @@ export interface Device {
|
|
|
50
50
|
enrollBiometrics(sensor: 'faceid' | 'touchid', enrolled: boolean): Promise<void>;
|
|
51
51
|
/**
|
|
52
52
|
* Installs a build (an iOS `.app` bundle or an Android `.apk`, resolved
|
|
53
|
-
* against the project root) on the device; without a path, the
|
|
54
|
-
* `appPath`. The engine installs nothing on its own, so a suite that runs
|
|
53
|
+
* against the project root) on the device; without a path, the target's
|
|
54
|
+
* `app.appPath`. The engine installs nothing on its own, so a suite that runs
|
|
55
55
|
* against a build calls this once per device, in a fixture or a test.
|
|
56
56
|
* `reinstall: true` removes the app first so it starts with no data; a
|
|
57
57
|
* plain install replaces the binary and keeps its data. Resolves to the
|
|
58
58
|
* identity to `openApp` it by, which becomes the app `app.open()` launches
|
|
59
|
-
* when the
|
|
59
|
+
* when the target's build is installed and no `app.bundleId` is pinned.
|
|
60
60
|
*/
|
|
61
61
|
installApp(appPath?: string, options?: InstallAppOptions): Promise<InstalledApp>;
|
|
62
62
|
/**
|
|
63
63
|
* Brings an app to the foreground; `relaunch` restarts it fresh.
|
|
64
64
|
* `launchArguments` and `permissions` apply to this launch alone; the
|
|
65
|
-
*
|
|
66
|
-
* to no foreground-only open.
|
|
65
|
+
* target's `app.launchArguments` and `app.permissions` apply to a
|
|
66
|
+
* `relaunch` of the pinned app, and to no foreground-only open.
|
|
67
67
|
*/
|
|
68
68
|
openApp(app: string, options?: OpenAppOptions): Promise<void>;
|
|
69
69
|
/**
|
package/dist/device.js
CHANGED
|
@@ -99,7 +99,7 @@ export function createDeviceFixture(surface, context) {
|
|
|
99
99
|
setOrientation: { ...action, label: (orientation) => orientation },
|
|
100
100
|
setBiometrics: action,
|
|
101
101
|
enrollBiometrics: action,
|
|
102
|
-
installApp: { ...action, label: (appPath) => appPath ?? surface.
|
|
102
|
+
installApp: { ...action, label: (appPath) => appPath ?? surface.appPath ?? 'appPath' },
|
|
103
103
|
openApp: { ...action, label: (app) => linkLabel(app) },
|
|
104
104
|
openLink: { ...action, label: (url) => linkLabel(url) },
|
|
105
105
|
closeApp: action,
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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
5
|
* package imports the contract from `e2e/engine` and contributes the
|
|
6
|
-
* `device` fixture the way the browser engine contributes `
|
|
6
|
+
* `device` fixture the way the browser engine contributes `browser`.
|
|
7
7
|
*/
|
|
8
8
|
import { type EngineHandle } from 'e2e/engine';
|
|
9
9
|
import type { MobileOptions } from './options.ts';
|
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;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAA6F,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1I,OAAO,KAAK,EAAiB,aAAa,EAAkB,MAAM,cAAc,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAqB,MAAM,cAAc,CAAC;AAIrE,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CA4CrE;AAED,wHAAwH;AACxH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAW3D;AAqCD,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAE9E"}
|
package/dist/engine.js
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
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
5
|
* package imports the contract from `e2e/engine` and contributes the
|
|
6
|
-
* `device` fixture the way the browser engine contributes `
|
|
6
|
+
* `device` fixture the way the browser engine contributes `browser`.
|
|
7
7
|
*/
|
|
8
8
|
import { createRequire } from 'node:module';
|
|
9
9
|
import { createAgentDeviceClient } from 'agent-device';
|
|
10
|
-
import { defineEngine, obj } from 'e2e/engine';
|
|
10
|
+
import { ConfigurationError, defineEngine, obj } from 'e2e/engine';
|
|
11
11
|
import { createDeviceFixture } from './device.js';
|
|
12
|
+
import { isLink } from './links.js';
|
|
12
13
|
import { DEVICE_ACTIONS, DEVICE_POINTER_ACTIONS } from './actions.js';
|
|
13
|
-
import { AgentDeviceSurface } from './surface.js';
|
|
14
|
+
import { AgentDeviceSurface, assertPermissions } from './surface.js';
|
|
14
15
|
const surfaces = new WeakMap();
|
|
15
16
|
/** Assembles the manifest for one surface. Exported for tests that script the client. */
|
|
16
17
|
export function buildEngine(surface) {
|
|
@@ -37,18 +38,14 @@ export function buildEngine(surface) {
|
|
|
37
38
|
press: (key, operation) => surface.pressFocusedKey(key, operation),
|
|
38
39
|
dismiss: (operation) => surface.dismissKeyboard(operation.signal),
|
|
39
40
|
},
|
|
40
|
-
|
|
41
|
+
validateApp: (app, info) => validateApp(app, info, surface.options.platform),
|
|
41
42
|
// No `open`: a device app has no URL to open, so the runner serves
|
|
42
43
|
// `app.open()` with `restart`, the fresh launch of the pinned app, which
|
|
43
|
-
// is also the device's "recreate the context"
|
|
44
|
+
// is also the device's "recreate the context".
|
|
44
45
|
session: {
|
|
45
46
|
back: (operation) => surface.back(operation),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
restart: (operation) => surface.restart(operation),
|
|
49
|
-
reset: (operation) => surface.reset(operation),
|
|
50
|
-
}
|
|
51
|
-
: {}),
|
|
47
|
+
restart: (operation) => surface.restart(operation),
|
|
48
|
+
reset: (operation) => surface.reset(operation),
|
|
52
49
|
},
|
|
53
50
|
artifacts: {
|
|
54
51
|
screenshot: (label, operation) => surface.screenshot(label, operation),
|
|
@@ -72,15 +69,30 @@ export function mobile(options) {
|
|
|
72
69
|
}));
|
|
73
70
|
return buildEngine(new AgentDeviceSurface(options, factory));
|
|
74
71
|
}
|
|
72
|
+
/** What reaching this machine from the device will take once a device target can open a URL. */
|
|
73
|
+
const LOOPBACK_NOTES = {
|
|
74
|
+
ios: "a simulator shares this machine's loopback, and a hosted device cannot reach it at all",
|
|
75
|
+
android: "127.0.0.1 on an Android emulator is the emulator itself (this machine is 10.0.2.2), and a hosted device cannot reach this machine's loopback at all",
|
|
76
|
+
};
|
|
75
77
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
+
* A device target launches an installed app or a build: one of `bundleId`
|
|
79
|
+
* and `appPath` is required. A URL (a website in the device's browser) is
|
|
80
|
+
* not supported yet, and a link in `bundleId` is a mistake: a test opens one
|
|
81
|
+
* with `device.openLink`.
|
|
78
82
|
*/
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
83
|
+
function validateApp(app, { targetName }, platform) {
|
|
84
|
+
const where = `target "${targetName}"`;
|
|
85
|
+
if (app.url !== undefined) {
|
|
86
|
+
throw new ConfigurationError('INVALID_CONFIG', `${where} declares app.url, but a mobile() target cannot open a website in the device's browser yet; test the installed app with app.bundleId or app.appPath. When it lands, note that ${LOOPBACK_NOTES[platform] ?? LOOPBACK_NOTES.android}`);
|
|
87
|
+
}
|
|
88
|
+
if (app.bundleId === undefined && app.appPath === undefined) {
|
|
89
|
+
throw new ConfigurationError('INVALID_CONFIG', `${where} needs app.bundleId or app.appPath: a mobile() target launches an installed app, targets: [{ engine: mobile({ platform }), app: { bundleId: 'com.example.app' } }]`);
|
|
90
|
+
}
|
|
91
|
+
if (app.bundleId !== undefined && isLink(app.bundleId)) {
|
|
92
|
+
throw new ConfigurationError('INVALID_CONFIG', `${where} app.bundleId names an app by bundle id, package, or display name, not a link; a test opens a deep link or web link with device.openLink`);
|
|
93
|
+
}
|
|
94
|
+
if (app.permissions !== undefined)
|
|
95
|
+
assertPermissions(`${where} app.permissions`, app.permissions, 'INVALID_CONFIG');
|
|
84
96
|
}
|
|
85
97
|
/** The surface behind a handle this package created; undefined for any other engine. */
|
|
86
98
|
export function surfaceOf(engine) {
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@e2e-dev/mobile` public surface: the `mobile()` engine factory,
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* the `@e2e-dev/mobile/tools`
|
|
2
|
+
* `@e2e-dev/mobile` public surface: the `mobile()` engine factory, the
|
|
3
|
+
* `device` fixture types, and `test`, `describe`, and the hooks typed with
|
|
4
|
+
* that fixture. `expect`, `credentials`, and `secrets` still come from
|
|
5
|
+
* `e2e`; the agent-side tool pack lives on the `@e2e-dev/mobile/tools`
|
|
6
|
+
* subpath so this entry never loads the AI SDK.
|
|
6
7
|
*/
|
|
7
8
|
import type { Device } from './device.ts';
|
|
8
9
|
export { mobile } from './engine.ts';
|
|
@@ -18,4 +19,13 @@ export type { BiometricSensor, Device, DeviceOrientation, ForegroundApp } from '
|
|
|
18
19
|
export declare const test: import("e2e").TestAPI<import("e2e").TestFixtures & {
|
|
19
20
|
device: Device;
|
|
20
21
|
}>;
|
|
22
|
+
/** `describe` and the hooks, the same functions as `test.describe` and `test.beforeEach`, typed with the `device` fixture. */
|
|
23
|
+
export declare const describe: {
|
|
24
|
+
<Result>(title: string, body: import("e2e").SynchronousBody<Result>): void;
|
|
25
|
+
<Result>(title: string, options: import("e2e").DescribeOptions, body: import("e2e").SynchronousBody<Result>): void;
|
|
26
|
+
}, beforeEach: (fn: import("e2e").TestHookFn<import("e2e").TestFixtures & {
|
|
27
|
+
device: Device;
|
|
28
|
+
}>) => void, afterEach: (fn: import("e2e").TestHookFn<import("e2e").TestFixtures & {
|
|
29
|
+
device: Device;
|
|
30
|
+
}>) => void, beforeAll: (fn: import("e2e").SuiteHookFn) => void, afterAll: (fn: import("e2e").SuiteHookFn) => void;
|
|
21
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxH,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtG,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,IAAI;YAAyB,MAAM;EAAK,CAAC;AAEtD,8HAA8H;AAC9H,eAAO,MAAQ,QAAQ;;;GAAE,UAAU;YAHO,MAAM;aAGX,SAAS;YAHJ,MAAM;aAGA,SAAS,2CAAE,QAAQ,yCAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@e2e-dev/mobile` public surface: the `mobile()` engine factory,
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* the `@e2e-dev/mobile/tools`
|
|
2
|
+
* `@e2e-dev/mobile` public surface: the `mobile()` engine factory, the
|
|
3
|
+
* `device` fixture types, and `test`, `describe`, and the hooks typed with
|
|
4
|
+
* that fixture. `expect`, `credentials`, and `secrets` still come from
|
|
5
|
+
* `e2e`; the agent-side tool pack lives on the `@e2e-dev/mobile/tools`
|
|
6
|
+
* subpath so this entry never loads the AI SDK.
|
|
6
7
|
*/
|
|
7
8
|
import { test as base } from 'e2e';
|
|
8
9
|
export { mobile } from './engine.js';
|
|
@@ -11,4 +12,6 @@ export { mobile } from './engine.js';
|
|
|
11
12
|
* runtime `test` as `e2e`'s; only the fixture types differ.
|
|
12
13
|
*/
|
|
13
14
|
export const test = base.extend();
|
|
15
|
+
/** `describe` and the hooks, the same functions as `test.describe` and `test.beforeEach`, typed with the `device` fixture. */
|
|
16
|
+
export const { describe, beforeEach, afterEach, beforeAll, afterAll } = test;
|
|
14
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,CAAC;AAGnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAsB,CAAC;AAEtD,8HAA8H;AAC9H,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC"}
|
package/dist/links.d.ts
CHANGED
|
@@ -25,13 +25,6 @@ export declare function linkTarget(input: string): URL;
|
|
|
25
25
|
* never echoes the link, whose query may carry a magic-link token.
|
|
26
26
|
*/
|
|
27
27
|
export declare function assertAppId(app: string): void;
|
|
28
|
-
/**
|
|
29
|
-
* Refuses a link in the engine's `app` option, which the pool opens on every
|
|
30
|
-
* device in `prepare`, before any attempt's `openApp` would. Config is the
|
|
31
|
-
* project's own code, so a link there is a mistake, not a policy breach:
|
|
32
|
-
* `INVALID_CONFIG` whatever the scheme, pointing at `device.openLink`.
|
|
33
|
-
*/
|
|
34
|
-
export declare function assertConfiguredApp(app: string | undefined): void;
|
|
35
28
|
/**
|
|
36
29
|
* The link as the report shows it, cut before its query and fragment. A
|
|
37
30
|
* magic link carries its one-time token there, and a step label is kept for
|
package/dist/links.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,6FAA6F;AAC7F,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAQD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAY7C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ7C;AAED
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,6FAA6F;AAC7F,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAQD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAY7C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ7C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/links.js
CHANGED
|
@@ -57,17 +57,6 @@ export function assertAppId(app) {
|
|
|
57
57
|
denyForbiddenScheme(`${(link[1] ?? '').toLowerCase()}:`);
|
|
58
58
|
throw new TestError('INVALID_ARGUMENT', 'openApp opens an app by bundle id, package, or display name; open a deep link or web link with device.openLink');
|
|
59
59
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Refuses a link in the engine's `app` option, which the pool opens on every
|
|
62
|
-
* device in `prepare`, before any attempt's `openApp` would. Config is the
|
|
63
|
-
* project's own code, so a link there is a mistake, not a policy breach:
|
|
64
|
-
* `INVALID_CONFIG` whatever the scheme, pointing at `device.openLink`.
|
|
65
|
-
*/
|
|
66
|
-
export function assertConfiguredApp(app) {
|
|
67
|
-
if (app === undefined || !isLink(app))
|
|
68
|
-
return;
|
|
69
|
-
throw new ConfigurationError('INVALID_CONFIG', 'mobile: `app` names an app by bundle id, package, or display name, not a link; a test opens a deep link or web link with device.openLink');
|
|
70
|
-
}
|
|
71
60
|
/**
|
|
72
61
|
* The link as the report shows it, cut before its query and fragment. A
|
|
73
62
|
* magic link carries its one-time token there, and a step label is kept for
|
package/dist/links.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,6FAA6F;AAC7F,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,gGAAgG,KAAK,GAAG,CACzG,CAAC;IACJ,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,gHAAgH,CACjH,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD,6FAA6F;AAC7F,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,gGAAgG,KAAK,GAAG,CACzG,CAAC;IACJ,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,gHAAgH,CACjH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/nodes.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface RawNode {
|
|
|
25
25
|
* accessible name an app set beside visible text (agent-device 0.21.14+).
|
|
26
26
|
*/
|
|
27
27
|
readonly contentDescription?: string;
|
|
28
|
-
/** The field's placeholder text, showing or not (
|
|
28
|
+
/** The field's placeholder text, showing or not (agent-device 0.21.16+). */
|
|
29
29
|
readonly placeholder?: string;
|
|
30
30
|
/** The checked state of a checkable control; absent for one that cannot be checked or an older helper. */
|
|
31
31
|
readonly checked?: boolean;
|
package/dist/nodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,qEAAqE;AACrE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2GAA2G;IAC3G,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -14,47 +14,24 @@ export type AgentDeviceClient = ReturnType<typeof createAgentDeviceClient>;
|
|
|
14
14
|
*/
|
|
15
15
|
export type ClientFactory = (session: string, connection?: DeviceConnection) => AgentDeviceClient;
|
|
16
16
|
export type MobilePlatform = 'ios' | 'android';
|
|
17
|
+
/** Every permission agent-device can grant, deny, or reset on an app: what a target's `app.permissions` and `device.openApp` may name. */
|
|
18
|
+
export declare const DEVICE_PERMISSIONS: readonly ['camera', 'microphone', 'photos', 'contacts', 'notifications', 'calendar', 'location', 'reminders', 'motion', 'siri', 'media-library'];
|
|
17
19
|
/** Permissions agent-device can grant, deny, or reset on an app. */
|
|
18
|
-
export type DevicePermission =
|
|
20
|
+
export type DevicePermission = (typeof DEVICE_PERMISSIONS)[number];
|
|
19
21
|
/** A permission's state: held, refused, or not asked for yet, so the OS asks again. */
|
|
20
22
|
export type PermissionState = 'grant' | 'deny' | 'reset';
|
|
21
23
|
/** Permissions an app holds when it launches, by name. */
|
|
22
24
|
export type LaunchPermissions = Readonly<Partial<Record<DevicePermission, PermissionState>>>;
|
|
23
25
|
/**
|
|
24
|
-
* Options of the device engine
|
|
25
|
-
*
|
|
26
|
+
* Options of the device engine: which devices it drives and how. The app
|
|
27
|
+
* under test is the target's `app` (`bundleId`, `appPath`,
|
|
28
|
+
* `launchArguments`, `permissions`). Every optional value also accepts
|
|
29
|
+
* `undefined`, so values read straight from `process.env` need no
|
|
30
|
+
* conditional spread.
|
|
26
31
|
*/
|
|
27
32
|
export interface MobileOptions {
|
|
28
33
|
/** Platform the target's device runs. */
|
|
29
34
|
readonly platform: MobilePlatform;
|
|
30
|
-
/**
|
|
31
|
-
* App the worker brings up once in `prepare` and `app.open()` launches
|
|
32
|
-
* fresh: a bundle id, a package name, or a display name agent-device
|
|
33
|
-
* resolves (`Settings`). An attempt launches nothing on its own, so a test
|
|
34
|
-
* starts where the last one ended and calls `app.open()` when it wants
|
|
35
|
-
* the app fresh, as a Maestro flow calls `launchApp`. Without it the
|
|
36
|
-
* surface observes whatever is in the foreground, and `app.open()`,
|
|
37
|
-
* `app.restart()`, and `app.clearState()` are not available. A link is
|
|
38
|
-
* `INVALID_CONFIG`: a test opens one with `device.openLink`.
|
|
39
|
-
*/
|
|
40
|
-
readonly app?: string | undefined;
|
|
41
|
-
/**
|
|
42
|
-
* The build the suite runs against: an iOS `.app` bundle or an Android
|
|
43
|
-
* `.apk`, resolved against the project root (the config's directory). The
|
|
44
|
-
* engine installs nothing on its own: `device.installApp()` with no path
|
|
45
|
-
* installs it, once per device, where the suite says so, and a device
|
|
46
|
-
* provider installs it on the device it leases. Without `app`, the
|
|
47
|
-
* installed bundle id or package becomes the app `app.open()` launches.
|
|
48
|
-
*/
|
|
49
|
-
readonly appPath?: string | undefined;
|
|
50
|
-
/**
|
|
51
|
-
* Stable identity keying replay cache and session entries; defaults to `app`,
|
|
52
|
-
* else `appPath`. Declare one when the pinned app differs per run (a build
|
|
53
|
-
* path with a version in it) so entries survive the rename.
|
|
54
|
-
*/
|
|
55
|
-
readonly identity?: string | undefined;
|
|
56
|
-
/** Report label joining the cache identity; a simulator or emulator defaults to `test`. */
|
|
57
|
-
readonly environment?: 'test' | 'staging' | 'production' | undefined;
|
|
58
35
|
/**
|
|
59
36
|
* Simulator or emulator to use, by name, simulator UDID, or emulator
|
|
60
37
|
* serial (`emulator-5554`). A list is a pool: the
|
|
@@ -104,31 +81,11 @@ export interface MobileOptions {
|
|
|
104
81
|
*/
|
|
105
82
|
readonly transition?: number | undefined;
|
|
106
83
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* boolean intent extra. The warm-up in `prepare` and a foreground-only
|
|
112
|
-
* `device.openApp` pass none: an app already running keeps its process
|
|
113
|
-
* arguments, and `app.open()` relaunches it with them. Arguments that
|
|
114
|
-
* select a build mode change what the app is: give each mode its own
|
|
115
|
-
* `identity` so their recordings stay apart.
|
|
116
|
-
* `device.openApp(app, { launchArguments })` launches any app with its
|
|
117
|
-
* own.
|
|
118
|
-
*/
|
|
119
|
-
readonly launchArguments?: readonly string[] | undefined;
|
|
120
|
-
/**
|
|
121
|
-
* Permissions the pinned app holds on every fresh launch this engine
|
|
122
|
-
* performs: `app.open()`, `app.restart()`, and `app.clearState()`, which
|
|
123
|
-
* resets them along with the app's data. Each is granted, denied, or reset
|
|
124
|
-
* (the OS asks again) before the app starts, since iOS terminates a running
|
|
125
|
-
* app whose permission changed and Android one whose permission was
|
|
126
|
-
* revoked. `deny` is a recorded refusal on iOS, where the app is told no
|
|
127
|
-
* without a prompt, and a revocation on Android, where the OS asks again
|
|
128
|
-
* when the app requests the permission. A foreground-only `device.openApp`
|
|
129
|
-
* leaves them alone; `device.openApp(app, { permissions })` presets any
|
|
130
|
-
* app's.
|
|
84
|
+
* Whether a video recording draws agent-device's touch indicator where a
|
|
85
|
+
* test tapped. Default `true`. `false` records the plain screen, and skips
|
|
86
|
+
* the pass that draws the indicator once the recording stops: on a hosted
|
|
87
|
+
* daemon that pass can outlast the attempt's `cleanupTimeout`.
|
|
131
88
|
*/
|
|
132
|
-
readonly
|
|
89
|
+
readonly videoTouches?: boolean | undefined;
|
|
133
90
|
}
|
|
134
91
|
//# sourceMappingURL=options.d.ts.map
|