e2e 0.15.0 → 0.15.1

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 CHANGED
@@ -1,11 +1,16 @@
1
+ <a href="https://tester.army/e2e?utm_source=e2e&utm_medium=github&utm_campaign=readme_banner"><img src="https://raw.githubusercontent.com/tester-army/e2e/main/.github/assets/readme-banner.png" alt="e2e by TesterArmy" width="100%" /></a>
2
+
3
+ <p align="center">
4
+ <a href="https://tester.army?utm_source=e2e&utm_medium=github&utm_campaign=readme_badge"><img alt="Made by TesterArmy" src="https://raw.githubusercontent.com/tester-army/e2e/main/.github/assets/made-by-testerarmy.svg" /></a>
5
+ <a href="https://www.npmjs.com/package/e2e"><img alt="npm version" src="https://img.shields.io/npm/v/e2e.svg?style=for-the-badge&labelColor=000000" /></a>
6
+ <a href="https://github.com/tester-army/e2e/blob/main/LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-green.svg?style=for-the-badge&labelColor=000000" /></a>
7
+ <a href="https://tester.army/discord"><img alt="Join the community on Discord" src="https://img.shields.io/badge/Join%20the%20community-5865F2.svg?style=for-the-badge&logo=discord&logoColor=white&labelColor=000000" /></a>
8
+ </p>
9
+
1
10
  # e2e
2
11
 
3
- Agentic end-to-end testing framework for any app: the SDK, runner, and CLI.
4
- Documentation: [e2e.tester.army/docs](https://e2e.tester.army/docs).
12
+ [e2e](https://tester.army/e2e?utm_source=e2e&utm_medium=github&utm_campaign=readme_intro) is an end-to-end testing framework for web and mobile apps. Describe a goal in natural language and an agent interacts with the app to complete it. Use locators and assertions in the same test to check exact results. Customize anything from agent to the engine.
5
13
 
6
- ```bash
7
- npx e2e init
8
- ```
9
14
 
10
15
  ```ts
11
16
  // tests/checkout.e2e.ts
@@ -21,13 +26,37 @@ test('a member upgrades to Pro', async ({ app, agent, screen }) => {
21
26
  });
22
27
  ```
23
28
 
24
- A target names its engine: [`@e2e-dev/web`](https://www.npmjs.com/package/@e2e-dev/web)
25
- for the web, [`@e2e-dev/mobile`](https://www.npmjs.com/package/@e2e-dev/mobile)
26
- for iOS and Android. An agent step that a later assertion verifies records
27
- its actions, and the next run replays them with no model calls until the app
28
- changes. Tests without agent steps need no model.
29
+ ```bash
30
+ npx e2e init
31
+ ```
32
+
33
+ An agent step that a later assertion verifies records its actions, and the
34
+ next run replays them with no model calls until the app changes. Tests
35
+ without agent steps need no model. Bring your own subscription, API key, or
36
+ local model.
37
+
38
+ ## Documentation
39
+
40
+ [e2e.tester.army/docs](https://e2e.tester.army/docs): quickstart, writing
41
+ tests, mobile, migrating from Playwright, Cypress, Selenium, Detox, or
42
+ Maestro, and the full reference.
43
+
44
+ ## Packages
45
+
46
+ - [`e2e`](https://www.npmjs.com/package/e2e): SDK, runner, and CLI.
47
+ - [`@e2e-dev/web`](https://www.npmjs.com/package/@e2e-dev/web): the browser engine.
48
+ - [`@e2e-dev/mobile`](https://www.npmjs.com/package/@e2e-dev/mobile): the iOS and Android engine.
49
+ - [`@e2e-dev/github`](https://www.npmjs.com/package/@e2e-dev/github): the pull request comment reporter.
50
+ - [`@e2e-dev/kernel`](https://www.npmjs.com/package/@e2e-dev/kernel): Kernel hosted browsers for the web
51
+ engine.
52
+ - [`@e2e-dev/eas`](https://www.npmjs.com/package/@e2e-dev/eas): EAS Simulators hosted iOS simulators and
53
+ Android emulators for the mobile engine.
54
+
55
+ ## Contributing
29
56
 
30
- Not available yet: an HTML reporter.
57
+ See [CONTRIBUTING.md](https://github.com/tester-army/e2e/blob/main/CONTRIBUTING.md) and [SECURITY.md](https://github.com/tester-army/e2e/blob/main/SECURITY.md).
58
+ Apache-2.0.
31
59
 
32
- Source, issues, and [CONTRIBUTING.md](https://github.com/tester-army/e2e/blob/main/CONTRIBUTING.md):
33
- [github.com/tester-army/e2e](https://github.com/tester-army/e2e).
60
+ Built by [TesterArmy](https://tester.army/?utm_source=e2e&utm_medium=github&utm_campaign=readme_footer),
61
+ the agentic testing platform that runs plain-English tests on web and mobile
62
+ apps and reports back with screenshots and recordings.
package/dist/.build.json CHANGED
@@ -1 +1 @@
1
- {"version":"0.15.0"}
1
+ {"version":"0.15.1"}
@@ -1 +1 @@
1
- {"@e2e-dev/web":"0.11.0","@e2e-dev/mobile":"0.8.0","playwright":"1.63.0"}
1
+ {"@e2e-dev/web":"0.11.1","@e2e-dev/mobile":"0.8.1","playwright":"1.63.0"}
@@ -9,8 +9,8 @@
9
9
  * one not yet reached, so the state is the signals themselves: the first
10
10
  * signal interrupts, the second forces, the third exits on the spot — the
11
11
  * last resort for a teardown that is itself stuck. That exit skips the
12
- * runner's teardown, so the app and service process groups it spawned are
13
- * killed first; otherwise they outlive the run in their own groups and the
12
+ * runner's teardown, so the app process groups it spawned are killed
13
+ * first; otherwise they outlive the run in their own groups and the
14
14
  * next run fails with `APP_ALREADY_RUNNING`.
15
15
  */
16
16
  export declare class SignalLadder {
@@ -10,8 +10,8 @@ import { killManagedProcessGroups } from '../run/managed-process.js';
10
10
  * one not yet reached, so the state is the signals themselves: the first
11
11
  * signal interrupts, the second forces, the third exits on the spot — the
12
12
  * last resort for a teardown that is itself stuck. That exit skips the
13
- * runner's teardown, so the app and service process groups it spawned are
14
- * killed first; otherwise they outlive the run in their own groups and the
13
+ * runner's teardown, so the app process groups it spawned are killed
14
+ * first; otherwise they outlive the run in their own groups and the
15
15
  * next run fails with `APP_ALREADY_RUNNING`.
16
16
  */
17
17
  export class SignalLadder {
package/package.json CHANGED
@@ -1,16 +1,22 @@
1
1
  {
2
2
  "name": "e2e",
3
- "version": "0.15.0",
3
+ "version": "0.15.1",
4
4
  "description": "SDK, runner, and CLI for agentic end-to-end testing",
5
5
  "keywords": [
6
6
  "e2e",
7
+ "end-to-end",
7
8
  "testing",
9
+ "test-runner",
10
+ "test-automation",
11
+ "ai",
12
+ "ai-testing",
13
+ "ai-agent",
14
+ "llm",
8
15
  "agentic",
9
- "end-to-end",
10
- "chatgpt",
11
- "github-copilot",
12
- "grok",
13
- "subscription"
16
+ "natural-language",
17
+ "web-testing",
18
+ "mobile-testing",
19
+ "qa"
14
20
  ],
15
21
  "license": "Apache-2.0",
16
22
  "contributors": [
@@ -29,7 +35,6 @@
29
35
  "publishConfig": {
30
36
  "registry": "https://registry.npmjs.org/",
31
37
  "access": "public",
32
- "provenance": false,
33
38
  "tag": "latest"
34
39
  },
35
40
  "type": "module",
@@ -103,7 +108,7 @@
103
108
  "@ai-sdk/openai": "4.0.71",
104
109
  "@ai-sdk/openai-compatible": "3.0.53",
105
110
  "@ai-sdk/xai": "5.0.4",
106
- "@e2e-dev/web": "0.11.0",
111
+ "@e2e-dev/web": "0.11.1",
107
112
  "@openrouter/ai-sdk-provider": "3.1.0",
108
113
  "@types/node": "26.6.2",
109
114
  "@types/pngjs": "6.0.5",
@@ -118,7 +123,7 @@
118
123
  "node": ">=22.12.0"
119
124
  },
120
125
  "scripts": {
121
- "build": "node -e \"const fs=require('node:fs');for(const dir of ['dist','skills'])fs.rmSync(dir,{recursive:true,force:true});fs.cpSync('../../skills/e2e','skills/e2e',{recursive:true})\" && tsc --project tsconfig.build.json && node -e \"const fs=require('node:fs');const read=(dir)=>JSON.parse(fs.readFileSync('../'+dir+'/package.json','utf8'));const versions=Object.fromEntries(['web','mobile'].map((dir)=>['@e2e-dev/'+dir,read(dir).version]));versions.playwright=read('web').devDependencies.playwright;fs.writeFileSync('dist/cli/init/sibling-versions.json',JSON.stringify(versions)+'\\n')\" && node ../../scripts/stamp-dist.ts",
126
+ "build": "node scripts/prepare-build.ts && tsc --project tsconfig.build.json && node scripts/write-sibling-versions.ts && node ../../scripts/stamp-dist.ts",
122
127
  "typecheck": "tsc --noEmit",
123
128
  "test": "vitest run",
124
129
  "test:watch": "vitest",
@@ -24,10 +24,11 @@ import { gateway } from 'ai';
24
24
  export default {
25
25
  targets: [
26
26
  {
27
- engine: web({
27
+ engine: web(),
28
+ app: {
28
29
  url: 'http://127.0.0.1:3000',
29
30
  command: { executable: 'pnpm', args: ['dev'], log: '.e2e/logs/app.log' },
30
- }),
31
+ },
31
32
  },
32
33
  ],
33
34
  // The model behind every agent.* step: an AI SDK instance; gateway() from 'ai' reads AI_GATEWAY_API_KEY or a Vercel OIDC token.
@@ -143,7 +143,7 @@ deterministic, never retry it; only exit 3 is worth a job-level retry.
143
143
 
144
144
  The first SIGINT or SIGTERM interrupts and writes the report if any test
145
145
  had started; the second forces engine teardown; the third kills the app
146
- and service process groups and exits 130 at once.
146
+ process groups and exits 130 at once.
147
147
 
148
148
  ## Continuous integration
149
149
 
@@ -77,10 +77,11 @@ export default {
77
77
  tests: 'tests/**/*.e2e.ts',
78
78
  targets: [
79
79
  {
80
- engine: web({
80
+ engine: web(),
81
+ app: {
81
82
  url: 'http://127.0.0.1:3000',
82
83
  command: { executable: 'pnpm', args: ['dev'], log: '.e2e/logs/app.log' },
83
- }),
84
+ },
84
85
  },
85
86
  ],
86
87
  // Model behind every agent.* step.