askui 0.20.3 → 0.20.5
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/cjs/core/ui-control-commands/action.d.ts +5 -1
- package/dist/cjs/core/ui-control-commands/action.js +3 -2
- package/dist/cjs/core/ui-control-commands/control-command.js +1 -1
- package/dist/cjs/execution/dsl.d.ts +7 -6
- package/dist/cjs/execution/dsl.js +50 -27
- package/dist/cjs/lib/interactive_cli/create-example-project.d.ts +1 -0
- package/dist/cjs/lib/interactive_cli/create-example-project.js +20 -0
- package/dist/esm/core/ui-control-commands/action.d.ts +5 -1
- package/dist/esm/core/ui-control-commands/action.js +3 -2
- package/dist/esm/core/ui-control-commands/control-command.js +1 -1
- package/dist/esm/execution/dsl.d.ts +7 -6
- package/dist/esm/execution/dsl.js +50 -27
- package/dist/esm/lib/interactive_cli/create-example-project.d.ts +1 -0
- package/dist/esm/lib/interactive_cli/create-example-project.js +20 -0
- package/dist/example_projects_templates/configs/tsconfig.json +2 -1
- package/dist/example_projects_templates/templates/askui-helper-windows.nj +4 -0
- package/dist/example_projects_templates/templates/askui-helper.nj +4 -0
- package/dist/example_projects_templates/typescript/tsconfig.json +2 -1
- package/package.json +1 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { InputEvent } from './input-event';
|
|
2
|
+
export declare type ActionParameters = {
|
|
3
|
+
[key: string]: string | number | boolean | string[] | ActionParameters;
|
|
4
|
+
};
|
|
2
5
|
export declare class Action {
|
|
3
6
|
inputEvent: InputEvent;
|
|
4
7
|
position: {
|
|
@@ -6,9 +9,10 @@ export declare class Action {
|
|
|
6
9
|
y: number;
|
|
7
10
|
};
|
|
8
11
|
text: string;
|
|
12
|
+
parameters: ActionParameters;
|
|
9
13
|
constructor(inputEvent: InputEvent, position: {
|
|
10
14
|
x: number;
|
|
11
15
|
y: number;
|
|
12
|
-
}, text: string);
|
|
16
|
+
}, text: string, parameters?: ActionParameters);
|
|
13
17
|
static fromJson(action: Action, resizeRatio?: number): Action;
|
|
14
18
|
}
|
|
@@ -3,16 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Action = void 0;
|
|
4
4
|
const input_event_1 = require("./input-event");
|
|
5
5
|
class Action {
|
|
6
|
-
constructor(inputEvent, position, text) {
|
|
6
|
+
constructor(inputEvent, position, text, parameters = {}) {
|
|
7
7
|
this.inputEvent = inputEvent;
|
|
8
8
|
this.position = position;
|
|
9
9
|
this.text = text;
|
|
10
|
+
this.parameters = parameters;
|
|
10
11
|
}
|
|
11
12
|
static fromJson(action, resizeRatio = 1) {
|
|
12
13
|
return new Action(input_event_1.InputEvent[action.inputEvent], {
|
|
13
14
|
x: action.position.x * resizeRatio,
|
|
14
15
|
y: action.position.y * resizeRatio,
|
|
15
|
-
}, action.text);
|
|
16
|
+
}, action.text, action.parameters ? action.parameters : {});
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
exports.Action = Action;
|
|
@@ -16,7 +16,7 @@ class ControlCommand {
|
|
|
16
16
|
}
|
|
17
17
|
setTextToBeTyped(text) {
|
|
18
18
|
this.actions = this.actions.map((action) => ([input_event_1.InputEvent.TYPE, input_event_1.InputEvent.TYPE_TEXT].includes(action.inputEvent)
|
|
19
|
-
? new action_1.Action(action.inputEvent, action.position, text) : action));
|
|
19
|
+
? new action_1.Action(action.inputEvent, action.position, text, action.parameters) : action));
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
exports.ControlCommand = ControlCommand;
|
|
@@ -1913,11 +1913,12 @@ export declare abstract class FluentCommand extends FluentBase {
|
|
|
1913
1913
|
* await aui.execOnShell("chrome").exec();
|
|
1914
1914
|
* ```
|
|
1915
1915
|
*
|
|
1916
|
-
* @param {string}
|
|
1916
|
+
* @param {string} shellCommand - A shell command which is executed.
|
|
1917
|
+
* @param {number} [timeoutInMilliseconds=1] - A timeout in milliseconds.
|
|
1917
1918
|
*
|
|
1918
1919
|
* @return {Exec}
|
|
1919
1920
|
*/
|
|
1920
|
-
execOnShell(
|
|
1921
|
+
execOnShell(shellCommand: string, timeoutInMilliseconds?: number): Exec;
|
|
1921
1922
|
/**
|
|
1922
1923
|
* Clicks with left mouse key.
|
|
1923
1924
|
*
|
|
@@ -2962,10 +2963,10 @@ export declare class FluentFiltersOrRelationsGetter extends FluentFiltersGetter
|
|
|
2962
2963
|
*/
|
|
2963
2964
|
contains(): FluentFiltersGetter;
|
|
2964
2965
|
/**
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2966
|
+
* Returns a list of detected elements
|
|
2967
|
+
*
|
|
2968
|
+
* @return {DetectedElement[]}
|
|
2969
|
+
*/
|
|
2969
2970
|
exec(): Promise<DetectedElement[]>;
|
|
2970
2971
|
}
|
|
2971
2972
|
export declare abstract class Getter extends FluentCommand {
|
|
@@ -6,6 +6,33 @@
|
|
|
6
6
|
// Autogenerated from typescript.template file
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.ApiCommands = exports.Getter = exports.FluentFiltersOrRelationsGetter = exports.FluentFiltersGetter = exports.ExecGetter = exports.FluentCommand = exports.FluentFiltersOrRelationsCondition = exports.FluentFiltersCondition = exports.FluentFiltersOrRelations = exports.FluentFilters = exports.Exec = exports.Separators = void 0;
|
|
9
|
+
function isStackTraceCodeline(line) {
|
|
10
|
+
return /[ \t]+at .+/.test(line);
|
|
11
|
+
}
|
|
12
|
+
function splitStackTrace(stacktrace) {
|
|
13
|
+
const errorStackTraceLines = stacktrace.split('\n');
|
|
14
|
+
const errorIndexOfFirstCodeLine = errorStackTraceLines.findIndex(isStackTraceCodeline);
|
|
15
|
+
const errorStacktraceHead = errorStackTraceLines.slice(0, errorIndexOfFirstCodeLine);
|
|
16
|
+
const errorStacktraceCodeLines = errorStackTraceLines.slice(errorIndexOfFirstCodeLine);
|
|
17
|
+
return { head: errorStacktraceHead, codelines: errorStacktraceCodeLines };
|
|
18
|
+
}
|
|
19
|
+
function rewriteStackTraceForError(error, newStackTrace) {
|
|
20
|
+
const errorCopy = new Error(error.message);
|
|
21
|
+
if (!error.stack) {
|
|
22
|
+
errorCopy.stack = newStackTrace;
|
|
23
|
+
return errorCopy;
|
|
24
|
+
}
|
|
25
|
+
const errorStacktraceSplit = splitStackTrace(error.stack);
|
|
26
|
+
const newStacktraceSplit = splitStackTrace(newStackTrace);
|
|
27
|
+
errorCopy.stack = [
|
|
28
|
+
...errorStacktraceSplit.head,
|
|
29
|
+
...newStacktraceSplit.codelines,
|
|
30
|
+
' ',
|
|
31
|
+
...errorStacktraceSplit.head,
|
|
32
|
+
...errorStacktraceSplit.codelines,
|
|
33
|
+
].join('\n');
|
|
34
|
+
return errorCopy;
|
|
35
|
+
}
|
|
9
36
|
var Separators;
|
|
10
37
|
(function (Separators) {
|
|
11
38
|
Separators["STRING"] = "<|string|>";
|
|
@@ -30,12 +57,8 @@ class FluentBase {
|
|
|
30
57
|
const newParamsList = FluentBase.addParams(paramsList, this._params);
|
|
31
58
|
if (this instanceof FluentCommand) {
|
|
32
59
|
const fluentCommand = this;
|
|
33
|
-
const customElements = newParamsList.has('customElement')
|
|
34
|
-
|
|
35
|
-
: [];
|
|
36
|
-
const aiElementNames = newParamsList.has('aiElementName')
|
|
37
|
-
? newParamsList.get('aiElementName')
|
|
38
|
-
: [];
|
|
60
|
+
const customElements = newParamsList.has('customElement') ? newParamsList.get('customElement') : [];
|
|
61
|
+
const aiElementNames = newParamsList.has('aiElementName') ? newParamsList.get('aiElementName') : [];
|
|
39
62
|
return fluentCommand.fluentCommandExecutor(newCurrentInstruction.trim(), {
|
|
40
63
|
customElementsJson: customElements,
|
|
41
64
|
aiElementNames,
|
|
@@ -51,12 +74,8 @@ class FluentBase {
|
|
|
51
74
|
const newParamsList = FluentBase.addParams(paramsList, this._params);
|
|
52
75
|
if (this instanceof Getter) {
|
|
53
76
|
const getter = this;
|
|
54
|
-
const customElements = newParamsList.has('customElement')
|
|
55
|
-
|
|
56
|
-
: [];
|
|
57
|
-
const aiElementNames = newParamsList.has('aiElementName')
|
|
58
|
-
? newParamsList.get('aiElementName')
|
|
59
|
-
: [];
|
|
77
|
+
const customElements = newParamsList.has('customElement') ? newParamsList.get('customElement') : [];
|
|
78
|
+
const aiElementNames = newParamsList.has('aiElementName') ? newParamsList.get('aiElementName') : [];
|
|
60
79
|
return getter.getterExecutor(newCurrentInstruction.trim(), {
|
|
61
80
|
customElementsJson: customElements,
|
|
62
81
|
aiElementNames,
|
|
@@ -67,16 +86,14 @@ class FluentBase {
|
|
|
67
86
|
}
|
|
68
87
|
return this.prev.getterStringBuilder(newCurrentInstruction, newParamsList);
|
|
69
88
|
}
|
|
70
|
-
get textStr() {
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
get params() {
|
|
74
|
-
return this._params;
|
|
75
|
-
}
|
|
89
|
+
get textStr() { return this._textStr; }
|
|
90
|
+
get params() { return this._params; }
|
|
76
91
|
}
|
|
77
92
|
class Exec extends FluentBase {
|
|
78
93
|
exec() {
|
|
79
|
-
|
|
94
|
+
const originStacktrace = { stack: '' };
|
|
95
|
+
Error.captureStackTrace(originStacktrace, this.exec);
|
|
96
|
+
return this.fluentCommandStringBuilder().catch((err) => Promise.reject(rewriteStackTraceForError(err, originStacktrace.stack)));
|
|
80
97
|
}
|
|
81
98
|
}
|
|
82
99
|
exports.Exec = Exec;
|
|
@@ -1074,7 +1091,9 @@ class FluentFiltersOrRelations extends FluentFilters {
|
|
|
1074
1091
|
return new FluentFilters(this);
|
|
1075
1092
|
}
|
|
1076
1093
|
exec() {
|
|
1077
|
-
|
|
1094
|
+
const originStacktrace = { stack: '' };
|
|
1095
|
+
Error.captureStackTrace(originStacktrace, this.exec);
|
|
1096
|
+
return this.fluentCommandStringBuilder().catch((err) => Promise.reject(rewriteStackTraceForError(err, originStacktrace.stack)));
|
|
1078
1097
|
}
|
|
1079
1098
|
}
|
|
1080
1099
|
exports.FluentFiltersOrRelations = FluentFiltersOrRelations;
|
|
@@ -2433,16 +2452,20 @@ class FluentCommand extends FluentBase {
|
|
|
2433
2452
|
* await aui.execOnShell("chrome").exec();
|
|
2434
2453
|
* ```
|
|
2435
2454
|
*
|
|
2436
|
-
* @param {string}
|
|
2455
|
+
* @param {string} shellCommand - A shell command which is executed.
|
|
2456
|
+
* @param {number} [timeoutInMilliseconds=1] - A timeout in milliseconds.
|
|
2437
2457
|
*
|
|
2438
2458
|
* @return {Exec}
|
|
2439
2459
|
*/
|
|
2440
|
-
execOnShell(
|
|
2460
|
+
execOnShell(shellCommand, timeoutInMilliseconds = 1) {
|
|
2441
2461
|
this._textStr = '';
|
|
2442
2462
|
this._textStr += 'Execute';
|
|
2443
2463
|
this._textStr += ' shell';
|
|
2444
2464
|
this._textStr += ' command';
|
|
2445
|
-
this._textStr += ` ${Separators.STRING}${
|
|
2465
|
+
this._textStr += ` ${Separators.STRING}${shellCommand}${Separators.STRING}`;
|
|
2466
|
+
if (timeoutInMilliseconds !== undefined) {
|
|
2467
|
+
this._textStr += ` with ${timeoutInMilliseconds} milliseconds timeout`;
|
|
2468
|
+
}
|
|
2446
2469
|
return new Exec(this);
|
|
2447
2470
|
}
|
|
2448
2471
|
/**
|
|
@@ -3751,10 +3774,10 @@ class FluentFiltersOrRelationsGetter extends FluentFiltersGetter {
|
|
|
3751
3774
|
return new FluentFiltersGetter(this);
|
|
3752
3775
|
}
|
|
3753
3776
|
/**
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3777
|
+
* Returns a list of detected elements
|
|
3778
|
+
*
|
|
3779
|
+
* @return {DetectedElement[]}
|
|
3780
|
+
*/
|
|
3758
3781
|
exec() {
|
|
3759
3782
|
return this.getterStringBuilder();
|
|
3760
3783
|
}
|
|
@@ -237,6 +237,25 @@ class CreateExampleProject {
|
|
|
237
237
|
];
|
|
238
238
|
});
|
|
239
239
|
}
|
|
240
|
+
copyGitignore() {
|
|
241
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
242
|
+
const gitignoreFilePath = path_1.default.join('example_projects_templates', 'typescript', '.gitignore');
|
|
243
|
+
return [{
|
|
244
|
+
title: 'Copy .gitignore',
|
|
245
|
+
task: () => __awaiter(this, void 0, void 0, function* () {
|
|
246
|
+
return new listr_1.default([
|
|
247
|
+
{
|
|
248
|
+
title: 'Add .gitignore',
|
|
249
|
+
task: () => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
return fs_extra_1.default.copyFile(path_1.default.join((0, path_2.getPathToNodeModulesRoot)(), gitignoreFilePath), path_1.default.join(this.projectRootDirectoryPath, '.gitignore'));
|
|
251
|
+
}),
|
|
252
|
+
},
|
|
253
|
+
]);
|
|
254
|
+
}),
|
|
255
|
+
},
|
|
256
|
+
];
|
|
257
|
+
});
|
|
258
|
+
}
|
|
240
259
|
copyTsConfigFile() {
|
|
241
260
|
return __awaiter(this, void 0, void 0, function* () {
|
|
242
261
|
const tsConfigFilePath = path_1.default.join('example_projects_templates', 'typescript', 'tsconfig.json');
|
|
@@ -261,6 +280,7 @@ class CreateExampleProject {
|
|
|
261
280
|
...(yield this.copyTemplateProject()),
|
|
262
281
|
...(yield this.setupTestFrameWork()),
|
|
263
282
|
...(yield this.copyESLintConfigFiles()),
|
|
283
|
+
...(yield this.copyGitignore()),
|
|
264
284
|
...(yield this.copyTsConfigFile()),
|
|
265
285
|
...(yield this.addUserCredentials()),
|
|
266
286
|
...(yield this.createAskUIHelperFromTemplate()),
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { InputEvent } from './input-event';
|
|
2
|
+
export declare type ActionParameters = {
|
|
3
|
+
[key: string]: string | number | boolean | string[] | ActionParameters;
|
|
4
|
+
};
|
|
2
5
|
export declare class Action {
|
|
3
6
|
inputEvent: InputEvent;
|
|
4
7
|
position: {
|
|
@@ -6,9 +9,10 @@ export declare class Action {
|
|
|
6
9
|
y: number;
|
|
7
10
|
};
|
|
8
11
|
text: string;
|
|
12
|
+
parameters: ActionParameters;
|
|
9
13
|
constructor(inputEvent: InputEvent, position: {
|
|
10
14
|
x: number;
|
|
11
15
|
y: number;
|
|
12
|
-
}, text: string);
|
|
16
|
+
}, text: string, parameters?: ActionParameters);
|
|
13
17
|
static fromJson(action: Action, resizeRatio?: number): Action;
|
|
14
18
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { InputEvent } from './input-event';
|
|
2
2
|
export class Action {
|
|
3
|
-
constructor(inputEvent, position, text) {
|
|
3
|
+
constructor(inputEvent, position, text, parameters = {}) {
|
|
4
4
|
this.inputEvent = inputEvent;
|
|
5
5
|
this.position = position;
|
|
6
6
|
this.text = text;
|
|
7
|
+
this.parameters = parameters;
|
|
7
8
|
}
|
|
8
9
|
static fromJson(action, resizeRatio = 1) {
|
|
9
10
|
return new Action(InputEvent[action.inputEvent], {
|
|
10
11
|
x: action.position.x * resizeRatio,
|
|
11
12
|
y: action.position.y * resizeRatio,
|
|
12
|
-
}, action.text);
|
|
13
|
+
}, action.text, action.parameters ? action.parameters : {});
|
|
13
14
|
}
|
|
14
15
|
}
|
|
@@ -13,6 +13,6 @@ export class ControlCommand {
|
|
|
13
13
|
}
|
|
14
14
|
setTextToBeTyped(text) {
|
|
15
15
|
this.actions = this.actions.map((action) => ([InputEvent.TYPE, InputEvent.TYPE_TEXT].includes(action.inputEvent)
|
|
16
|
-
? new Action(action.inputEvent, action.position, text) : action));
|
|
16
|
+
? new Action(action.inputEvent, action.position, text, action.parameters) : action));
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -1913,11 +1913,12 @@ export declare abstract class FluentCommand extends FluentBase {
|
|
|
1913
1913
|
* await aui.execOnShell("chrome").exec();
|
|
1914
1914
|
* ```
|
|
1915
1915
|
*
|
|
1916
|
-
* @param {string}
|
|
1916
|
+
* @param {string} shellCommand - A shell command which is executed.
|
|
1917
|
+
* @param {number} [timeoutInMilliseconds=1] - A timeout in milliseconds.
|
|
1917
1918
|
*
|
|
1918
1919
|
* @return {Exec}
|
|
1919
1920
|
*/
|
|
1920
|
-
execOnShell(
|
|
1921
|
+
execOnShell(shellCommand: string, timeoutInMilliseconds?: number): Exec;
|
|
1921
1922
|
/**
|
|
1922
1923
|
* Clicks with left mouse key.
|
|
1923
1924
|
*
|
|
@@ -2962,10 +2963,10 @@ export declare class FluentFiltersOrRelationsGetter extends FluentFiltersGetter
|
|
|
2962
2963
|
*/
|
|
2963
2964
|
contains(): FluentFiltersGetter;
|
|
2964
2965
|
/**
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2966
|
+
* Returns a list of detected elements
|
|
2967
|
+
*
|
|
2968
|
+
* @return {DetectedElement[]}
|
|
2969
|
+
*/
|
|
2969
2970
|
exec(): Promise<DetectedElement[]>;
|
|
2970
2971
|
}
|
|
2971
2972
|
export declare abstract class Getter extends FluentCommand {
|
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
/* eslint-disable max-classes-per-file */
|
|
4
4
|
/* eslint-disable max-len */
|
|
5
5
|
// Autogenerated from typescript.template file
|
|
6
|
+
function isStackTraceCodeline(line) {
|
|
7
|
+
return /[ \t]+at .+/.test(line);
|
|
8
|
+
}
|
|
9
|
+
function splitStackTrace(stacktrace) {
|
|
10
|
+
const errorStackTraceLines = stacktrace.split('\n');
|
|
11
|
+
const errorIndexOfFirstCodeLine = errorStackTraceLines.findIndex(isStackTraceCodeline);
|
|
12
|
+
const errorStacktraceHead = errorStackTraceLines.slice(0, errorIndexOfFirstCodeLine);
|
|
13
|
+
const errorStacktraceCodeLines = errorStackTraceLines.slice(errorIndexOfFirstCodeLine);
|
|
14
|
+
return { head: errorStacktraceHead, codelines: errorStacktraceCodeLines };
|
|
15
|
+
}
|
|
16
|
+
function rewriteStackTraceForError(error, newStackTrace) {
|
|
17
|
+
const errorCopy = new Error(error.message);
|
|
18
|
+
if (!error.stack) {
|
|
19
|
+
errorCopy.stack = newStackTrace;
|
|
20
|
+
return errorCopy;
|
|
21
|
+
}
|
|
22
|
+
const errorStacktraceSplit = splitStackTrace(error.stack);
|
|
23
|
+
const newStacktraceSplit = splitStackTrace(newStackTrace);
|
|
24
|
+
errorCopy.stack = [
|
|
25
|
+
...errorStacktraceSplit.head,
|
|
26
|
+
...newStacktraceSplit.codelines,
|
|
27
|
+
' ',
|
|
28
|
+
...errorStacktraceSplit.head,
|
|
29
|
+
...errorStacktraceSplit.codelines,
|
|
30
|
+
].join('\n');
|
|
31
|
+
return errorCopy;
|
|
32
|
+
}
|
|
6
33
|
export var Separators;
|
|
7
34
|
(function (Separators) {
|
|
8
35
|
Separators["STRING"] = "<|string|>";
|
|
@@ -27,12 +54,8 @@ class FluentBase {
|
|
|
27
54
|
const newParamsList = FluentBase.addParams(paramsList, this._params);
|
|
28
55
|
if (this instanceof FluentCommand) {
|
|
29
56
|
const fluentCommand = this;
|
|
30
|
-
const customElements = newParamsList.has('customElement')
|
|
31
|
-
|
|
32
|
-
: [];
|
|
33
|
-
const aiElementNames = newParamsList.has('aiElementName')
|
|
34
|
-
? newParamsList.get('aiElementName')
|
|
35
|
-
: [];
|
|
57
|
+
const customElements = newParamsList.has('customElement') ? newParamsList.get('customElement') : [];
|
|
58
|
+
const aiElementNames = newParamsList.has('aiElementName') ? newParamsList.get('aiElementName') : [];
|
|
36
59
|
return fluentCommand.fluentCommandExecutor(newCurrentInstruction.trim(), {
|
|
37
60
|
customElementsJson: customElements,
|
|
38
61
|
aiElementNames,
|
|
@@ -48,12 +71,8 @@ class FluentBase {
|
|
|
48
71
|
const newParamsList = FluentBase.addParams(paramsList, this._params);
|
|
49
72
|
if (this instanceof Getter) {
|
|
50
73
|
const getter = this;
|
|
51
|
-
const customElements = newParamsList.has('customElement')
|
|
52
|
-
|
|
53
|
-
: [];
|
|
54
|
-
const aiElementNames = newParamsList.has('aiElementName')
|
|
55
|
-
? newParamsList.get('aiElementName')
|
|
56
|
-
: [];
|
|
74
|
+
const customElements = newParamsList.has('customElement') ? newParamsList.get('customElement') : [];
|
|
75
|
+
const aiElementNames = newParamsList.has('aiElementName') ? newParamsList.get('aiElementName') : [];
|
|
57
76
|
return getter.getterExecutor(newCurrentInstruction.trim(), {
|
|
58
77
|
customElementsJson: customElements,
|
|
59
78
|
aiElementNames,
|
|
@@ -64,16 +83,14 @@ class FluentBase {
|
|
|
64
83
|
}
|
|
65
84
|
return this.prev.getterStringBuilder(newCurrentInstruction, newParamsList);
|
|
66
85
|
}
|
|
67
|
-
get textStr() {
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
get params() {
|
|
71
|
-
return this._params;
|
|
72
|
-
}
|
|
86
|
+
get textStr() { return this._textStr; }
|
|
87
|
+
get params() { return this._params; }
|
|
73
88
|
}
|
|
74
89
|
export class Exec extends FluentBase {
|
|
75
90
|
exec() {
|
|
76
|
-
|
|
91
|
+
const originStacktrace = { stack: '' };
|
|
92
|
+
Error.captureStackTrace(originStacktrace, this.exec);
|
|
93
|
+
return this.fluentCommandStringBuilder().catch((err) => Promise.reject(rewriteStackTraceForError(err, originStacktrace.stack)));
|
|
77
94
|
}
|
|
78
95
|
}
|
|
79
96
|
// Filters
|
|
@@ -1069,7 +1086,9 @@ export class FluentFiltersOrRelations extends FluentFilters {
|
|
|
1069
1086
|
return new FluentFilters(this);
|
|
1070
1087
|
}
|
|
1071
1088
|
exec() {
|
|
1072
|
-
|
|
1089
|
+
const originStacktrace = { stack: '' };
|
|
1090
|
+
Error.captureStackTrace(originStacktrace, this.exec);
|
|
1091
|
+
return this.fluentCommandStringBuilder().catch((err) => Promise.reject(rewriteStackTraceForError(err, originStacktrace.stack)));
|
|
1073
1092
|
}
|
|
1074
1093
|
}
|
|
1075
1094
|
// Filters
|
|
@@ -2425,16 +2444,20 @@ export class FluentCommand extends FluentBase {
|
|
|
2425
2444
|
* await aui.execOnShell("chrome").exec();
|
|
2426
2445
|
* ```
|
|
2427
2446
|
*
|
|
2428
|
-
* @param {string}
|
|
2447
|
+
* @param {string} shellCommand - A shell command which is executed.
|
|
2448
|
+
* @param {number} [timeoutInMilliseconds=1] - A timeout in milliseconds.
|
|
2429
2449
|
*
|
|
2430
2450
|
* @return {Exec}
|
|
2431
2451
|
*/
|
|
2432
|
-
execOnShell(
|
|
2452
|
+
execOnShell(shellCommand, timeoutInMilliseconds = 1) {
|
|
2433
2453
|
this._textStr = '';
|
|
2434
2454
|
this._textStr += 'Execute';
|
|
2435
2455
|
this._textStr += ' shell';
|
|
2436
2456
|
this._textStr += ' command';
|
|
2437
|
-
this._textStr += ` ${Separators.STRING}${
|
|
2457
|
+
this._textStr += ` ${Separators.STRING}${shellCommand}${Separators.STRING}`;
|
|
2458
|
+
if (timeoutInMilliseconds !== undefined) {
|
|
2459
|
+
this._textStr += ` with ${timeoutInMilliseconds} milliseconds timeout`;
|
|
2460
|
+
}
|
|
2438
2461
|
return new Exec(this);
|
|
2439
2462
|
}
|
|
2440
2463
|
/**
|
|
@@ -3740,10 +3763,10 @@ export class FluentFiltersOrRelationsGetter extends FluentFiltersGetter {
|
|
|
3740
3763
|
return new FluentFiltersGetter(this);
|
|
3741
3764
|
}
|
|
3742
3765
|
/**
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3766
|
+
* Returns a list of detected elements
|
|
3767
|
+
*
|
|
3768
|
+
* @return {DetectedElement[]}
|
|
3769
|
+
*/
|
|
3747
3770
|
exec() {
|
|
3748
3771
|
return this.getterStringBuilder();
|
|
3749
3772
|
}
|
|
@@ -231,6 +231,25 @@ export class CreateExampleProject {
|
|
|
231
231
|
];
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
|
+
copyGitignore() {
|
|
235
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
236
|
+
const gitignoreFilePath = path.join('example_projects_templates', 'typescript', '.gitignore');
|
|
237
|
+
return [{
|
|
238
|
+
title: 'Copy .gitignore',
|
|
239
|
+
task: () => __awaiter(this, void 0, void 0, function* () {
|
|
240
|
+
return new Listr([
|
|
241
|
+
{
|
|
242
|
+
title: 'Add .gitignore',
|
|
243
|
+
task: () => __awaiter(this, void 0, void 0, function* () {
|
|
244
|
+
return fs.copyFile(path.join(getPathToNodeModulesRoot(), gitignoreFilePath), path.join(this.projectRootDirectoryPath, '.gitignore'));
|
|
245
|
+
}),
|
|
246
|
+
},
|
|
247
|
+
]);
|
|
248
|
+
}),
|
|
249
|
+
},
|
|
250
|
+
];
|
|
251
|
+
});
|
|
252
|
+
}
|
|
234
253
|
copyTsConfigFile() {
|
|
235
254
|
return __awaiter(this, void 0, void 0, function* () {
|
|
236
255
|
const tsConfigFilePath = path.join('example_projects_templates', 'typescript', 'tsconfig.json');
|
|
@@ -255,6 +274,7 @@ export class CreateExampleProject {
|
|
|
255
274
|
...(yield this.copyTemplateProject()),
|
|
256
275
|
...(yield this.setupTestFrameWork()),
|
|
257
276
|
...(yield this.copyESLintConfigFiles()),
|
|
277
|
+
...(yield this.copyGitignore()),
|
|
258
278
|
...(yield this.copyTsConfigFile()),
|
|
259
279
|
...(yield this.addUserCredentials()),
|
|
260
280
|
...(yield this.createAskUIHelperFromTemplate()),
|
|
@@ -17,12 +17,16 @@ beforeAll(async () => {
|
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
beforeEach(async () => {
|
|
20
|
+
/* Uncomment to enable video recording
|
|
20
21
|
await aui.startVideoRecording();
|
|
22
|
+
*/
|
|
21
23
|
});
|
|
22
24
|
|
|
23
25
|
afterEach(async () => {
|
|
26
|
+
/* Uncomment to enable video recording
|
|
24
27
|
await aui.stopVideoRecording();
|
|
25
28
|
{{ allure_stepreporter_attach_video }}
|
|
29
|
+
*/
|
|
26
30
|
});
|
|
27
31
|
|
|
28
32
|
afterAll(async () => {
|
|
@@ -29,12 +29,16 @@ beforeAll(async () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
beforeEach(async () => {
|
|
32
|
+
/* Uncomment to enable video recording
|
|
32
33
|
await aui.startVideoRecording();
|
|
34
|
+
*/
|
|
33
35
|
});
|
|
34
36
|
|
|
35
37
|
afterEach(async () => {
|
|
38
|
+
/* Uncomment to enable video recording
|
|
36
39
|
await aui.stopVideoRecording();
|
|
37
40
|
{{ allure_stepreporter_attach_video }}
|
|
41
|
+
*/
|
|
38
42
|
});
|
|
39
43
|
|
|
40
44
|
afterAll(async () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "askui",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "askui GmbH <info@askui.com> (http://www.askui.com/)",
|
|
6
6
|
"description": "Reliable, automated end-to-end-testing that depends on what is shown on your screen instead of the technology you are running on",
|