@cotestdev/ai-runner 0.0.7 → 0.0.9
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/dist/agents/types.d.ts +2 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/runner.d.ts +1 -3
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -17
- package/dist/runner.js.map +1 -1
- package/dist/tools/playwright-groups.d.ts.map +1 -1
- package/dist/tools/playwright-groups.js +19 -11
- package/dist/tools/playwright-groups.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/types.ts +2 -1
- package/src/runner.ts +21 -20
- package/src/tools/playwright-groups.ts +19 -11
package/dist/agents/types.d.ts
CHANGED
|
@@ -22,7 +22,8 @@ export interface PlaywrightAgentState {
|
|
|
22
22
|
page: Page;
|
|
23
23
|
/** Playwright BrowserContext object */
|
|
24
24
|
context: BrowserContext;
|
|
25
|
-
variables:
|
|
25
|
+
variables: Record<string, any>;
|
|
26
|
+
fixedVariables: Record<string, any>;
|
|
26
27
|
model?: BaseLanguageModel;
|
|
27
28
|
originalScript: string;
|
|
28
29
|
playwrightGroup: PlaywrightGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,wBAAwB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,KAAK,EAAE,WAAW,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IAEjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export declare class Runner {
|
|
|
8
8
|
private executor;
|
|
9
9
|
private state;
|
|
10
10
|
private script?;
|
|
11
|
-
private variables;
|
|
12
11
|
private abortController;
|
|
13
12
|
private constructor();
|
|
14
13
|
static NewInstance(projectId: string, testCaseId: string, canHeal?: boolean): Runner;
|
|
@@ -26,8 +25,7 @@ export declare class Runner {
|
|
|
26
25
|
has(key: string): boolean;
|
|
27
26
|
delete(key: string): boolean;
|
|
28
27
|
clear(): void;
|
|
29
|
-
keys(): string[];
|
|
30
28
|
getAll(): Record<string, unknown>;
|
|
31
|
-
reuseTest(useTestCaseId: string, description
|
|
29
|
+
reuseTest(useTestCaseId: string, description?: string): Promise<Record<string, unknown>>;
|
|
32
30
|
}
|
|
33
31
|
//# sourceMappingURL=runner.d.ts.map
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUvD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAoB;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAUvD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAoB;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO;IAOP,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,MAAM;IAgC1F,IAAI;IAKE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1F,OAAO,CAAC,kBAAkB;IAcpB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAyC1D;;KAEC;IACD,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;IAsBvB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAOrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI3B,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA2B/F"}
|
package/dist/runner.js
CHANGED
|
@@ -10,7 +10,6 @@ const playwright_backend_adapter_1 = require("./agents/tools/playwright-backend-
|
|
|
10
10
|
class Runner {
|
|
11
11
|
constructor(config) {
|
|
12
12
|
this.canHeal = false;
|
|
13
|
-
this.variables = new Map();
|
|
14
13
|
this.config = config;
|
|
15
14
|
this.storageService = core_infra_1.StorageService.getInstance(config.projectId);
|
|
16
15
|
this.logger = new logger_1.Logger();
|
|
@@ -19,12 +18,10 @@ class Runner {
|
|
|
19
18
|
static NewInstance(projectId, testCaseId, canHeal = true) {
|
|
20
19
|
const runner = new Runner({ projectId, testCaseId });
|
|
21
20
|
runner.canHeal = canHeal;
|
|
22
|
-
if (!canHeal) {
|
|
21
|
+
if (!canHeal || process.env.NOARTIK_CAN_HEAL === 'false') {
|
|
22
|
+
runner.canHeal = false;
|
|
23
23
|
return runner;
|
|
24
24
|
}
|
|
25
|
-
if (process.env.NOARTIK_CAN_HEAL === 'true') {
|
|
26
|
-
runner.canHeal = true;
|
|
27
|
-
}
|
|
28
25
|
try {
|
|
29
26
|
const script = runner.loadOriginalScript();
|
|
30
27
|
if (!script) {
|
|
@@ -57,7 +54,8 @@ class Runner {
|
|
|
57
54
|
this.state = {
|
|
58
55
|
page,
|
|
59
56
|
context,
|
|
60
|
-
variables:
|
|
57
|
+
variables: {},
|
|
58
|
+
fixedVariables: data ?? {},
|
|
61
59
|
logger: this.logger,
|
|
62
60
|
model: this.model,
|
|
63
61
|
originalScript: this.state?.originalScript || this.script || '',
|
|
@@ -145,25 +143,29 @@ class Runner {
|
|
|
145
143
|
return false;
|
|
146
144
|
}
|
|
147
145
|
set(key, value) {
|
|
148
|
-
this.variables.set(key, value);
|
|
146
|
+
this.state.variables.set(key, value);
|
|
149
147
|
}
|
|
150
148
|
get(key) {
|
|
151
|
-
|
|
149
|
+
const value = this.state.variables.get(key);
|
|
150
|
+
if (!value) {
|
|
151
|
+
return this.state.fixedVariables[key];
|
|
152
|
+
}
|
|
152
153
|
}
|
|
153
154
|
has(key) {
|
|
154
|
-
|
|
155
|
+
const value = this.state.variables.has(key);
|
|
156
|
+
if (value) {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
return this.state.fixedVariables.has(key);
|
|
155
160
|
}
|
|
156
161
|
delete(key) {
|
|
157
|
-
return this.variables.delete(key);
|
|
162
|
+
return this.state.variables.delete(key);
|
|
158
163
|
}
|
|
159
164
|
clear() {
|
|
160
|
-
this.variables.clear();
|
|
161
|
-
}
|
|
162
|
-
keys() {
|
|
163
|
-
return Array.from(this.variables.keys());
|
|
165
|
+
this.state.variables.clear();
|
|
164
166
|
}
|
|
165
167
|
getAll() {
|
|
166
|
-
return
|
|
168
|
+
return { ...this.state.fixedVariables, ...this.state.variables };
|
|
167
169
|
}
|
|
168
170
|
async reuseTest(useTestCaseId, description) {
|
|
169
171
|
const scriptContent = this.storageService.loadTestScript(useTestCaseId);
|
|
@@ -171,7 +173,7 @@ class Runner {
|
|
|
171
173
|
throw new Error(`Reusable test script not found: ${useTestCaseId}`);
|
|
172
174
|
}
|
|
173
175
|
const reuseRunner = Runner.NewInstance(this.config.projectId, useTestCaseId);
|
|
174
|
-
await reuseRunner.init(this.state.page, this.state.context);
|
|
176
|
+
await reuseRunner.init(this.state.page, this.state.context, { ...this.getAll() });
|
|
175
177
|
this.logger.log(`Starting to execute reusable test case: ${description}`);
|
|
176
178
|
try {
|
|
177
179
|
const executeScript = new Function('runner', 'page', 'context', 'expect', `
|
|
@@ -181,7 +183,7 @@ class Runner {
|
|
|
181
183
|
`);
|
|
182
184
|
await executeScript(reuseRunner, this.state.page, this.state.context, test_1.expect);
|
|
183
185
|
this.logger.log(`Reusable test case executed successfully`);
|
|
184
|
-
return reuseRunner.state?.variables ||
|
|
186
|
+
return { ...reuseRunner.state?.variables || {} };
|
|
185
187
|
}
|
|
186
188
|
catch (error) {
|
|
187
189
|
throw new Error(`reuseTest execution failed, error: ${error instanceof Error ? error.message : String(error)}`);
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":";;;AAMA,sDAAoE;AACpE,2CAA0C;AAE1C,4CAAyC;AACzC,sEAAkE;AAClE,iEAA4D;AAC5D,0FAAqF;AAGrF,MAAa,MAAM;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-groups.d.ts","sourceRoot":"","sources":["../../src/tools/playwright-groups.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"playwright-groups.d.ts","sourceRoot":"","sources":["../../src/tools/playwright-groups.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,EAAE,wBAAwB;IAqCvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIzD,WAAW,IAAI,qBAAqB,EAAE;CAGvC"}
|
|
@@ -7,24 +7,32 @@ class PlaywrightGroup extends _1.AbstractGroup {
|
|
|
7
7
|
super([{
|
|
8
8
|
name: 'playwright_basic',
|
|
9
9
|
description: 'Basic Playwright tools for browser interactions',
|
|
10
|
-
tools: ['browser_navigate', 'browser_click', 'browser_fill_form', '
|
|
10
|
+
tools: ['browser_navigate', 'browser_click', 'browser_fill_form', 'browser_run_code', 'browser_select_option', 'browser_snapshot', 'browser_type', 'browser_wait_for'],
|
|
11
11
|
loadByDefault: true,
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
name: '
|
|
15
|
-
description: `Playwright tools tab management, including: list, create, close, select a tab`,
|
|
16
|
-
tools: ['browser_tabs'],
|
|
14
|
+
name: 'playwright_browser',
|
|
15
|
+
description: `Playwright tools for tab management, including: list, create, close, select a tab or page`,
|
|
16
|
+
tools: ['browser_tabs', 'browser_close'],
|
|
17
|
+
loadByDefault: false,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'playwright_keyboard',
|
|
21
|
+
description: `Playwright tools for keyboard input action, including:
|
|
22
|
+
1. Press a key or keys on the keyboard
|
|
23
|
+
2. Press a key down or key up on the keyboard`,
|
|
24
|
+
tools: ['browser_press_key', 'browser_press_sequentially', 'browser_keydown', 'browser_keyup'],
|
|
17
25
|
loadByDefault: false,
|
|
18
26
|
},
|
|
19
27
|
{
|
|
20
28
|
name: 'playwright_other',
|
|
21
|
-
description: `Other Playwright tools for browser interactions, including:
|
|
22
|
-
1.
|
|
23
|
-
2. drag and drop
|
|
24
|
-
3.
|
|
25
|
-
4.
|
|
26
|
-
5.
|
|
27
|
-
tools: ['browser_hover', 'browser_drag', 'browser_file_upload', 'browser_handle_dialog', '
|
|
29
|
+
description: `Other Playwright tools for browser interactions, including:
|
|
30
|
+
1. Hover over element on page
|
|
31
|
+
2. Perform drag and drop between two elements
|
|
32
|
+
3. Upload one or multiple files
|
|
33
|
+
4. Handle a dialog
|
|
34
|
+
5. Check or uncheck a checkbox or radio button`,
|
|
35
|
+
tools: ['browser_hover', 'browser_drag', 'browser_file_upload', 'browser_handle_dialog', 'browser_check', 'browser_unscheck'],
|
|
28
36
|
loadByDefault: false,
|
|
29
37
|
}
|
|
30
38
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-groups.js","sourceRoot":"","sources":["../../src/tools/playwright-groups.ts"],"names":[],"mappings":";;;AAMA,wBAAkC;AAOlC,MAAa,eAAgB,SAAQ,gBAAa;IAIhD,YAAY,OAAiC;QAC3C,KAAK,CAAC,CAAC;gBACL,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,iDAAiD;gBAC9D,KAAK,EAAE,CAAC,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"playwright-groups.js","sourceRoot":"","sources":["../../src/tools/playwright-groups.ts"],"names":[],"mappings":";;;AAMA,wBAAkC;AAOlC,MAAa,eAAgB,SAAQ,gBAAa;IAIhD,YAAY,OAAiC;QAC3C,KAAK,CAAC,CAAC;gBACL,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,iDAAiD;gBAC9D,KAAK,EAAE,CAAC,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,CAAC;gBACtK,aAAa,EAAE,IAAI;aACpB;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EAAE,2FAA2F;gBACxG,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;gBACxC,aAAa,EAAE,KAAK;aACrB;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EAAE;;oDAEiC;gBAC9C,KAAK,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,eAAe,CAAC;gBAC9F,aAAa,EAAE,KAAK;aACrB;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE;;;;;qDAKkC;gBAC/C,KAAK,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,eAAe,EAAE,kBAAkB,CAAC;gBAC7H,aAAa,EAAE,KAAK;aACrB;SACA,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAS;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;CACF;AAhDD,0CAgDC"}
|
package/package.json
CHANGED
package/src/agents/types.ts
CHANGED
|
@@ -34,7 +34,8 @@ export interface PlaywrightAgentState {
|
|
|
34
34
|
/** Playwright BrowserContext object */
|
|
35
35
|
context: BrowserContext;
|
|
36
36
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
-
variables:
|
|
37
|
+
variables: Record<string, any>;
|
|
38
|
+
fixedVariables: Record<string, any>;
|
|
38
39
|
model?: BaseLanguageModel;
|
|
39
40
|
originalScript: string;
|
|
40
41
|
playwrightGroup: PlaywrightGroup;
|
package/src/runner.ts
CHANGED
|
@@ -22,7 +22,6 @@ export class Runner {
|
|
|
22
22
|
private executor: PlaywrightExecutor | undefined;
|
|
23
23
|
private state: PlaywrightAgentState | undefined;
|
|
24
24
|
private script?: string;
|
|
25
|
-
private variables: Map<string, any> = new Map<string, any>();
|
|
26
25
|
private abortController: AbortController;
|
|
27
26
|
|
|
28
27
|
private constructor(config: RunnerConfig) {
|
|
@@ -35,14 +34,11 @@ export class Runner {
|
|
|
35
34
|
static NewInstance(projectId: string, testCaseId: string, canHeal: boolean = true): Runner {
|
|
36
35
|
const runner = new Runner({ projectId, testCaseId });
|
|
37
36
|
runner.canHeal = canHeal;
|
|
38
|
-
if (!canHeal) {
|
|
37
|
+
if (!canHeal || process.env.NOARTIK_CAN_HEAL === 'false') {
|
|
38
|
+
runner.canHeal = false;
|
|
39
39
|
return runner;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
if (process.env.NOARTIK_CAN_HEAL === 'true') {
|
|
43
|
-
runner.canHeal = true;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
42
|
try {
|
|
47
43
|
const script = runner.loadOriginalScript();
|
|
48
44
|
if (!script) {
|
|
@@ -77,7 +73,8 @@ export class Runner {
|
|
|
77
73
|
this.state = {
|
|
78
74
|
page,
|
|
79
75
|
context,
|
|
80
|
-
variables:
|
|
76
|
+
variables: {},
|
|
77
|
+
fixedVariables: data ?? {},
|
|
81
78
|
logger: this.logger,
|
|
82
79
|
model: this.model,
|
|
83
80
|
originalScript: this.state?.originalScript || this.script || '',
|
|
@@ -180,41 +177,45 @@ export class Runner {
|
|
|
180
177
|
}
|
|
181
178
|
|
|
182
179
|
set(key: string, value: any): void {
|
|
183
|
-
this.variables.set(key, value);
|
|
180
|
+
this.state!.variables.set(key, value);
|
|
184
181
|
}
|
|
185
182
|
|
|
186
183
|
get(key: string): any {
|
|
187
|
-
|
|
184
|
+
const value = this.state!.variables.get(key);
|
|
185
|
+
if (!value) {
|
|
186
|
+
return this.state!.fixedVariables[key];
|
|
187
|
+
}
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
has(key: string): boolean {
|
|
191
|
-
|
|
191
|
+
const value = this.state!.variables.has(key);
|
|
192
|
+
if (value) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return this.state!.fixedVariables.has(key);
|
|
192
197
|
}
|
|
193
198
|
|
|
194
199
|
delete(key: string): boolean {
|
|
195
|
-
return this.variables.delete(key);
|
|
200
|
+
return this.state!.variables.delete(key);
|
|
196
201
|
}
|
|
197
202
|
|
|
198
203
|
clear(): void {
|
|
199
|
-
this.variables.clear();
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
keys(): string[] {
|
|
203
|
-
return Array.from(this.variables.keys());
|
|
204
|
+
this.state!.variables.clear();
|
|
204
205
|
}
|
|
205
206
|
|
|
206
207
|
getAll(): Record<string, unknown> {
|
|
207
|
-
return
|
|
208
|
+
return { ...this.state!.fixedVariables, ...this.state!.variables };
|
|
208
209
|
}
|
|
209
210
|
|
|
210
|
-
async reuseTest(useTestCaseId: string, description
|
|
211
|
+
async reuseTest(useTestCaseId: string, description?: string): Promise<Record<string, unknown>> {
|
|
211
212
|
const scriptContent = this.storageService.loadTestScript(useTestCaseId);
|
|
212
213
|
if (!scriptContent) {
|
|
213
214
|
throw new Error(`Reusable test script not found: ${useTestCaseId}`);
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
const reuseRunner = Runner.NewInstance(this.config.projectId, useTestCaseId);
|
|
217
|
-
await reuseRunner.init(this.state!.page, this.state!.context);
|
|
218
|
+
await reuseRunner.init(this.state!.page, this.state!.context, { ...this.getAll() });
|
|
218
219
|
|
|
219
220
|
this.logger.log(`Starting to execute reusable test case: ${description}`);
|
|
220
221
|
|
|
@@ -229,7 +230,7 @@ export class Runner {
|
|
|
229
230
|
|
|
230
231
|
this.logger.log(`Reusable test case executed successfully`);
|
|
231
232
|
|
|
232
|
-
return reuseRunner.state?.variables ||
|
|
233
|
+
return { ...reuseRunner.state?.variables || {} };
|
|
233
234
|
} catch (error) {
|
|
234
235
|
throw new Error(`reuseTest execution failed, error: ${error instanceof Error ? error.message : String(error)}`);
|
|
235
236
|
}
|
|
@@ -19,24 +19,32 @@ export class PlaywrightGroup extends AbstractGroup {
|
|
|
19
19
|
super([{
|
|
20
20
|
name: 'playwright_basic',
|
|
21
21
|
description: 'Basic Playwright tools for browser interactions',
|
|
22
|
-
tools: ['browser_navigate', 'browser_click', 'browser_fill_form', '
|
|
22
|
+
tools: ['browser_navigate', 'browser_click', 'browser_fill_form', 'browser_run_code', 'browser_select_option', 'browser_snapshot', 'browser_type', 'browser_wait_for'],
|
|
23
23
|
loadByDefault: true,
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
name: '
|
|
27
|
-
description: `Playwright tools tab management, including: list, create, close, select a tab`,
|
|
28
|
-
tools: ['browser_tabs'],
|
|
26
|
+
name: 'playwright_browser',
|
|
27
|
+
description: `Playwright tools for tab management, including: list, create, close, select a tab or page`,
|
|
28
|
+
tools: ['browser_tabs', 'browser_close'],
|
|
29
|
+
loadByDefault: false,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'playwright_keyboard',
|
|
33
|
+
description: `Playwright tools for keyboard input action, including:
|
|
34
|
+
1. Press a key or keys on the keyboard
|
|
35
|
+
2. Press a key down or key up on the keyboard`,
|
|
36
|
+
tools: ['browser_press_key', 'browser_press_sequentially', 'browser_keydown', 'browser_keyup'],
|
|
29
37
|
loadByDefault: false,
|
|
30
38
|
},
|
|
31
39
|
{
|
|
32
40
|
name: 'playwright_other',
|
|
33
|
-
description: `Other Playwright tools for browser interactions, including:
|
|
34
|
-
1.
|
|
35
|
-
2. drag and drop
|
|
36
|
-
3.
|
|
37
|
-
4.
|
|
38
|
-
5.
|
|
39
|
-
tools: ['browser_hover', 'browser_drag', 'browser_file_upload', 'browser_handle_dialog', '
|
|
41
|
+
description: `Other Playwright tools for browser interactions, including:
|
|
42
|
+
1. Hover over element on page
|
|
43
|
+
2. Perform drag and drop between two elements
|
|
44
|
+
3. Upload one or multiple files
|
|
45
|
+
4. Handle a dialog
|
|
46
|
+
5. Check or uncheck a checkbox or radio button`,
|
|
47
|
+
tools: ['browser_hover', 'browser_drag', 'browser_file_upload', 'browser_handle_dialog', 'browser_check', 'browser_unscheck'],
|
|
40
48
|
loadByDefault: false,
|
|
41
49
|
}
|
|
42
50
|
]);
|