@mablhq/mabl-cli 2.72.4 → 2.72.12
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/browserEngines/chromiumBrowserEngine.js +17 -0
- package/browserLauncher/index.js +3 -3
- package/commands/mcp/mcp_cmds/tools/createTest.js +10 -0
- package/commands/mcp/mcp_cmds/tools/getApplications.js +69 -0
- package/commands/mcp/mcp_cmds/tools/{getPlanResults.js → getLatestPlanRuns.js} +6 -6
- package/commands/mcp/mcp_cmds/tools/{getPlanRun.js → getPlanRunResult.js} +5 -5
- package/commands/mcp/mcp_cmds/tools/index.js +6 -4
- package/core/execution/ApiTestUtils.js +3 -1
- package/execution/index.js +1 -1
- package/http/requestInterceptor.js +10 -5
- package/index.d.ts +2 -0
- package/mablscript/MablStepV2.js +40 -10
- package/mablscript/MablStepWithFindAction.js +126 -2
- package/mablscript/actions/AwaitDownloadAction.js +4 -3
- package/mablscript/actions/AwaitPDFDownloadAction.js +6 -5
- package/mablscript/actions/ConditionAction.js +2 -1
- package/mablscript/actions/ExtractAction.js +8 -13
- package/mablscript/actions/FindAction.js +20 -0
- package/mablscript/actions/GetVariableValue.js +15 -4
- package/mablscript/actions/JavaScriptAction.js +25 -39
- package/mablscript/diffing/diffingUtil.js +5 -5
- package/mablscript/importer.js +79 -59
- package/mablscript/mobile/steps/CreateVariableMobileStep.js +3 -1
- package/mablscript/steps/AbstractAssertionsAndVariablesStep.js +10 -8
- package/mablscript/steps/AccessibilityCheck.js +78 -36
- package/mablscript/steps/AssertStep.js +267 -86
- package/mablscript/steps/AssertStepOld.js +69 -139
- package/mablscript/steps/AwaitTabStep.js +32 -9
- package/mablscript/steps/AwaitUploadsStep.js +24 -8
- package/mablscript/steps/ClearCookiesStep.js +24 -8
- package/mablscript/steps/ClickAndHoldStep.js +47 -47
- package/mablscript/steps/ClickStep.js +38 -33
- package/mablscript/steps/CreateVariableStep.js +169 -137
- package/mablscript/steps/DatabaseQueryStep.js +16 -4
- package/mablscript/steps/DoubleClickStep.js +39 -40
- package/mablscript/steps/DownloadStep.js +81 -63
- package/mablscript/steps/EchoStep.js +28 -8
- package/mablscript/steps/ElseIfConditionStep.js +25 -12
- package/mablscript/steps/ElseStep.js +24 -9
- package/mablscript/steps/EndStep.js +24 -9
- package/mablscript/steps/EnterAuthCodeStep.js +38 -34
- package/mablscript/steps/EnterTextStep.js +53 -64
- package/mablscript/steps/EvaluateFlowStep.js +41 -18
- package/mablscript/steps/EvaluateJavaScriptStep.js +19 -19
- package/mablscript/steps/HoverStep.js +39 -39
- package/mablscript/steps/IfConditionStep.js +141 -99
- package/mablscript/steps/NavigateStep.js +31 -9
- package/mablscript/steps/OpenEmailStep.js +41 -21
- package/mablscript/steps/ReleaseStep.js +48 -38
- package/mablscript/steps/RemoveCookieStep.js +27 -9
- package/mablscript/steps/RightClickStep.js +38 -33
- package/mablscript/steps/SelectStep.js +71 -46
- package/mablscript/steps/SendHttpRequestStep.js +11 -4
- package/mablscript/steps/SendKeyStep.js +175 -49
- package/mablscript/steps/SetCookieStep.js +58 -23
- package/mablscript/steps/SetFilesStep.js +44 -43
- package/mablscript/steps/SetViewportStep.js +40 -12
- package/mablscript/steps/StepGroupStep.js +70 -0
- package/mablscript/steps/SwitchContextStep.js +93 -83
- package/mablscript/steps/SyntheticStep.js +1 -1
- package/mablscript/steps/VisitUrlStep.js +31 -21
- package/mablscript/steps/WaitStep.js +21 -8
- package/mablscript/steps/WaitUntilStep.js +32 -13
- package/mablscript/types/AssertStepDescriptor.js +2 -0
- package/mablscript/types/ConditionDescriptor.js +5 -5
- package/mablscript/types/GetVariableDescriptor.js +0 -8
- package/mablscript/types/StepGroupStepDescriptor.js +2 -0
- package/package.json +4 -4
- package/proxy/index.js +1 -1
- package/upload/index.js +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AssertStep = exports.assertStepYamlMablscriptNames = exports.MAX_AI_ASSERTIONS_PER_CLOUD_RUN = exports.OnFailure = void 0;
|
|
4
|
+
exports.buildAssertStepDescriptor = buildAssertStepDescriptor;
|
|
4
5
|
const ConditionAction_1 = require("../actions/ConditionAction");
|
|
5
6
|
const FindAction_1 = require("../actions/FindAction");
|
|
6
|
-
const MablStep_1 = require("../MablStep");
|
|
7
7
|
const MablAction_1 = require("../MablAction");
|
|
8
8
|
const ExtractAction_1 = require("../actions/ExtractAction");
|
|
9
9
|
const domUtil_1 = require("../../domUtil");
|
|
@@ -16,6 +16,9 @@ const CountAction_1 = require("../actions/CountAction");
|
|
|
16
16
|
const MobileFindAction_1 = require("../mobile/steps/actions/MobileFindAction");
|
|
17
17
|
const GetViewportDescriptor_1 = require("../types/GetViewportDescriptor");
|
|
18
18
|
const GetViewportAction_1 = require("../actions/GetViewportAction");
|
|
19
|
+
const MablStepV2_1 = require("../MablStepV2");
|
|
20
|
+
const MablStepWithFindAction_1 = require("../MablStepWithFindAction");
|
|
21
|
+
const AssertStepOld_1 = require("./AssertStepOld");
|
|
19
22
|
var OnFailure;
|
|
20
23
|
(function (OnFailure) {
|
|
21
24
|
OnFailure["ContinueWithWarning"] = "continue";
|
|
@@ -29,9 +32,11 @@ const assertStepYamlMablscriptNames = () => {
|
|
|
29
32
|
return assertionNames;
|
|
30
33
|
};
|
|
31
34
|
exports.assertStepYamlMablscriptNames = assertStepYamlMablscriptNames;
|
|
32
|
-
class AssertStep extends
|
|
33
|
-
constructor(name, args, actions) {
|
|
34
|
-
|
|
35
|
+
class AssertStep extends MablStepV2_1.MablStepV2 {
|
|
36
|
+
constructor(name, args, actions, descriptor) {
|
|
37
|
+
const stepDescriptor = descriptor ?? buildAssertStepDescriptor(name, args, actions);
|
|
38
|
+
super(name, stepDescriptor, AssertStep.actionCode);
|
|
39
|
+
this.actions = actions;
|
|
35
40
|
const firstAction = actions[0];
|
|
36
41
|
if (firstAction instanceof FindAction_1.FindAction ||
|
|
37
42
|
firstAction instanceof MobileFindAction_1.MobileFindAction ||
|
|
@@ -72,14 +77,13 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
72
77
|
this.assertionType = (0, ConditionDescriptor_1.getAssertionConditionFieldFromDescriptor)(this.conditionAction.conditionDescriptor);
|
|
73
78
|
this.assertionValue = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionAction.conditionDescriptor);
|
|
74
79
|
this.isWaitUntilStep = this.determineIfWaitUntilStep();
|
|
75
|
-
this.assertArguments =
|
|
76
|
-
args[0] && typeof args[0] === 'object'
|
|
77
|
-
? args[0]
|
|
78
|
-
: undefined;
|
|
79
80
|
this.onFailure =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
'onFailure' in stepDescriptor && stepDescriptor.onFailure
|
|
82
|
+
? stepDescriptor.onFailure
|
|
83
|
+
: OnFailure.FailImmediately;
|
|
84
|
+
if ('observationScope' in stepDescriptor) {
|
|
85
|
+
this.observationScope = stepDescriptor.observationScope;
|
|
86
|
+
}
|
|
83
87
|
}
|
|
84
88
|
canContinueOnFailure() {
|
|
85
89
|
return this.onFailure !== OnFailure.FailImmediately;
|
|
@@ -112,77 +116,47 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
112
116
|
return ConditionDescriptor_1.AssertionConditionFieldToStepName[this.assertionType];
|
|
113
117
|
}
|
|
114
118
|
toStepDescriptor() {
|
|
115
|
-
const
|
|
119
|
+
const target = this.primaryAction.toDescriptor();
|
|
116
120
|
const descriptorToActionMap = new Map()
|
|
117
|
-
.set(
|
|
121
|
+
.set(target, this.primaryAction)
|
|
118
122
|
.set(this.conditionAction.conditionDescriptor, this.conditionAction);
|
|
119
|
-
|
|
120
|
-
|
|
123
|
+
const extractDescriptor = this.extractAction?.toDescriptor();
|
|
124
|
+
if (this.extractAction && extractDescriptor) {
|
|
125
|
+
descriptorToActionMap.set(extractDescriptor, this.extractAction);
|
|
121
126
|
}
|
|
122
127
|
if (this.countAction) {
|
|
123
128
|
descriptorToActionMap.set(this.countAction.countDescriptor, this.countAction);
|
|
124
129
|
}
|
|
125
130
|
return {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
target,
|
|
132
|
+
extract: extractDescriptor,
|
|
133
|
+
condition: this.conditionAction.conditionDescriptor,
|
|
134
|
+
count: this.countAction?.countDescriptor,
|
|
130
135
|
onFailure: this.onFailure,
|
|
131
136
|
observationScope: this.observationScope,
|
|
132
137
|
descriptorToActionMap,
|
|
133
138
|
actionCode: this.actionCode,
|
|
134
139
|
};
|
|
135
140
|
}
|
|
136
|
-
getFormattedStep(_fullLocatorsOn) {
|
|
137
|
-
const result = {};
|
|
138
|
-
result[this.getStepName()] = { ...this.annotationsAsYml() };
|
|
139
|
-
const formatted = result[this.getStepName()];
|
|
140
|
-
if (this.extractAction) {
|
|
141
|
-
formatted.attribute = this.extractAction.extractionAttribute;
|
|
142
|
-
formatted.extractType =
|
|
143
|
-
ExtractAction_1.ExtractAction.mablscriptToYamlType[this.extractAction.extractionType];
|
|
144
|
-
}
|
|
145
|
-
if (this.countAction) {
|
|
146
|
-
formatted.attribute = 'count';
|
|
147
|
-
}
|
|
148
|
-
if (this.assertionValue !== undefined) {
|
|
149
|
-
formatted.assertionValue = this.assertionValue;
|
|
150
|
-
}
|
|
151
|
-
if (this.aiPrompt !== undefined) {
|
|
152
|
-
formatted.aiPrompt = this.aiPrompt;
|
|
153
|
-
}
|
|
154
|
-
const targetDescriptor = this.primaryAction.toDescriptor();
|
|
155
|
-
if ((0, GetVariableDescriptor_1.isGetVariableDescriptor)(targetDescriptor)) {
|
|
156
|
-
formatted.target = (0, GetVariableDescriptor_1.convertGetVariableDescriptorToYaml)(targetDescriptor);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
formatted.target = targetDescriptor;
|
|
160
|
-
}
|
|
161
|
-
if (this.conditionAction.hasOptionsAtInstantiation) {
|
|
162
|
-
formatted.conditionOptions = (0, ConditionDescriptor_1.getOptionalConditionOptions)(this.conditionAction.conditionDescriptor);
|
|
163
|
-
}
|
|
164
|
-
if (!!this.assertArguments?.observationScope ||
|
|
165
|
-
!!this.assertArguments?.onFailure) {
|
|
166
|
-
formatted.assertArguments = this.assertArguments;
|
|
167
|
-
}
|
|
168
|
-
result[this.getStepName()] =
|
|
169
|
-
MablStep_1.MablStep.cloneAndRemoveUndefinedEntriesFromObject(formatted);
|
|
170
|
-
if (this.stepId()) {
|
|
171
|
-
result[this.getStepName()].id = this.stepId();
|
|
172
|
-
}
|
|
173
|
-
return result;
|
|
174
|
-
}
|
|
175
141
|
static fromYaml(stepName, stepArgs) {
|
|
176
142
|
const actions = [];
|
|
177
143
|
const assertionType = ConditionDescriptor_1.AssertionStepNameToField[stepName];
|
|
178
|
-
const assertionValue = stepArgs.assertionValue
|
|
179
|
-
|
|
144
|
+
const assertionValue = stepArgs.assertionValue ??
|
|
145
|
+
stepArgs.conditionDescriptor?.comparatorValue ??
|
|
146
|
+
stepArgs.condition?.comparatorValue;
|
|
147
|
+
const conditionOptions = stepArgs.conditionOptions
|
|
148
|
+
?.caseInsensitive
|
|
149
|
+
? { caseInsensitive: stepArgs.conditionOptions.caseInsensitive }
|
|
150
|
+
: {
|
|
151
|
+
caseInsensitive: stepArgs.conditionDescriptor?.caseInsensitive ??
|
|
152
|
+
stepArgs.condition?.caseInsensitive,
|
|
153
|
+
};
|
|
180
154
|
let primaryAction;
|
|
181
155
|
if (stepArgs.target?.kind === GetCurrentLocationDescriptor_1.GET_CURRENT_LOCATION_KIND) {
|
|
182
156
|
primaryAction = new GetUrlAction_1.GetUrlAction(GetUrlAction_1.GetUrlAction.mablScriptStepNames[0], []);
|
|
183
157
|
}
|
|
184
|
-
else if (
|
|
185
|
-
primaryAction =
|
|
158
|
+
else if ((0, GetVariableDescriptor_1.isGetVariableDescriptor)(stepArgs.target)) {
|
|
159
|
+
primaryAction = GetVariableValue_1.GetVariableValue.buildAction(stepArgs.target.variable);
|
|
186
160
|
}
|
|
187
161
|
else if ((0, GetViewportDescriptor_1.isGetViewportDescriptor)(stepArgs.target)) {
|
|
188
162
|
primaryAction = new GetViewportAction_1.GetViewportAction();
|
|
@@ -199,7 +173,10 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
199
173
|
else if ((0, domUtil_1.isFindElementDescriptor)(stepArgs.target)) {
|
|
200
174
|
const { findOptions, findTarget, findType } = stepArgs.target;
|
|
201
175
|
if (findType === domUtil_1.FindType.FIND_ONE) {
|
|
202
|
-
|
|
176
|
+
const findArgument = findTarget.shadowParents
|
|
177
|
+
? findTarget
|
|
178
|
+
: findTarget.selector;
|
|
179
|
+
primaryAction = new FindAction_1.FindAction(findType, [findArgument, findOptions]);
|
|
203
180
|
}
|
|
204
181
|
else {
|
|
205
182
|
primaryAction = new FindAction_1.FindAction(findType, [findTarget, findOptions]);
|
|
@@ -209,41 +186,107 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
209
186
|
throw new Error(`Error parsing [${stepName}] with incompatible step arguments`);
|
|
210
187
|
}
|
|
211
188
|
actions.push(primaryAction);
|
|
189
|
+
let extractAction;
|
|
190
|
+
let countAction;
|
|
191
|
+
let conditionAction;
|
|
212
192
|
if (assertionType === 'ai_prompt') {
|
|
213
|
-
|
|
214
|
-
stepArgs.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
193
|
+
const userPrompt = stepArgs.aiPrompt?.userPrompt ??
|
|
194
|
+
stepArgs.userPrompt ??
|
|
195
|
+
stepArgs.conditionDescriptor?.userPrompt ??
|
|
196
|
+
stepArgs.condition?.userPrompt;
|
|
197
|
+
const conditionArgs = [userPrompt];
|
|
198
|
+
const metaPrompt = stepArgs.aiPrompt?.metaPrompt ??
|
|
199
|
+
stepArgs.metaPrompt ??
|
|
200
|
+
stepArgs.conditionDescriptor?.metaPrompt ??
|
|
201
|
+
stepArgs.condition?.metaPrompt;
|
|
202
|
+
const criteria = stepArgs.aiPrompt?.criteria ??
|
|
203
|
+
stepArgs.conditionDescriptor?.criteria ??
|
|
204
|
+
stepArgs.condition?.criteria;
|
|
205
|
+
if (metaPrompt || criteria) {
|
|
206
|
+
conditionArgs.push({
|
|
207
|
+
metaPrompt,
|
|
208
|
+
criteria,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
conditionAction = new ConditionAction_1.ConditionAction('evaluate_ai_prompt', conditionArgs);
|
|
212
|
+
actions.push(conditionAction);
|
|
220
213
|
}
|
|
221
214
|
else if (assertionType === 'present' || assertionType === 'not_present') {
|
|
222
|
-
|
|
215
|
+
conditionAction = new ConditionAction_1.ConditionAction('evaluate_presence', [
|
|
216
|
+
assertionType,
|
|
217
|
+
]);
|
|
218
|
+
actions.push(conditionAction);
|
|
223
219
|
}
|
|
224
220
|
else if (stepName === 'WaitUntil') {
|
|
225
|
-
|
|
221
|
+
conditionAction = new ConditionAction_1.ConditionAction('evaluate_presence', ['present']);
|
|
222
|
+
actions.push(conditionAction);
|
|
226
223
|
}
|
|
227
224
|
else {
|
|
228
|
-
|
|
229
|
-
|
|
225
|
+
const isCountAssertion = stepArgs.attribute === 'count' ||
|
|
226
|
+
stepArgs.countDescriptor?.count ||
|
|
227
|
+
stepArgs.count?.count;
|
|
228
|
+
const attributeName = stepArgs.attribute ??
|
|
229
|
+
stepArgs.extractDescriptor?.attributeName ??
|
|
230
|
+
stepArgs.extract?.attributeName;
|
|
231
|
+
if (isCountAssertion) {
|
|
232
|
+
countAction = new CountAction_1.CountAction('count', ['count']);
|
|
233
|
+
actions.push(countAction);
|
|
230
234
|
}
|
|
231
|
-
else if (stepArgs.target?.kind !== GetVariableDescriptor_1.GET_VARIABLE_VALUE
|
|
232
|
-
|
|
235
|
+
else if (stepArgs.target?.kind !== GetVariableDescriptor_1.GET_VARIABLE_VALUE &&
|
|
236
|
+
attributeName) {
|
|
237
|
+
const extractType = stepArgs.extractType ??
|
|
238
|
+
stepArgs.extractDescriptor?.extractType ??
|
|
239
|
+
stepArgs.extract?.extractType;
|
|
240
|
+
const extractArgs = [attributeName];
|
|
241
|
+
if (extractType === 'extract_css_properties') {
|
|
242
|
+
extractArgs.push({ extraction_type: 'css' });
|
|
243
|
+
}
|
|
244
|
+
extractAction = new ExtractAction_1.ExtractAction(ExtractAction_1.ExtractAction.mablScriptTypeFromYamlType(extractType), extractArgs);
|
|
245
|
+
actions.push(extractAction);
|
|
233
246
|
}
|
|
234
|
-
|
|
247
|
+
conditionAction = new ConditionAction_1.ConditionAction('evaluate_condition', [
|
|
235
248
|
assertionType,
|
|
236
249
|
assertionValue,
|
|
237
250
|
conditionOptions,
|
|
238
|
-
])
|
|
251
|
+
]);
|
|
252
|
+
actions.push(conditionAction);
|
|
239
253
|
}
|
|
240
|
-
const
|
|
254
|
+
const target = primaryAction.toDescriptor();
|
|
255
|
+
const onFailure = stepArgs.onFailure ?? stepArgs.assertArguments?.onFailure;
|
|
256
|
+
const observationScope = stepArgs.observationScope ?? stepArgs.assertArguments?.observationScope;
|
|
257
|
+
const descriptorToActionMap = new Map()
|
|
258
|
+
.set(target, primaryAction)
|
|
259
|
+
.set(conditionAction.conditionDescriptor, conditionAction);
|
|
260
|
+
if (extractAction) {
|
|
261
|
+
descriptorToActionMap.set(extractAction.toDescriptor(), extractAction);
|
|
262
|
+
}
|
|
263
|
+
if (countAction) {
|
|
264
|
+
descriptorToActionMap.set(countAction.countDescriptor, countAction);
|
|
265
|
+
}
|
|
266
|
+
const stepDescriptor = {
|
|
267
|
+
target,
|
|
268
|
+
extract: extractAction?.toDescriptor(),
|
|
269
|
+
condition: conditionAction.conditionDescriptor,
|
|
270
|
+
count: countAction?.countDescriptor,
|
|
271
|
+
onFailure,
|
|
272
|
+
observationScope,
|
|
273
|
+
descriptorToActionMap,
|
|
274
|
+
actionCode: AssertStep.actionCode,
|
|
275
|
+
description: stepArgs.description,
|
|
276
|
+
disabled: stepArgs.disabled,
|
|
277
|
+
};
|
|
278
|
+
const assertStep = new AssertStep('assert', [], actions, stepDescriptor);
|
|
241
279
|
if (stepArgs.annotation) {
|
|
242
280
|
assertStep.setAnnotation(stepArgs.annotation);
|
|
243
281
|
}
|
|
244
282
|
assertStep.setStepId(stepArgs.id);
|
|
245
283
|
return assertStep;
|
|
246
284
|
}
|
|
285
|
+
static fromLegacyMablscript(args, actions) {
|
|
286
|
+
const stepDescriptor = buildAssertStepDescriptor('assert', args, actions);
|
|
287
|
+
const step = new AssertStep('assert', [], actions, stepDescriptor);
|
|
288
|
+
return step;
|
|
289
|
+
}
|
|
247
290
|
toMablscript() {
|
|
248
291
|
if (this.primaryAction instanceof MobileFindAction_1.MobileFindAction) {
|
|
249
292
|
throw new Error('Mobile steps do not generate mablscript');
|
|
@@ -256,13 +299,11 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
256
299
|
if (primaryActionFindMablscriptPrefix.length > 0) {
|
|
257
300
|
primaryActionFindMablscriptPrefix += '.';
|
|
258
301
|
}
|
|
259
|
-
const assertAction = `.assert(${!!(this.
|
|
260
|
-
this.
|
|
302
|
+
const assertAction = `.assert(${!!(this.observationScope ||
|
|
303
|
+
(this.onFailure && this.onFailure !== OnFailure.FailImmediately))
|
|
261
304
|
? (0, MablAction_1.convertObjectToMablscriptArgs)({
|
|
262
|
-
|
|
263
|
-
onFailure: this.
|
|
264
|
-
? undefined
|
|
265
|
-
: this.assertArguments?.onFailure,
|
|
305
|
+
observationScope: this.observationScope,
|
|
306
|
+
onFailure: this.onFailure,
|
|
266
307
|
})
|
|
267
308
|
: ''})`;
|
|
268
309
|
if (this.countAction) {
|
|
@@ -306,7 +347,147 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
306
347
|
...(this.extractAction?.getInputVariables() ?? []),
|
|
307
348
|
]);
|
|
308
349
|
}
|
|
350
|
+
stepDescription() {
|
|
351
|
+
if (this.assertionType === 'ai_prompt') {
|
|
352
|
+
return `Assert AI prompt: "${this.aiPrompt?.userPrompt}"`;
|
|
353
|
+
}
|
|
354
|
+
if (this.isWaitUntilStep) {
|
|
355
|
+
const elementDescription = this.humanizeFind();
|
|
356
|
+
return `Wait until ${elementDescription} is present`;
|
|
357
|
+
}
|
|
358
|
+
const elementDescription = this.humanizeFind();
|
|
359
|
+
if (this.assertionType === 'present') {
|
|
360
|
+
return `Assert that ${elementDescription} is present`;
|
|
361
|
+
}
|
|
362
|
+
if (this.assertionType === 'not_present') {
|
|
363
|
+
return `Assert that ${elementDescription} is not present`;
|
|
364
|
+
}
|
|
365
|
+
if (this.countAction) {
|
|
366
|
+
const comparator = this.getComparatorText();
|
|
367
|
+
return `Assert that count of ${elementDescription} ${comparator} ${this.assertionValue}`;
|
|
368
|
+
}
|
|
369
|
+
if (this.extractAction) {
|
|
370
|
+
const attribute = this.extractAction.extractionAttribute;
|
|
371
|
+
const comparator = this.getComparatorText();
|
|
372
|
+
return `Assert that ${attribute} of ${elementDescription} ${comparator} ${this.assertionValue}`;
|
|
373
|
+
}
|
|
374
|
+
const comparator = this.getComparatorText();
|
|
375
|
+
return `Assert that ${elementDescription} ${comparator} ${this.assertionValue}`;
|
|
376
|
+
}
|
|
377
|
+
humanizeFind() {
|
|
378
|
+
if (this.primaryAction instanceof GetUrlAction_1.GetUrlAction) {
|
|
379
|
+
return 'current URL';
|
|
380
|
+
}
|
|
381
|
+
if (this.primaryAction instanceof GetVariableValue_1.GetVariableValue) {
|
|
382
|
+
return `variable {{${this.primaryAction.variableName}}}`;
|
|
383
|
+
}
|
|
384
|
+
if (this.primaryAction instanceof GetViewportAction_1.GetViewportAction) {
|
|
385
|
+
return 'viewport';
|
|
386
|
+
}
|
|
387
|
+
if (this.primaryAction instanceof FindAction_1.FindAction) {
|
|
388
|
+
const findDescriptor = this.primaryAction.toDescriptor();
|
|
389
|
+
return (0, MablStepWithFindAction_1.humanizeFindDescriptor)(findDescriptor);
|
|
390
|
+
}
|
|
391
|
+
return 'element';
|
|
392
|
+
}
|
|
393
|
+
getComparatorText() {
|
|
394
|
+
switch (this.assertionType) {
|
|
395
|
+
case 'equals':
|
|
396
|
+
return 'equals';
|
|
397
|
+
case 'does_not_equal':
|
|
398
|
+
return 'does not equal';
|
|
399
|
+
case 'contains':
|
|
400
|
+
return 'contains';
|
|
401
|
+
case 'does_not_contain':
|
|
402
|
+
return 'does not contain';
|
|
403
|
+
case 'matches_regex':
|
|
404
|
+
return 'matches';
|
|
405
|
+
case 'greater_than':
|
|
406
|
+
return 'is greater than';
|
|
407
|
+
case 'less_than':
|
|
408
|
+
return 'is less than';
|
|
409
|
+
case 'greater_than_or_equals':
|
|
410
|
+
return 'is greater than or equal to';
|
|
411
|
+
case 'less_than_or_equals':
|
|
412
|
+
return 'is less than or equal to';
|
|
413
|
+
case 'starts_with':
|
|
414
|
+
return 'starts with';
|
|
415
|
+
case 'starts_without':
|
|
416
|
+
return 'starts without';
|
|
417
|
+
case 'ends_with':
|
|
418
|
+
return 'ends with';
|
|
419
|
+
case 'ends_without':
|
|
420
|
+
return 'ends without';
|
|
421
|
+
default:
|
|
422
|
+
return 'is';
|
|
423
|
+
}
|
|
424
|
+
}
|
|
309
425
|
}
|
|
310
426
|
exports.AssertStep = AssertStep;
|
|
311
|
-
AssertStep.
|
|
427
|
+
AssertStep.actionCode = 'assert';
|
|
428
|
+
AssertStep.mablScriptStepNames = [
|
|
429
|
+
AssertStep.actionCode,
|
|
430
|
+
...Object.keys(AssertStepOld_1.oldToV2StepNameMap),
|
|
431
|
+
];
|
|
312
432
|
AssertStep.yamlMablScriptNames = (0, exports.assertStepYamlMablscriptNames)();
|
|
433
|
+
function buildAssertStepDescriptor(_name, args, actions) {
|
|
434
|
+
const firstAction = actions[0];
|
|
435
|
+
let primaryAction;
|
|
436
|
+
if (firstAction instanceof FindAction_1.FindAction ||
|
|
437
|
+
firstAction instanceof MobileFindAction_1.MobileFindAction ||
|
|
438
|
+
firstAction instanceof GetUrlAction_1.GetUrlAction ||
|
|
439
|
+
firstAction instanceof GetVariableValue_1.GetVariableValue ||
|
|
440
|
+
firstAction instanceof GetViewportAction_1.GetViewportAction) {
|
|
441
|
+
primaryAction = firstAction;
|
|
442
|
+
}
|
|
443
|
+
else if (firstAction instanceof ConditionAction_1.ConditionAction &&
|
|
444
|
+
(0, ConditionDescriptor_1.isAIPromptCondition)(firstAction.conditionDescriptor)) {
|
|
445
|
+
primaryAction = new GetViewportAction_1.GetViewportAction();
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
throw new Error(`Unexpected action type. Expected FindAction|MobileFindAction|GetUrlAction|GetVariableValue but got: ${firstAction.constructor.name}`);
|
|
449
|
+
}
|
|
450
|
+
let extractAction;
|
|
451
|
+
let countAction;
|
|
452
|
+
let conditionAction;
|
|
453
|
+
if (actions.length === 3) {
|
|
454
|
+
if (actions[1] instanceof CountAction_1.CountAction) {
|
|
455
|
+
countAction = actions[1];
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
extractAction = actions[1];
|
|
459
|
+
}
|
|
460
|
+
conditionAction = actions[2];
|
|
461
|
+
}
|
|
462
|
+
else if (firstAction instanceof ConditionAction_1.ConditionAction) {
|
|
463
|
+
conditionAction = firstAction;
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
conditionAction = actions[1];
|
|
467
|
+
}
|
|
468
|
+
const find = primaryAction.toDescriptor();
|
|
469
|
+
const assertArguments = args[0] && typeof args[0] === 'object'
|
|
470
|
+
? args[0]
|
|
471
|
+
: undefined;
|
|
472
|
+
const onFailure = assertArguments?.onFailure || OnFailure.FailImmediately;
|
|
473
|
+
const observationScope = assertArguments?.observationScope;
|
|
474
|
+
const descriptorToActionMap = new Map()
|
|
475
|
+
.set(find, primaryAction)
|
|
476
|
+
.set(conditionAction.conditionDescriptor, conditionAction);
|
|
477
|
+
if (extractAction) {
|
|
478
|
+
descriptorToActionMap.set(extractAction.toDescriptor(), extractAction);
|
|
479
|
+
}
|
|
480
|
+
if (countAction) {
|
|
481
|
+
descriptorToActionMap.set(countAction.countDescriptor, countAction);
|
|
482
|
+
}
|
|
483
|
+
return {
|
|
484
|
+
target: find,
|
|
485
|
+
extract: extractAction?.toDescriptor(),
|
|
486
|
+
condition: conditionAction.conditionDescriptor,
|
|
487
|
+
count: countAction?.countDescriptor,
|
|
488
|
+
onFailure,
|
|
489
|
+
observationScope,
|
|
490
|
+
descriptorToActionMap,
|
|
491
|
+
actionCode: AssertStep.actionCode,
|
|
492
|
+
};
|
|
493
|
+
}
|