@midscene/testing-framework 0.0.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/es/builtin-steps.mjs +30 -0
- package/dist/es/builtin-steps.mjs.map +1 -0
- package/dist/es/config.mjs +83 -0
- package/dist/es/config.mjs.map +1 -0
- package/dist/es/dotenv.mjs +50 -0
- package/dist/es/dotenv.mjs.map +1 -0
- package/dist/es/index.mjs +5 -0
- package/dist/es/runner-worker.mjs +86 -0
- package/dist/es/runner-worker.mjs.map +1 -0
- package/dist/es/runner.mjs +165 -0
- package/dist/es/runner.mjs.map +1 -0
- package/dist/es/runtime/index.mjs +86 -0
- package/dist/es/runtime/index.mjs.map +1 -0
- package/dist/es/runtime/setup.mjs +59 -0
- package/dist/es/runtime/setup.mjs.map +1 -0
- package/dist/es/runtime/source.mjs +27 -0
- package/dist/es/runtime/source.mjs.map +1 -0
- package/dist/es/runtime/yaml.mjs +88 -0
- package/dist/es/runtime/yaml.mjs.map +1 -0
- package/dist/es/types.mjs +0 -0
- package/dist/lib/builtin-steps.js +67 -0
- package/dist/lib/builtin-steps.js.map +1 -0
- package/dist/lib/config.js +126 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dotenv.js +97 -0
- package/dist/lib/dotenv.js.map +1 -0
- package/dist/lib/index.js +65 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/runner-worker.js +92 -0
- package/dist/lib/runner-worker.js.map +1 -0
- package/dist/lib/runner.js +199 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/runtime/index.js +141 -0
- package/dist/lib/runtime/index.js.map +1 -0
- package/dist/lib/runtime/setup.js +96 -0
- package/dist/lib/runtime/setup.js.map +1 -0
- package/dist/lib/runtime/source.js +61 -0
- package/dist/lib/runtime/source.js.map +1 -0
- package/dist/lib/runtime/yaml.js +138 -0
- package/dist/lib/runtime/yaml.js.map +1 -0
- package/dist/lib/types.js +20 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/types/builtin-steps.d.ts +11 -0
- package/dist/types/config.d.ts +18 -0
- package/dist/types/dotenv.d.ts +28 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/runner-worker.d.ts +1 -0
- package/dist/types/runner.d.ts +33 -0
- package/dist/types/runtime/index.d.ts +24 -0
- package/dist/types/runtime/setup.d.ts +14 -0
- package/dist/types/runtime/source.d.ts +21 -0
- package/dist/types/runtime/yaml.d.ts +30 -0
- package/dist/types/types.d.ts +105 -0
- package/package.json +76 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { MidsceneYamlFlowItem } from '@midscene/core';
|
|
2
|
+
/**
|
|
3
|
+
* Target types supported by the default framework setup. The first version of
|
|
4
|
+
* the UI Testing Framework only covers the `web` and `android` targets that
|
|
5
|
+
* appear in #2509 and the example project.
|
|
6
|
+
*/
|
|
7
|
+
export type FrameworkTargetType = 'web' | 'android';
|
|
8
|
+
export interface FrameworkTargetConfig {
|
|
9
|
+
type: FrameworkTargetType;
|
|
10
|
+
options?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Minimal agent contract the framework relies on. Any Midscene agent
|
|
14
|
+
* (PlaywrightAgent, AndroidAgent, …) satisfies it because they all expose
|
|
15
|
+
* `runYaml`.
|
|
16
|
+
*/
|
|
17
|
+
export interface FrameworkAgent {
|
|
18
|
+
runYaml: (yamlScriptContent: string) => Promise<unknown>;
|
|
19
|
+
/** Optional report path some agents expose after a run. */
|
|
20
|
+
reportFile?: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface SetupContext {
|
|
23
|
+
projectDir: string;
|
|
24
|
+
agentOptions: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface FrameworkSetupResult {
|
|
27
|
+
agent: FrameworkAgent;
|
|
28
|
+
teardown?: () => Promise<void> | void;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface CustomYamlStepContext {
|
|
32
|
+
agent: FrameworkAgent;
|
|
33
|
+
state: Record<string, unknown>;
|
|
34
|
+
filePath: string;
|
|
35
|
+
stepIndex: number;
|
|
36
|
+
stepName: string;
|
|
37
|
+
}
|
|
38
|
+
export type CustomYamlStepHandler = (value: unknown, context: CustomYamlStepContext) => Promise<void> | void;
|
|
39
|
+
export interface MidsceneFrameworkConfig {
|
|
40
|
+
target?: FrameworkTargetConfig;
|
|
41
|
+
testDir?: string;
|
|
42
|
+
include?: string[];
|
|
43
|
+
exclude?: string[];
|
|
44
|
+
testRunner?: {
|
|
45
|
+
maxConcurrency?: number;
|
|
46
|
+
bail?: number;
|
|
47
|
+
testTimeout?: number;
|
|
48
|
+
retry?: number;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Controls how `runMidsceneSuite` loads `.env` files before resolving
|
|
52
|
+
* model and runtime configuration. Defaults are intentionally close to
|
|
53
|
+
* `@midscene/cli`'s behaviour:
|
|
54
|
+
* - `path` defaults to `[<cwd>/.env, <configDir>/.env]` (deduplicated;
|
|
55
|
+
* missing files are skipped silently).
|
|
56
|
+
* - `override` defaults to `false` (existing `process.env` wins).
|
|
57
|
+
* - `debug` defaults to `false`.
|
|
58
|
+
*
|
|
59
|
+
* Set `enabled: false` to opt out entirely (e.g. when the project handles
|
|
60
|
+
* env loading on its own).
|
|
61
|
+
*/
|
|
62
|
+
env?: {
|
|
63
|
+
enabled?: boolean;
|
|
64
|
+
path?: string | string[];
|
|
65
|
+
override?: boolean;
|
|
66
|
+
debug?: boolean;
|
|
67
|
+
};
|
|
68
|
+
output?: {
|
|
69
|
+
summary?: string;
|
|
70
|
+
reportDir?: string;
|
|
71
|
+
};
|
|
72
|
+
agentOptions?: Record<string, unknown>;
|
|
73
|
+
setup?: (context: SetupContext) => Promise<FrameworkSetupResult> | FrameworkSetupResult;
|
|
74
|
+
yamlSteps?: Record<string, CustomYamlStepHandler>;
|
|
75
|
+
}
|
|
76
|
+
export interface LoadedMidsceneConfig {
|
|
77
|
+
path: string;
|
|
78
|
+
root: string;
|
|
79
|
+
config: MidsceneFrameworkConfig;
|
|
80
|
+
}
|
|
81
|
+
export interface FrameworkTestFile {
|
|
82
|
+
filePath: string;
|
|
83
|
+
relativePath: string;
|
|
84
|
+
type: 'yaml' | 'test';
|
|
85
|
+
}
|
|
86
|
+
export interface NormalizedYamlCase {
|
|
87
|
+
name: string;
|
|
88
|
+
flow: MidsceneYamlFlowItem[];
|
|
89
|
+
raw: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
export interface FrameworkCaseResult {
|
|
92
|
+
file: string;
|
|
93
|
+
testName: string;
|
|
94
|
+
success: boolean;
|
|
95
|
+
duration: number;
|
|
96
|
+
error?: string;
|
|
97
|
+
report?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface FrameworkSuiteSummary {
|
|
100
|
+
total: number;
|
|
101
|
+
passed: number;
|
|
102
|
+
failed: number;
|
|
103
|
+
durationMs: number;
|
|
104
|
+
results: FrameworkCaseResult[];
|
|
105
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@midscene/testing-framework",
|
|
3
|
+
"description": "Midscene AI-native UI testing framework runtime built on Rstest.",
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"repository": "https://github.com/web-infra-dev/midscene",
|
|
6
|
+
"homepage": "https://midscenejs.com/",
|
|
7
|
+
"main": "./dist/lib/index.js",
|
|
8
|
+
"types": "./dist/types/index.d.ts",
|
|
9
|
+
"module": "./dist/es/index.mjs",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/types/index.d.ts",
|
|
13
|
+
"import": "./dist/es/index.mjs",
|
|
14
|
+
"require": "./dist/lib/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./runtime": {
|
|
17
|
+
"types": "./dist/types/runtime/index.d.ts",
|
|
18
|
+
"import": "./dist/es/runtime/index.mjs",
|
|
19
|
+
"require": "./dist/lib/runtime/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@midscene/core": "1.8.7-beta-20260601040030.0",
|
|
28
|
+
"@midscene/shared": "1.8.7-beta-20260601040030.0",
|
|
29
|
+
"dotenv": "^16.4.5",
|
|
30
|
+
"glob": "11.0.0",
|
|
31
|
+
"jiti": "2.6.1",
|
|
32
|
+
"js-yaml": "4.1.0"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@midscene/android": "1.8.7-beta-20260601040030.0",
|
|
36
|
+
"@midscene/web": "1.8.7-beta-20260601040030.0",
|
|
37
|
+
"@rstest/core": "*",
|
|
38
|
+
"playwright": "^1.45.0"
|
|
39
|
+
},
|
|
40
|
+
"peerDependenciesMeta": {
|
|
41
|
+
"@midscene/android": {
|
|
42
|
+
"optional": true
|
|
43
|
+
},
|
|
44
|
+
"@midscene/web": {
|
|
45
|
+
"optional": true
|
|
46
|
+
},
|
|
47
|
+
"playwright": {
|
|
48
|
+
"optional": true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@rslib/core": "^0.18.3",
|
|
53
|
+
"@rstest/core": "https://pkg.pr.new/@rstest/core@953945e",
|
|
54
|
+
"@types/js-yaml": "4.0.9",
|
|
55
|
+
"@types/node": "^18.0.0",
|
|
56
|
+
"playwright": "^1.45.0",
|
|
57
|
+
"typescript": "^5.8.3",
|
|
58
|
+
"vitest": "3.0.5",
|
|
59
|
+
"@midscene/android": "1.8.6",
|
|
60
|
+
"@midscene/web": "1.8.6"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=18.19.0"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public",
|
|
67
|
+
"registry": "https://registry.npmjs.org"
|
|
68
|
+
},
|
|
69
|
+
"license": "MIT",
|
|
70
|
+
"scripts": {
|
|
71
|
+
"dev": "npm run build:watch",
|
|
72
|
+
"build": "rslib build",
|
|
73
|
+
"build:watch": "rslib build --watch --no-clean",
|
|
74
|
+
"test": "vitest --run"
|
|
75
|
+
}
|
|
76
|
+
}
|