automation_model 1.0.721-dev → 1.0.721-stage
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 +4 -1
- package/lib/analyze_helper.js +1 -1
- package/lib/analyze_helper.js.map +1 -0
- package/lib/api.js +5 -4
- package/lib/api.js.map +1 -0
- package/lib/auto_page.d.ts +4 -2
- package/lib/auto_page.js +154 -87
- package/lib/auto_page.js.map +1 -0
- package/lib/browser_manager.js +21 -32
- package/lib/browser_manager.js.map +1 -0
- package/lib/bruno.js +1 -1
- package/lib/bruno.js.map +1 -0
- package/lib/check_performance.d.ts +1 -0
- package/lib/check_performance.js +57 -0
- package/lib/check_performance.js.map +1 -0
- package/lib/command_common.js +19 -3
- package/lib/command_common.js.map +1 -0
- package/lib/date_time.js +1 -1
- package/lib/date_time.js.map +1 -0
- package/lib/drawRect.js +1 -1
- package/lib/drawRect.js.map +1 -0
- package/lib/environment.js +1 -1
- package/lib/environment.js.map +1 -0
- package/lib/error-messages.js +1 -1
- package/lib/error-messages.js.map +1 -0
- package/lib/file_checker.js +130 -26
- package/lib/file_checker.js.map +1 -0
- package/lib/find_function.js +1 -1
- package/lib/find_function.js.map +1 -0
- package/lib/generation_scripts.js +1 -1
- package/lib/generation_scripts.js.map +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -0
- package/lib/init_browser.d.ts +1 -2
- package/lib/init_browser.js +116 -126
- package/lib/init_browser.js.map +1 -0
- package/lib/locate_element.js +1 -1
- package/lib/locate_element.js.map +1 -0
- package/lib/locator.d.ts +1 -0
- package/lib/locator.js +10 -3
- package/lib/locator.js.map +1 -0
- package/lib/locator_log.js +1 -1
- package/lib/locator_log.js.map +1 -0
- package/lib/network.d.ts +2 -0
- package/lib/network.js +353 -87
- package/lib/network.js.map +1 -0
- package/lib/popups.js +1 -1
- package/lib/popups.js.map +1 -0
- package/lib/route.d.ts +21 -0
- package/lib/route.js +533 -0
- package/lib/route.js.map +1 -0
- package/lib/scripts/axe.mini.js +3 -3
- package/lib/snapshot_validation.js +1 -1
- package/lib/snapshot_validation.js.map +1 -0
- package/lib/stable_browser.d.ts +48 -4
- package/lib/stable_browser.js +1009 -154
- package/lib/stable_browser.js.map +1 -0
- package/lib/table.d.ts +9 -7
- package/lib/table.js +83 -13
- package/lib/table.js.map +1 -0
- package/lib/table_analyze.js +1 -1
- package/lib/table_analyze.js.map +1 -0
- package/lib/table_helper.js +15 -1
- package/lib/table_helper.js.map +1 -0
- package/lib/test_context.d.ts +1 -0
- package/lib/test_context.js +2 -1
- package/lib/test_context.js.map +1 -0
- package/lib/utils.d.ts +3 -1
- package/lib/utils.js +101 -66
- package/lib/utils.js.map +1 -0
- package/package.json +12 -10
package/lib/stable_browser.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
+
import { check_performance } from "./check_performance.js";
|
|
2
3
|
import { expect } from "@playwright/test";
|
|
3
4
|
import dayjs from "dayjs";
|
|
4
5
|
import fs from "fs";
|
|
@@ -10,7 +11,8 @@ import { getDateTimeValue } from "./date_time.js";
|
|
|
10
11
|
import drawRectangle from "./drawRect.js";
|
|
11
12
|
//import { closeUnexpectedPopups } from "./popups.js";
|
|
12
13
|
import { getTableCells, getTableData } from "./table_analyze.js";
|
|
13
|
-
import
|
|
14
|
+
import errorStackParser from "error-stack-parser";
|
|
15
|
+
import { _convertToRegexQuery, _copyContext, _fixLocatorUsingParams, _fixUsingParams, _getServerUrl, extractStepExampleParameters, KEYBOARD_EVENTS, maskValue, replaceWithLocalTestData, scrollPageToLoadLazyElements, unEscapeString, _getDataFile, testForRegex, performAction, _getTestData, } from "./utils.js";
|
|
14
16
|
import csv from "csv-parser";
|
|
15
17
|
import { Readable } from "node:stream";
|
|
16
18
|
import readline from "readline";
|
|
@@ -19,16 +21,20 @@ import { getTestData } from "./auto_page.js";
|
|
|
19
21
|
import { locate_element } from "./locate_element.js";
|
|
20
22
|
import { randomUUID } from "crypto";
|
|
21
23
|
import { _commandError, _commandFinally, _preCommand, _validateSelectors, _screenshot, _reportToWorld, } from "./command_common.js";
|
|
22
|
-
import { registerDownloadEvent, registerNetworkEvents } from "./network.js";
|
|
24
|
+
import { networkAfterStep, networkBeforeStep, registerDownloadEvent, registerNetworkEvents } from "./network.js";
|
|
23
25
|
import { LocatorLog } from "./locator_log.js";
|
|
24
26
|
import axios from "axios";
|
|
25
27
|
import { _findCellArea, findElementsInArea } from "./table_helper.js";
|
|
26
|
-
import { snapshotValidation } from "./snapshot_validation.js";
|
|
28
|
+
import { highlightSnapshot, snapshotValidation } from "./snapshot_validation.js";
|
|
27
29
|
import { loadBrunoParams } from "./bruno.js";
|
|
30
|
+
import { registerAfterStepRoutes, registerBeforeStepRoutes } from "./route.js";
|
|
31
|
+
import { existsSync } from "node:fs";
|
|
28
32
|
export const Types = {
|
|
29
33
|
CLICK: "click_element",
|
|
30
34
|
WAIT_ELEMENT: "wait_element",
|
|
31
|
-
NAVIGATE: "navigate",
|
|
35
|
+
NAVIGATE: "navigate",
|
|
36
|
+
GO_BACK: "go_back",
|
|
37
|
+
GO_FORWARD: "go_forward",
|
|
32
38
|
FILL: "fill_element",
|
|
33
39
|
EXECUTE: "execute_page_method", //
|
|
34
40
|
OPEN: "open_environment", //
|
|
@@ -41,13 +47,16 @@ export const Types = {
|
|
|
41
47
|
VERIFY_PAGE_CONTAINS_NO_TEXT: "verify_page_contains_no_text",
|
|
42
48
|
ANALYZE_TABLE: "analyze_table",
|
|
43
49
|
SELECT: "select_combobox", //
|
|
50
|
+
VERIFY_PROPERTY: "verify_element_property",
|
|
44
51
|
VERIFY_PAGE_PATH: "verify_page_path",
|
|
52
|
+
VERIFY_PAGE_TITLE: "verify_page_title",
|
|
45
53
|
TYPE_PRESS: "type_press",
|
|
46
54
|
PRESS: "press_key",
|
|
47
55
|
HOVER: "hover_element",
|
|
48
56
|
CHECK: "check_element",
|
|
49
57
|
UNCHECK: "uncheck_element",
|
|
50
58
|
EXTRACT: "extract_attribute",
|
|
59
|
+
EXTRACT_PROPERTY: "extract_property",
|
|
51
60
|
CLOSE_PAGE: "close_page",
|
|
52
61
|
TABLE_OPERATION: "table_operation",
|
|
53
62
|
SET_DATE_TIME: "set_date_time",
|
|
@@ -59,10 +68,13 @@ export const Types = {
|
|
|
59
68
|
VERIFY_ATTRIBUTE: "verify_element_attribute",
|
|
60
69
|
VERIFY_TEXT_WITH_RELATION: "verify_text_with_relation",
|
|
61
70
|
BRUNO: "bruno",
|
|
62
|
-
SNAPSHOT_VALIDATION: "snapshot_validation",
|
|
63
71
|
VERIFY_FILE_EXISTS: "verify_file_exists",
|
|
64
72
|
SET_INPUT_FILES: "set_input_files",
|
|
73
|
+
SNAPSHOT_VALIDATION: "snapshot_validation",
|
|
65
74
|
REPORT_COMMAND: "report_command",
|
|
75
|
+
STEP_COMPLETE: "step_complete",
|
|
76
|
+
SLEEP: "sleep",
|
|
77
|
+
CONDITIONAL_WAIT: "conditional_wait",
|
|
66
78
|
};
|
|
67
79
|
export const apps = {};
|
|
68
80
|
const formatElementName = (elementName) => {
|
|
@@ -74,6 +86,7 @@ class StableBrowser {
|
|
|
74
86
|
logger;
|
|
75
87
|
context;
|
|
76
88
|
world;
|
|
89
|
+
fastMode;
|
|
77
90
|
project_path = null;
|
|
78
91
|
webLogFile = null;
|
|
79
92
|
networkLogger = null;
|
|
@@ -82,12 +95,14 @@ class StableBrowser {
|
|
|
82
95
|
tags = null;
|
|
83
96
|
isRecording = false;
|
|
84
97
|
initSnapshotTaken = false;
|
|
85
|
-
|
|
98
|
+
onlyFailuresScreenshot = process.env.SCREENSHOT_ON_FAILURE_ONLY === "true";
|
|
99
|
+
constructor(browser, page, logger = null, context = null, world = null, fastMode = false) {
|
|
86
100
|
this.browser = browser;
|
|
87
101
|
this.page = page;
|
|
88
102
|
this.logger = logger;
|
|
89
103
|
this.context = context;
|
|
90
104
|
this.world = world;
|
|
105
|
+
this.fastMode = fastMode;
|
|
91
106
|
if (!this.logger) {
|
|
92
107
|
this.logger = console;
|
|
93
108
|
}
|
|
@@ -116,6 +131,19 @@ class StableBrowser {
|
|
|
116
131
|
context.pages = [this.page];
|
|
117
132
|
const logFolder = path.join(this.project_path, "logs", "web");
|
|
118
133
|
this.world = world;
|
|
134
|
+
if (this.configuration && this.configuration.fastMode === true) {
|
|
135
|
+
this.fastMode = true;
|
|
136
|
+
}
|
|
137
|
+
if (process.env.FAST_MODE === "true") {
|
|
138
|
+
// console.log("Fast mode enabled from environment variable");
|
|
139
|
+
this.fastMode = true;
|
|
140
|
+
}
|
|
141
|
+
if (process.env.FAST_MODE === "false") {
|
|
142
|
+
this.fastMode = false;
|
|
143
|
+
}
|
|
144
|
+
if (this.context) {
|
|
145
|
+
this.context.fastMode = this.fastMode;
|
|
146
|
+
}
|
|
119
147
|
this.registerEventListeners(this.context);
|
|
120
148
|
registerNetworkEvents(this.world, this, this.context, this.page);
|
|
121
149
|
registerDownloadEvent(this.page, this.world, this.context);
|
|
@@ -126,6 +154,9 @@ class StableBrowser {
|
|
|
126
154
|
if (!context.pageLoading) {
|
|
127
155
|
context.pageLoading = { status: false };
|
|
128
156
|
}
|
|
157
|
+
if (this.configuration && this.configuration.acceptDialog && this.page) {
|
|
158
|
+
this.page.on("dialog", (dialog) => dialog.accept());
|
|
159
|
+
}
|
|
129
160
|
context.playContext.on("page", async function (page) {
|
|
130
161
|
if (this.configuration && this.configuration.closePopups === true) {
|
|
131
162
|
console.log("close unexpected popups");
|
|
@@ -134,11 +165,20 @@ class StableBrowser {
|
|
|
134
165
|
}
|
|
135
166
|
context.pageLoading.status = true;
|
|
136
167
|
this.page = page;
|
|
168
|
+
try {
|
|
169
|
+
if (this.configuration && this.configuration.acceptDialog) {
|
|
170
|
+
await page.on("dialog", (dialog) => dialog.accept());
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error("Error on dialog accept registration", error);
|
|
175
|
+
}
|
|
137
176
|
context.page = page;
|
|
138
177
|
context.pages.push(page);
|
|
139
178
|
registerNetworkEvents(this.world, this, context, this.page);
|
|
140
179
|
registerDownloadEvent(this.page, this.world, context);
|
|
141
180
|
page.on("close", async () => {
|
|
181
|
+
// return if browser context is already closed
|
|
142
182
|
if (this.context && this.context.pages && this.context.pages.length > 1) {
|
|
143
183
|
this.context.pages.pop();
|
|
144
184
|
this.page = this.context.pages[this.context.pages.length - 1];
|
|
@@ -148,7 +188,12 @@ class StableBrowser {
|
|
|
148
188
|
console.log("Switched to page " + title);
|
|
149
189
|
}
|
|
150
190
|
catch (error) {
|
|
151
|
-
|
|
191
|
+
if (error?.message?.includes("Target page, context or browser has been closed")) {
|
|
192
|
+
// Ignore this error
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
console.error("Error on page close", error);
|
|
196
|
+
}
|
|
152
197
|
}
|
|
153
198
|
}
|
|
154
199
|
});
|
|
@@ -157,7 +202,12 @@ class StableBrowser {
|
|
|
157
202
|
console.log("Switch page: " + (await page.title()));
|
|
158
203
|
}
|
|
159
204
|
catch (e) {
|
|
160
|
-
|
|
205
|
+
if (e?.message?.includes("Target page, context or browser has been closed")) {
|
|
206
|
+
// Ignore this error
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this.logger.error("error on page load " + e);
|
|
210
|
+
}
|
|
161
211
|
}
|
|
162
212
|
context.pageLoading.status = false;
|
|
163
213
|
}.bind(this));
|
|
@@ -185,7 +235,9 @@ class StableBrowser {
|
|
|
185
235
|
if (newContextCreated) {
|
|
186
236
|
this.registerEventListeners(this.context);
|
|
187
237
|
await this.goto(this.context.environment.baseUrl);
|
|
188
|
-
|
|
238
|
+
if (!this.fastMode) {
|
|
239
|
+
await this.waitForPageLoad();
|
|
240
|
+
}
|
|
189
241
|
}
|
|
190
242
|
}
|
|
191
243
|
async switchTab(tabTitleOrIndex) {
|
|
@@ -311,6 +363,64 @@ class StableBrowser {
|
|
|
311
363
|
await _commandFinally(state, this);
|
|
312
364
|
}
|
|
313
365
|
}
|
|
366
|
+
async goBack(options, world = null) {
|
|
367
|
+
const state = {
|
|
368
|
+
value: "",
|
|
369
|
+
world: world,
|
|
370
|
+
type: Types.GO_BACK,
|
|
371
|
+
text: `Browser navigate back`,
|
|
372
|
+
operation: "goBack",
|
|
373
|
+
log: "***** navigate back *****\n",
|
|
374
|
+
info: {},
|
|
375
|
+
locate: false,
|
|
376
|
+
scroll: false,
|
|
377
|
+
screenshot: false,
|
|
378
|
+
highlight: false,
|
|
379
|
+
};
|
|
380
|
+
try {
|
|
381
|
+
await _preCommand(state, this);
|
|
382
|
+
await this.page.goBack({
|
|
383
|
+
waitUntil: "load",
|
|
384
|
+
});
|
|
385
|
+
await _screenshot(state, this);
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
console.error("Error on goBack", error);
|
|
389
|
+
_commandError(state, error, this);
|
|
390
|
+
}
|
|
391
|
+
finally {
|
|
392
|
+
await _commandFinally(state, this);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
async goForward(options, world = null) {
|
|
396
|
+
const state = {
|
|
397
|
+
value: "",
|
|
398
|
+
world: world,
|
|
399
|
+
type: Types.GO_FORWARD,
|
|
400
|
+
text: `Browser navigate forward`,
|
|
401
|
+
operation: "goForward",
|
|
402
|
+
log: "***** navigate forward *****\n",
|
|
403
|
+
info: {},
|
|
404
|
+
locate: false,
|
|
405
|
+
scroll: false,
|
|
406
|
+
screenshot: false,
|
|
407
|
+
highlight: false,
|
|
408
|
+
};
|
|
409
|
+
try {
|
|
410
|
+
await _preCommand(state, this);
|
|
411
|
+
await this.page.goForward({
|
|
412
|
+
waitUntil: "load",
|
|
413
|
+
});
|
|
414
|
+
await _screenshot(state, this);
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
console.error("Error on goForward", error);
|
|
418
|
+
_commandError(state, error, this);
|
|
419
|
+
}
|
|
420
|
+
finally {
|
|
421
|
+
await _commandFinally(state, this);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
314
424
|
async _getLocator(locator, scope, _params) {
|
|
315
425
|
locator = _fixLocatorUsingParams(locator, _params);
|
|
316
426
|
// locator = await this._replaceWithLocalData(locator);
|
|
@@ -409,12 +519,6 @@ class StableBrowser {
|
|
|
409
519
|
if (!el.setAttribute) {
|
|
410
520
|
el = el.parentElement;
|
|
411
521
|
}
|
|
412
|
-
// remove any attributes start with data-blinq-id
|
|
413
|
-
// for (let i = 0; i < el.attributes.length; i++) {
|
|
414
|
-
// if (el.attributes[i].name.startsWith("data-blinq-id")) {
|
|
415
|
-
// el.removeAttribute(el.attributes[i].name);
|
|
416
|
-
// }
|
|
417
|
-
// }
|
|
418
522
|
el.setAttribute("data-blinq-id-" + randomToken, "");
|
|
419
523
|
return true;
|
|
420
524
|
}, [tag1, randomToken]))) {
|
|
@@ -436,14 +540,13 @@ class StableBrowser {
|
|
|
436
540
|
info.locatorLog = new LocatorLog(selectorHierarchy);
|
|
437
541
|
}
|
|
438
542
|
let locatorSearch = selectorHierarchy[index];
|
|
439
|
-
let originalLocatorSearch = "";
|
|
440
543
|
try {
|
|
441
|
-
|
|
442
|
-
locatorSearch = JSON.parse(originalLocatorSearch);
|
|
544
|
+
locatorSearch = _fixLocatorUsingParams(locatorSearch, _params);
|
|
443
545
|
}
|
|
444
546
|
catch (e) {
|
|
445
547
|
console.error(e);
|
|
446
548
|
}
|
|
549
|
+
let originalLocatorSearch = JSON.stringify(locatorSearch);
|
|
447
550
|
//info.log += "searching for locator " + JSON.stringify(locatorSearch) + "\n";
|
|
448
551
|
let locator = null;
|
|
449
552
|
if (locatorSearch.climb && locatorSearch.climb >= 0) {
|
|
@@ -585,34 +688,183 @@ class StableBrowser {
|
|
|
585
688
|
}
|
|
586
689
|
return { rerun: false };
|
|
587
690
|
}
|
|
691
|
+
getFilePath() {
|
|
692
|
+
const stackFrames = errorStackParser.parse(new Error());
|
|
693
|
+
const stackFrame = stackFrames.findLast((frame) => frame.fileName && frame.fileName.endsWith(".mjs"));
|
|
694
|
+
// return stackFrame?.fileName || null;
|
|
695
|
+
const filepath = stackFrame?.fileName;
|
|
696
|
+
if (filepath) {
|
|
697
|
+
let jsonFilePath = filepath.replace(".mjs", ".json");
|
|
698
|
+
if (existsSync(jsonFilePath)) {
|
|
699
|
+
return jsonFilePath;
|
|
700
|
+
}
|
|
701
|
+
const config = this.configuration ?? {};
|
|
702
|
+
if (!config?.locatorsMetadataDir) {
|
|
703
|
+
config.locatorsMetadataDir = "features/step_definitions/locators";
|
|
704
|
+
}
|
|
705
|
+
if (config && config.locatorsMetadataDir) {
|
|
706
|
+
jsonFilePath = path.join(config.locatorsMetadataDir, path.basename(jsonFilePath));
|
|
707
|
+
}
|
|
708
|
+
if (existsSync(jsonFilePath)) {
|
|
709
|
+
return jsonFilePath;
|
|
710
|
+
}
|
|
711
|
+
return null;
|
|
712
|
+
}
|
|
713
|
+
return null;
|
|
714
|
+
}
|
|
715
|
+
getFullElementLocators(selectors, filePath) {
|
|
716
|
+
if (!filePath || !existsSync(filePath)) {
|
|
717
|
+
return null;
|
|
718
|
+
}
|
|
719
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
720
|
+
try {
|
|
721
|
+
const allElements = JSON.parse(content);
|
|
722
|
+
const element_key = selectors?.element_key;
|
|
723
|
+
if (element_key && allElements[element_key]) {
|
|
724
|
+
return allElements[element_key];
|
|
725
|
+
}
|
|
726
|
+
for (const elementKey in allElements) {
|
|
727
|
+
const element = allElements[elementKey];
|
|
728
|
+
let foundStrategy = null;
|
|
729
|
+
for (const key in element) {
|
|
730
|
+
if (key === "strategy") {
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
733
|
+
const locators = element[key];
|
|
734
|
+
if (!locators || !locators.length) {
|
|
735
|
+
continue;
|
|
736
|
+
}
|
|
737
|
+
for (const locator of locators) {
|
|
738
|
+
delete locator.score;
|
|
739
|
+
}
|
|
740
|
+
if (JSON.stringify(locators) === JSON.stringify(selectors.locators)) {
|
|
741
|
+
foundStrategy = key;
|
|
742
|
+
break;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
if (foundStrategy) {
|
|
746
|
+
return element;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
catch (error) {
|
|
751
|
+
console.error("Error parsing locators from file: " + filePath, error);
|
|
752
|
+
}
|
|
753
|
+
return null;
|
|
754
|
+
}
|
|
588
755
|
async _locate(selectors, info, _params, timeout, allowDisabled = false) {
|
|
589
756
|
if (!timeout) {
|
|
590
757
|
timeout = 30000;
|
|
591
758
|
}
|
|
759
|
+
let element = null;
|
|
760
|
+
let allStrategyLocators = null;
|
|
761
|
+
let selectedStrategy = null;
|
|
762
|
+
if (this.tryAllStrategies) {
|
|
763
|
+
allStrategyLocators = this.getFullElementLocators(selectors, this.getFilePath());
|
|
764
|
+
selectedStrategy = allStrategyLocators?.strategy;
|
|
765
|
+
}
|
|
592
766
|
for (let i = 0; i < 3; i++) {
|
|
593
767
|
info.log += "attempt " + i + ": total locators " + selectors.locators.length + "\n";
|
|
594
768
|
for (let j = 0; j < selectors.locators.length; j++) {
|
|
595
769
|
let selector = selectors.locators[j];
|
|
596
770
|
info.log += "searching for locator " + j + ":" + JSON.stringify(selector) + "\n";
|
|
597
771
|
}
|
|
598
|
-
|
|
772
|
+
if (this.tryAllStrategies && selectedStrategy) {
|
|
773
|
+
const strategyLocators = allStrategyLocators[selectedStrategy];
|
|
774
|
+
let err;
|
|
775
|
+
if (strategyLocators && strategyLocators.length) {
|
|
776
|
+
try {
|
|
777
|
+
selectors.locators = strategyLocators;
|
|
778
|
+
element = await this._locate_internal(selectors, info, _params, 10_000, allowDisabled);
|
|
779
|
+
info.selectedStrategy = selectedStrategy;
|
|
780
|
+
info.log += "element found using strategy " + selectedStrategy + "\n";
|
|
781
|
+
}
|
|
782
|
+
catch (error) {
|
|
783
|
+
err = error;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
if (!element) {
|
|
787
|
+
for (const key in allStrategyLocators) {
|
|
788
|
+
if (key === "strategy" || key === selectedStrategy) {
|
|
789
|
+
continue;
|
|
790
|
+
}
|
|
791
|
+
const strategyLocators = allStrategyLocators[key];
|
|
792
|
+
if (strategyLocators && strategyLocators.length) {
|
|
793
|
+
try {
|
|
794
|
+
info.log += "using strategy " + key + " with locators " + JSON.stringify(strategyLocators) + "\n";
|
|
795
|
+
selectors.locators = strategyLocators;
|
|
796
|
+
element = await this._locate_internal(selectors, info, _params, 10_000, allowDisabled);
|
|
797
|
+
err = null;
|
|
798
|
+
info.selectedStrategy = key;
|
|
799
|
+
info.log += "element found using strategy " + key + "\n";
|
|
800
|
+
break;
|
|
801
|
+
}
|
|
802
|
+
catch (error) {
|
|
803
|
+
err = error;
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
if (err) {
|
|
809
|
+
throw err;
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
else {
|
|
813
|
+
element = await this._locate_internal(selectors, info, _params, timeout, allowDisabled);
|
|
814
|
+
}
|
|
599
815
|
if (!element.rerun) {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
816
|
+
let newElementSelector = "";
|
|
817
|
+
if (this.configuration && this.configuration.stableLocatorStrategy === "csschain") {
|
|
818
|
+
const cssSelector = await element.evaluate((el) => {
|
|
819
|
+
function getCssSelector(el) {
|
|
820
|
+
if (!el || el.nodeType !== 1 || el === document.body)
|
|
821
|
+
return el.tagName.toLowerCase();
|
|
822
|
+
const parent = el.parentElement;
|
|
823
|
+
const tag = el.tagName.toLowerCase();
|
|
824
|
+
// Find the index of the element among its siblings of the same tag
|
|
825
|
+
let index = 1;
|
|
826
|
+
for (let sibling = el.previousElementSibling; sibling; sibling = sibling.previousElementSibling) {
|
|
827
|
+
if (sibling.tagName === el.tagName) {
|
|
828
|
+
index++;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
// Use nth-child if necessary (i.e., if there's more than one of the same tag)
|
|
832
|
+
const siblings = Array.from(parent.children).filter((child) => child.tagName === el.tagName);
|
|
833
|
+
const needsNthChild = siblings.length > 1;
|
|
834
|
+
const selector = needsNthChild ? `${tag}:nth-child(${[...parent.children].indexOf(el) + 1})` : tag;
|
|
835
|
+
return getCssSelector(parent) + " > " + selector;
|
|
836
|
+
}
|
|
837
|
+
const cssSelector = getCssSelector(el);
|
|
838
|
+
return cssSelector;
|
|
839
|
+
});
|
|
840
|
+
newElementSelector = cssSelector;
|
|
841
|
+
}
|
|
842
|
+
else {
|
|
843
|
+
const randomToken = "blinq_" + Math.random().toString(36).substring(7);
|
|
844
|
+
const id = await element.evaluate((el, randomToken) => {
|
|
845
|
+
// check if the element has id attribute
|
|
846
|
+
if (el.id) {
|
|
847
|
+
return el.id;
|
|
848
|
+
}
|
|
849
|
+
el.setAttribute("id", randomToken);
|
|
850
|
+
console.log("set id=" + randomToken + " on element", el);
|
|
851
|
+
return randomToken;
|
|
852
|
+
}, randomToken);
|
|
853
|
+
newElementSelector = "#" + id;
|
|
854
|
+
// check if the id contains :
|
|
855
|
+
if (id.includes(":")) {
|
|
856
|
+
// //*[@id="radix-:r0:"]
|
|
857
|
+
newElementSelector = `//*[@id="${id}"]`;
|
|
858
|
+
}
|
|
859
|
+
}
|
|
607
860
|
const scope = element._frame ?? element.page();
|
|
608
|
-
let newElementSelector = "[data-blinq-id-" + randomToken + "]";
|
|
609
861
|
let prefixSelector = "";
|
|
610
862
|
const frameControlSelector = " >> internal:control=enter-frame";
|
|
611
863
|
const frameSelectorIndex = element._selector.lastIndexOf(frameControlSelector);
|
|
612
864
|
if (frameSelectorIndex !== -1) {
|
|
613
865
|
// remove everything after the >> internal:control=enter-frame
|
|
614
866
|
const frameSelector = element._selector.substring(0, frameSelectorIndex);
|
|
615
|
-
prefixSelector = frameSelector + " >> internal:control=enter-frame >>";
|
|
867
|
+
prefixSelector = frameSelector + " >> internal:control=enter-frame >> ";
|
|
616
868
|
}
|
|
617
869
|
// if (element?._frame?._selector) {
|
|
618
870
|
// prefixSelector = element._frame._selector + " >> " + prefixSelector;
|
|
@@ -651,7 +903,7 @@ class StableBrowser {
|
|
|
651
903
|
break;
|
|
652
904
|
}
|
|
653
905
|
catch (error) {
|
|
654
|
-
console.error("frame not found " + frameLocator.css);
|
|
906
|
+
// console.error("frame not found " + frameLocator.css);
|
|
655
907
|
}
|
|
656
908
|
}
|
|
657
909
|
}
|
|
@@ -729,7 +981,6 @@ class StableBrowser {
|
|
|
729
981
|
let locatorsCount = 0;
|
|
730
982
|
let lazy_scroll = false;
|
|
731
983
|
//let arrayMode = Array.isArray(selectors);
|
|
732
|
-
let scope = await this._findFrameScope(selectors, timeout, info);
|
|
733
984
|
let selectorsLocators = null;
|
|
734
985
|
selectorsLocators = selectors.locators;
|
|
735
986
|
// group selectors by priority
|
|
@@ -757,6 +1008,7 @@ class StableBrowser {
|
|
|
757
1008
|
let highPriorityOnly = true;
|
|
758
1009
|
let visibleOnly = true;
|
|
759
1010
|
while (true) {
|
|
1011
|
+
let scope = await this._findFrameScope(selectors, timeout, info);
|
|
760
1012
|
locatorsCount = 0;
|
|
761
1013
|
let result = [];
|
|
762
1014
|
let popupResult = await this.closeUnexpectedPopups(info, _params);
|
|
@@ -872,9 +1124,13 @@ class StableBrowser {
|
|
|
872
1124
|
}
|
|
873
1125
|
}
|
|
874
1126
|
if (foundLocators.length === 1) {
|
|
1127
|
+
let box = null;
|
|
1128
|
+
if (!this.onlyFailuresScreenshot) {
|
|
1129
|
+
box = await foundLocators[0].boundingBox();
|
|
1130
|
+
}
|
|
875
1131
|
result.foundElements.push({
|
|
876
1132
|
locator: foundLocators[0],
|
|
877
|
-
box:
|
|
1133
|
+
box: box,
|
|
878
1134
|
unique: true,
|
|
879
1135
|
});
|
|
880
1136
|
result.locatorIndex = i;
|
|
@@ -1029,17 +1285,30 @@ class StableBrowser {
|
|
|
1029
1285
|
operation: "click",
|
|
1030
1286
|
log: "***** click on " + selectors.element_name + " *****\n",
|
|
1031
1287
|
};
|
|
1288
|
+
check_performance("click_all ***", this.context, true);
|
|
1032
1289
|
try {
|
|
1290
|
+
check_performance("click_preCommand", this.context, true);
|
|
1033
1291
|
await _preCommand(state, this);
|
|
1292
|
+
check_performance("click_preCommand", this.context, false);
|
|
1034
1293
|
await performAction("click", state.element, options, this, state, _params);
|
|
1035
|
-
|
|
1294
|
+
if (!this.fastMode) {
|
|
1295
|
+
check_performance("click_waitForPageLoad", this.context, true);
|
|
1296
|
+
await this.waitForPageLoad({ noSleep: true });
|
|
1297
|
+
check_performance("click_waitForPageLoad", this.context, false);
|
|
1298
|
+
}
|
|
1036
1299
|
return state.info;
|
|
1037
1300
|
}
|
|
1038
1301
|
catch (e) {
|
|
1039
1302
|
await _commandError(state, e, this);
|
|
1040
1303
|
}
|
|
1041
1304
|
finally {
|
|
1305
|
+
check_performance("click_commandFinally", this.context, true);
|
|
1042
1306
|
await _commandFinally(state, this);
|
|
1307
|
+
check_performance("click_commandFinally", this.context, false);
|
|
1308
|
+
check_performance("click_all ***", this.context, false);
|
|
1309
|
+
if (this.context.profile) {
|
|
1310
|
+
console.log(JSON.stringify(this.context.profile, null, 2));
|
|
1311
|
+
}
|
|
1043
1312
|
}
|
|
1044
1313
|
}
|
|
1045
1314
|
async waitForElement(selectors, _params, options = {}, world = null) {
|
|
@@ -1095,7 +1364,7 @@ class StableBrowser {
|
|
|
1095
1364
|
// if (world && world.screenshot && !world.screenshotPath) {
|
|
1096
1365
|
// console.log(`Highlighting while running from recorder`);
|
|
1097
1366
|
await this._highlightElements(state.element);
|
|
1098
|
-
await state.element.setChecked(checked);
|
|
1367
|
+
await state.element.setChecked(checked, { timeout: 2000 });
|
|
1099
1368
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
1100
1369
|
// await this._unHighlightElements(element);
|
|
1101
1370
|
// }
|
|
@@ -1107,14 +1376,31 @@ class StableBrowser {
|
|
|
1107
1376
|
this.logger.info("element did not change its state, ignoring...");
|
|
1108
1377
|
}
|
|
1109
1378
|
else {
|
|
1379
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
1110
1380
|
//await this.closeUnexpectedPopups();
|
|
1111
1381
|
state.info.log += "setCheck failed, will try again" + "\n";
|
|
1112
|
-
state.
|
|
1113
|
-
|
|
1114
|
-
|
|
1382
|
+
state.element_found = false;
|
|
1383
|
+
try {
|
|
1384
|
+
state.element = await this._locate(selectors, state.info, _params, 100);
|
|
1385
|
+
state.element_found = true;
|
|
1386
|
+
// check the check state
|
|
1387
|
+
}
|
|
1388
|
+
catch (error) {
|
|
1389
|
+
// element dismissed
|
|
1390
|
+
}
|
|
1391
|
+
if (state.element_found) {
|
|
1392
|
+
const isChecked = await state.element.isChecked();
|
|
1393
|
+
if (isChecked !== checked) {
|
|
1394
|
+
// perform click
|
|
1395
|
+
await state.element.click({ timeout: 2000, force: true });
|
|
1396
|
+
}
|
|
1397
|
+
else {
|
|
1398
|
+
this.logger.info(`Element ${selectors.element_name} is already in the desired state (${checked})`);
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1115
1401
|
}
|
|
1116
1402
|
}
|
|
1117
|
-
await this.waitForPageLoad();
|
|
1403
|
+
//await this.waitForPageLoad();
|
|
1118
1404
|
return state.info;
|
|
1119
1405
|
}
|
|
1120
1406
|
catch (e) {
|
|
@@ -1140,7 +1426,7 @@ class StableBrowser {
|
|
|
1140
1426
|
await _preCommand(state, this);
|
|
1141
1427
|
await performAction("hover", state.element, options, this, state, _params);
|
|
1142
1428
|
await _screenshot(state, this);
|
|
1143
|
-
await this.waitForPageLoad();
|
|
1429
|
+
//await this.waitForPageLoad();
|
|
1144
1430
|
return state.info;
|
|
1145
1431
|
}
|
|
1146
1432
|
catch (e) {
|
|
@@ -1176,7 +1462,7 @@ class StableBrowser {
|
|
|
1176
1462
|
state.info.log += "selectOption failed, will try force" + "\n";
|
|
1177
1463
|
await state.element.selectOption(values, { timeout: 10000, force: true });
|
|
1178
1464
|
}
|
|
1179
|
-
await this.waitForPageLoad();
|
|
1465
|
+
//await this.waitForPageLoad();
|
|
1180
1466
|
return state.info;
|
|
1181
1467
|
}
|
|
1182
1468
|
catch (e) {
|
|
@@ -1407,7 +1693,9 @@ class StableBrowser {
|
|
|
1407
1693
|
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
1408
1694
|
}
|
|
1409
1695
|
}
|
|
1696
|
+
//if (!this.fastMode) {
|
|
1410
1697
|
await _screenshot(state, this);
|
|
1698
|
+
//}
|
|
1411
1699
|
if (enter === true) {
|
|
1412
1700
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
1413
1701
|
await this.page.keyboard.press("Enter");
|
|
@@ -1456,8 +1744,8 @@ class StableBrowser {
|
|
|
1456
1744
|
if (enter) {
|
|
1457
1745
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
1458
1746
|
await this.page.keyboard.press("Enter");
|
|
1747
|
+
await this.waitForPageLoad();
|
|
1459
1748
|
}
|
|
1460
|
-
await this.waitForPageLoad();
|
|
1461
1749
|
return state.info;
|
|
1462
1750
|
}
|
|
1463
1751
|
catch (e) {
|
|
@@ -1749,6 +2037,11 @@ class StableBrowser {
|
|
|
1749
2037
|
throw new Error("Snapshot validation failed at line " + matchResult.errorLineText);
|
|
1750
2038
|
}
|
|
1751
2039
|
// highlight and screenshot
|
|
2040
|
+
try {
|
|
2041
|
+
await await highlightSnapshot(newValue, scope);
|
|
2042
|
+
await _screenshot(state, this);
|
|
2043
|
+
}
|
|
2044
|
+
catch (e) { }
|
|
1752
2045
|
return state.info;
|
|
1753
2046
|
}
|
|
1754
2047
|
catch (e) {
|
|
@@ -1907,12 +2200,7 @@ class StableBrowser {
|
|
|
1907
2200
|
}
|
|
1908
2201
|
}
|
|
1909
2202
|
getTestData(world = null) {
|
|
1910
|
-
|
|
1911
|
-
let data = {};
|
|
1912
|
-
if (fs.existsSync(dataFile)) {
|
|
1913
|
-
data = JSON.parse(fs.readFileSync(dataFile, "utf8"));
|
|
1914
|
-
}
|
|
1915
|
-
return data;
|
|
2203
|
+
return _getTestData(world, this.context, this);
|
|
1916
2204
|
}
|
|
1917
2205
|
async _screenShot(options = {}, world = null, info = null) {
|
|
1918
2206
|
// collect url/path/title
|
|
@@ -2132,6 +2420,77 @@ class StableBrowser {
|
|
|
2132
2420
|
await _commandFinally(state, this);
|
|
2133
2421
|
}
|
|
2134
2422
|
}
|
|
2423
|
+
async extractProperty(selectors, property, variable, _params = null, options = {}, world = null) {
|
|
2424
|
+
const state = {
|
|
2425
|
+
selectors,
|
|
2426
|
+
_params,
|
|
2427
|
+
property,
|
|
2428
|
+
variable,
|
|
2429
|
+
options,
|
|
2430
|
+
world,
|
|
2431
|
+
type: Types.EXTRACT_PROPERTY,
|
|
2432
|
+
text: `Extract property from element`,
|
|
2433
|
+
_text: `Extract property ${property} from ${selectors.element_name}`,
|
|
2434
|
+
operation: "extractProperty",
|
|
2435
|
+
log: "***** extract property " + property + " from " + selectors.element_name + " *****\n",
|
|
2436
|
+
allowDisabled: true,
|
|
2437
|
+
};
|
|
2438
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
2439
|
+
try {
|
|
2440
|
+
await _preCommand(state, this);
|
|
2441
|
+
switch (property) {
|
|
2442
|
+
case "inner_text":
|
|
2443
|
+
state.value = await state.element.innerText();
|
|
2444
|
+
break;
|
|
2445
|
+
case "href":
|
|
2446
|
+
state.value = await state.element.getAttribute("href");
|
|
2447
|
+
break;
|
|
2448
|
+
case "value":
|
|
2449
|
+
state.value = await state.element.inputValue();
|
|
2450
|
+
break;
|
|
2451
|
+
case "text":
|
|
2452
|
+
state.value = await state.element.textContent();
|
|
2453
|
+
break;
|
|
2454
|
+
default:
|
|
2455
|
+
if (property.startsWith("dataset.")) {
|
|
2456
|
+
const dataAttribute = property.substring(8);
|
|
2457
|
+
state.value = String(await state.element.getAttribute(`data-${dataAttribute}`)) || "";
|
|
2458
|
+
}
|
|
2459
|
+
else {
|
|
2460
|
+
state.value = String(await state.element.evaluate((element, prop) => element[prop], property));
|
|
2461
|
+
}
|
|
2462
|
+
}
|
|
2463
|
+
if (options !== null) {
|
|
2464
|
+
if (options.regex && options.regex !== "") {
|
|
2465
|
+
// Construct a regex pattern from the provided string
|
|
2466
|
+
const regex = options.regex.slice(1, -1);
|
|
2467
|
+
const regexPattern = new RegExp(regex, "g");
|
|
2468
|
+
const matches = state.value.match(regexPattern);
|
|
2469
|
+
if (matches) {
|
|
2470
|
+
let newValue = "";
|
|
2471
|
+
for (const match of matches) {
|
|
2472
|
+
newValue += match;
|
|
2473
|
+
}
|
|
2474
|
+
state.value = newValue;
|
|
2475
|
+
}
|
|
2476
|
+
}
|
|
2477
|
+
if (options.trimSpaces && options.trimSpaces === true) {
|
|
2478
|
+
state.value = state.value.trim();
|
|
2479
|
+
}
|
|
2480
|
+
}
|
|
2481
|
+
state.info.value = state.value;
|
|
2482
|
+
this.setTestData({ [variable]: state.value }, world);
|
|
2483
|
+
this.logger.info("set test data: " + variable + "=" + state.value);
|
|
2484
|
+
// await new Promise((resolve) => setTimeout(resolve, 500));
|
|
2485
|
+
return state.info;
|
|
2486
|
+
}
|
|
2487
|
+
catch (e) {
|
|
2488
|
+
await _commandError(state, e, this);
|
|
2489
|
+
}
|
|
2490
|
+
finally {
|
|
2491
|
+
await _commandFinally(state, this);
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2135
2494
|
async verifyAttribute(selectors, attribute, value, _params = null, options = {}, world = null) {
|
|
2136
2495
|
const state = {
|
|
2137
2496
|
selectors,
|
|
@@ -2230,6 +2589,260 @@ class StableBrowser {
|
|
|
2230
2589
|
await _commandFinally(state, this);
|
|
2231
2590
|
}
|
|
2232
2591
|
}
|
|
2592
|
+
async verifyProperty(selectors, property, value, _params = null, options = {}, world = null) {
|
|
2593
|
+
const state = {
|
|
2594
|
+
selectors,
|
|
2595
|
+
_params,
|
|
2596
|
+
property,
|
|
2597
|
+
value,
|
|
2598
|
+
options,
|
|
2599
|
+
world,
|
|
2600
|
+
type: Types.VERIFY_PROPERTY,
|
|
2601
|
+
highlight: true,
|
|
2602
|
+
screenshot: true,
|
|
2603
|
+
text: `Verify element property`,
|
|
2604
|
+
_text: `Verify property ${property} from ${selectors.element_name} is ${value}`,
|
|
2605
|
+
operation: "verifyProperty",
|
|
2606
|
+
log: "***** verify property " + property + " from " + selectors.element_name + " *****\n",
|
|
2607
|
+
allowDisabled: true,
|
|
2608
|
+
};
|
|
2609
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
2610
|
+
let val;
|
|
2611
|
+
let expectedValue;
|
|
2612
|
+
try {
|
|
2613
|
+
await _preCommand(state, this);
|
|
2614
|
+
expectedValue = await replaceWithLocalTestData(state.value, world);
|
|
2615
|
+
state.info.expectedValue = expectedValue;
|
|
2616
|
+
switch (property) {
|
|
2617
|
+
case "innerText":
|
|
2618
|
+
val = String(await state.element.innerText());
|
|
2619
|
+
break;
|
|
2620
|
+
case "text":
|
|
2621
|
+
val = String(await state.element.textContent());
|
|
2622
|
+
break;
|
|
2623
|
+
case "value":
|
|
2624
|
+
val = String(await state.element.inputValue());
|
|
2625
|
+
break;
|
|
2626
|
+
case "checked":
|
|
2627
|
+
val = String(await state.element.isChecked());
|
|
2628
|
+
break;
|
|
2629
|
+
case "disabled":
|
|
2630
|
+
val = String(await state.element.isDisabled());
|
|
2631
|
+
break;
|
|
2632
|
+
case "readOnly":
|
|
2633
|
+
const isEditable = await state.element.isEditable();
|
|
2634
|
+
val = String(!isEditable);
|
|
2635
|
+
break;
|
|
2636
|
+
case "innerHTML":
|
|
2637
|
+
val = String(await state.element.innerHTML());
|
|
2638
|
+
break;
|
|
2639
|
+
case "outerHTML":
|
|
2640
|
+
val = String(await state.element.evaluate((element) => element.outerHTML));
|
|
2641
|
+
break;
|
|
2642
|
+
default:
|
|
2643
|
+
if (property.startsWith("dataset.")) {
|
|
2644
|
+
const dataAttribute = property.substring(8);
|
|
2645
|
+
val = String(await state.element.getAttribute(`data-${dataAttribute}`)) || "";
|
|
2646
|
+
}
|
|
2647
|
+
else {
|
|
2648
|
+
val = String(await state.element.evaluate((element, prop) => element[prop], property));
|
|
2649
|
+
}
|
|
2650
|
+
}
|
|
2651
|
+
// Helper function to remove all style="" attributes
|
|
2652
|
+
const removeStyleAttributes = (htmlString) => {
|
|
2653
|
+
return htmlString.replace(/\s*style\s*=\s*"[^"]*"/gi, "");
|
|
2654
|
+
};
|
|
2655
|
+
// Remove style attributes for innerHTML and outerHTML properties
|
|
2656
|
+
if (property === "innerHTML" || property === "outerHTML") {
|
|
2657
|
+
val = removeStyleAttributes(val);
|
|
2658
|
+
expectedValue = removeStyleAttributes(expectedValue);
|
|
2659
|
+
}
|
|
2660
|
+
state.info.value = val;
|
|
2661
|
+
let regex;
|
|
2662
|
+
state.info.value = val;
|
|
2663
|
+
const isRegex = expectedValue.startsWith("regex:");
|
|
2664
|
+
const isContains = expectedValue.startsWith("contains:");
|
|
2665
|
+
const isExact = expectedValue.startsWith("exact:");
|
|
2666
|
+
let matchPassed = false;
|
|
2667
|
+
if (isRegex) {
|
|
2668
|
+
const rawPattern = expectedValue.slice(6); // remove "regex:"
|
|
2669
|
+
const lastSlashIndex = rawPattern.lastIndexOf("/");
|
|
2670
|
+
if (rawPattern.startsWith("/") && lastSlashIndex > 0) {
|
|
2671
|
+
const patternBody = rawPattern.slice(1, lastSlashIndex).replace(/\n/g, ".*");
|
|
2672
|
+
const flags = rawPattern.slice(lastSlashIndex + 1) || "gs";
|
|
2673
|
+
const regex = new RegExp(patternBody, flags);
|
|
2674
|
+
state.info.regex = true;
|
|
2675
|
+
matchPassed = regex.test(val);
|
|
2676
|
+
}
|
|
2677
|
+
else {
|
|
2678
|
+
// Fallback: treat as literal
|
|
2679
|
+
const escapedPattern = rawPattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2680
|
+
const regex = new RegExp(escapedPattern, "g");
|
|
2681
|
+
matchPassed = regex.test(val);
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
else if (isContains) {
|
|
2685
|
+
const containsValue = expectedValue.slice(9); // remove "contains:"
|
|
2686
|
+
matchPassed = val.includes(containsValue);
|
|
2687
|
+
}
|
|
2688
|
+
else if (isExact) {
|
|
2689
|
+
const exactValue = expectedValue.slice(6); // remove "exact:"
|
|
2690
|
+
matchPassed = val === exactValue;
|
|
2691
|
+
}
|
|
2692
|
+
else if (property === "innerText") {
|
|
2693
|
+
// Default innerText logic
|
|
2694
|
+
const normalizedExpectedValue = expectedValue.replace(/\\n/g, "\n");
|
|
2695
|
+
const valLines = val.split("\n");
|
|
2696
|
+
const expectedLines = normalizedExpectedValue.split("\n");
|
|
2697
|
+
matchPassed = expectedLines.every((expectedLine) => valLines.some((valLine) => valLine.trim() === expectedLine.trim()));
|
|
2698
|
+
}
|
|
2699
|
+
else {
|
|
2700
|
+
// Fallback exact or loose match
|
|
2701
|
+
const escapedPattern = expectedValue.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2702
|
+
const regex = new RegExp(escapedPattern, "g");
|
|
2703
|
+
matchPassed = regex.test(val);
|
|
2704
|
+
}
|
|
2705
|
+
if (!matchPassed) {
|
|
2706
|
+
let errorMessage = `The ${property} property has a value of "${val}", but the expected value is "${expectedValue}"`;
|
|
2707
|
+
state.info.failCause.assertionFailed = true;
|
|
2708
|
+
state.info.failCause.lastError = errorMessage;
|
|
2709
|
+
throw new Error(errorMessage);
|
|
2710
|
+
}
|
|
2711
|
+
return state.info;
|
|
2712
|
+
}
|
|
2713
|
+
catch (e) {
|
|
2714
|
+
await _commandError(state, e, this);
|
|
2715
|
+
}
|
|
2716
|
+
finally {
|
|
2717
|
+
await _commandFinally(state, this);
|
|
2718
|
+
}
|
|
2719
|
+
}
|
|
2720
|
+
async conditionalWait(selectors, condition, timeout = 1000, _params = null, options = {}, world = null) {
|
|
2721
|
+
// Convert timeout from seconds to milliseconds
|
|
2722
|
+
const timeoutMs = timeout * 1000;
|
|
2723
|
+
const state = {
|
|
2724
|
+
selectors,
|
|
2725
|
+
_params,
|
|
2726
|
+
condition,
|
|
2727
|
+
timeout: timeoutMs, // Store as milliseconds for internal use
|
|
2728
|
+
options,
|
|
2729
|
+
world,
|
|
2730
|
+
type: Types.CONDITIONAL_WAIT,
|
|
2731
|
+
highlight: true,
|
|
2732
|
+
screenshot: true,
|
|
2733
|
+
text: `Conditional wait for element`,
|
|
2734
|
+
_text: `Wait for ${selectors.element_name} to be ${condition} (timeout: ${timeout}s)`, // Display original seconds
|
|
2735
|
+
operation: "conditionalWait",
|
|
2736
|
+
log: `***** conditional wait for ${condition} on ${selectors.element_name} *****\n`,
|
|
2737
|
+
allowDisabled: true,
|
|
2738
|
+
info: {},
|
|
2739
|
+
};
|
|
2740
|
+
// Initialize startTime outside try block to ensure it's always accessible
|
|
2741
|
+
const startTime = Date.now();
|
|
2742
|
+
let conditionMet = false;
|
|
2743
|
+
let currentValue = null;
|
|
2744
|
+
let lastError = null;
|
|
2745
|
+
// Main retry loop - continues until timeout or condition is met
|
|
2746
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
2747
|
+
const elapsedTime = Date.now() - startTime;
|
|
2748
|
+
const remainingTime = timeoutMs - elapsedTime;
|
|
2749
|
+
try {
|
|
2750
|
+
// Try to execute _preCommand (element location)
|
|
2751
|
+
await _preCommand(state, this);
|
|
2752
|
+
// If _preCommand succeeds, start condition checking
|
|
2753
|
+
const checkCondition = async () => {
|
|
2754
|
+
try {
|
|
2755
|
+
switch (condition.toLowerCase()) {
|
|
2756
|
+
case "checked":
|
|
2757
|
+
currentValue = await state.element.isChecked();
|
|
2758
|
+
return currentValue === true;
|
|
2759
|
+
case "unchecked":
|
|
2760
|
+
currentValue = await state.element.isChecked();
|
|
2761
|
+
return currentValue === false;
|
|
2762
|
+
case "visible":
|
|
2763
|
+
currentValue = await state.element.isVisible();
|
|
2764
|
+
return currentValue === true;
|
|
2765
|
+
case "hidden":
|
|
2766
|
+
currentValue = await state.element.isVisible();
|
|
2767
|
+
return currentValue === false;
|
|
2768
|
+
case "enabled":
|
|
2769
|
+
currentValue = await state.element.isDisabled();
|
|
2770
|
+
return currentValue === false;
|
|
2771
|
+
case "disabled":
|
|
2772
|
+
currentValue = await state.element.isDisabled();
|
|
2773
|
+
return currentValue === true;
|
|
2774
|
+
case "editable":
|
|
2775
|
+
// currentValue = await String(await state.element.evaluate((element, prop) => element[prop], "isContentEditable"));
|
|
2776
|
+
currentValue = await state.element.isContentEditable();
|
|
2777
|
+
return currentValue === true;
|
|
2778
|
+
default:
|
|
2779
|
+
state.info.message = `Unsupported condition: '${condition}'. Supported conditions are: checked, unchecked, visible, hidden, enabled, disabled, editable.`;
|
|
2780
|
+
state.info.success = false;
|
|
2781
|
+
return false;
|
|
2782
|
+
}
|
|
2783
|
+
}
|
|
2784
|
+
catch (error) {
|
|
2785
|
+
// Don't throw here, just return false to continue retrying
|
|
2786
|
+
return false;
|
|
2787
|
+
}
|
|
2788
|
+
};
|
|
2789
|
+
// Inner loop for condition checking (once element is located)
|
|
2790
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
2791
|
+
const currentElapsedTime = Date.now() - startTime;
|
|
2792
|
+
conditionMet = await checkCondition();
|
|
2793
|
+
if (conditionMet) {
|
|
2794
|
+
break;
|
|
2795
|
+
}
|
|
2796
|
+
// Check if we still have time for another attempt
|
|
2797
|
+
if (Date.now() - startTime + 50 < timeoutMs) {
|
|
2798
|
+
await new Promise((res) => setTimeout(res, 50));
|
|
2799
|
+
}
|
|
2800
|
+
else {
|
|
2801
|
+
break;
|
|
2802
|
+
}
|
|
2803
|
+
}
|
|
2804
|
+
// If we got here and condition is met, break out of main loop
|
|
2805
|
+
if (conditionMet) {
|
|
2806
|
+
break;
|
|
2807
|
+
}
|
|
2808
|
+
// If condition not met but no exception, we've timed out
|
|
2809
|
+
break;
|
|
2810
|
+
}
|
|
2811
|
+
catch (e) {
|
|
2812
|
+
lastError = e;
|
|
2813
|
+
const currentElapsedTime = Date.now() - startTime;
|
|
2814
|
+
const timeLeft = timeoutMs - currentElapsedTime;
|
|
2815
|
+
// Check if we have enough time left to retry
|
|
2816
|
+
if (timeLeft > 100) {
|
|
2817
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
2818
|
+
}
|
|
2819
|
+
else {
|
|
2820
|
+
break;
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
}
|
|
2824
|
+
const actualWaitTime = Date.now() - startTime;
|
|
2825
|
+
state.info = {
|
|
2826
|
+
success: conditionMet,
|
|
2827
|
+
conditionMet,
|
|
2828
|
+
actualWaitTime,
|
|
2829
|
+
currentValue,
|
|
2830
|
+
lastError: lastError?.message || null,
|
|
2831
|
+
message: conditionMet
|
|
2832
|
+
? `Condition '${condition}' met after ${(actualWaitTime / 1000).toFixed(2)}s`
|
|
2833
|
+
: `Condition '${condition}' not met within ${timeout}s timeout`,
|
|
2834
|
+
};
|
|
2835
|
+
if (lastError) {
|
|
2836
|
+
state.log += `Last error: ${lastError.message}\n`;
|
|
2837
|
+
}
|
|
2838
|
+
try {
|
|
2839
|
+
await _commandFinally(state, this);
|
|
2840
|
+
}
|
|
2841
|
+
catch (finallyError) {
|
|
2842
|
+
state.log += `Error in _commandFinally: ${finallyError.message}\n`;
|
|
2843
|
+
}
|
|
2844
|
+
return state.info;
|
|
2845
|
+
}
|
|
2233
2846
|
async extractEmailData(emailAddress, options, world) {
|
|
2234
2847
|
if (!emailAddress) {
|
|
2235
2848
|
throw new Error("email address is null");
|
|
@@ -2387,8 +3000,49 @@ class StableBrowser {
|
|
|
2387
3000
|
console.debug(error);
|
|
2388
3001
|
}
|
|
2389
3002
|
}
|
|
3003
|
+
_matcher(text) {
|
|
3004
|
+
if (!text) {
|
|
3005
|
+
return { matcher: "contains", queryText: "" };
|
|
3006
|
+
}
|
|
3007
|
+
if (text.length < 2) {
|
|
3008
|
+
return { matcher: "contains", queryText: text };
|
|
3009
|
+
}
|
|
3010
|
+
const split = text.split(":");
|
|
3011
|
+
const matcher = split[0].toLowerCase();
|
|
3012
|
+
const queryText = split.slice(1).join(":").trim();
|
|
3013
|
+
return { matcher, queryText };
|
|
3014
|
+
}
|
|
3015
|
+
_getDomain(url) {
|
|
3016
|
+
if (url.length === 0 || (!url.startsWith("http://") && !url.startsWith("https://"))) {
|
|
3017
|
+
return "";
|
|
3018
|
+
}
|
|
3019
|
+
let hostnameFragments = url.split("/")[2].split(".");
|
|
3020
|
+
if (hostnameFragments.some((fragment) => fragment.includes(":"))) {
|
|
3021
|
+
return hostnameFragments.join("-").split(":").join("-");
|
|
3022
|
+
}
|
|
3023
|
+
let n = hostnameFragments.length;
|
|
3024
|
+
let fragments = [...hostnameFragments];
|
|
3025
|
+
while (n > 0 && hostnameFragments[n - 1].length <= 3) {
|
|
3026
|
+
hostnameFragments.pop();
|
|
3027
|
+
n = hostnameFragments.length;
|
|
3028
|
+
}
|
|
3029
|
+
if (n == 0) {
|
|
3030
|
+
if (fragments[0] === "www")
|
|
3031
|
+
fragments = fragments.slice(1);
|
|
3032
|
+
return fragments.length > 1 ? fragments.slice(0, fragments.length - 1).join("-") : fragments.join("-");
|
|
3033
|
+
}
|
|
3034
|
+
if (hostnameFragments[0] === "www")
|
|
3035
|
+
hostnameFragments = hostnameFragments.slice(1);
|
|
3036
|
+
return hostnameFragments.join(".");
|
|
3037
|
+
}
|
|
3038
|
+
/**
|
|
3039
|
+
* Verify the page path matches the given path.
|
|
3040
|
+
* @param {string} pathPart - The path to verify.
|
|
3041
|
+
* @param {object} options - Options for verification.
|
|
3042
|
+
* @param {object} world - The world context.
|
|
3043
|
+
* @returns {Promise<object>} - The state info after verification.
|
|
3044
|
+
*/
|
|
2390
3045
|
async verifyPagePath(pathPart, options = {}, world = null) {
|
|
2391
|
-
const startTime = Date.now();
|
|
2392
3046
|
let error = null;
|
|
2393
3047
|
let screenshotId = null;
|
|
2394
3048
|
let screenshotPath = null;
|
|
@@ -2402,113 +3056,212 @@ class StableBrowser {
|
|
|
2402
3056
|
pathPart = newValue;
|
|
2403
3057
|
}
|
|
2404
3058
|
info.pathPart = pathPart;
|
|
3059
|
+
const { matcher, queryText } = this._matcher(pathPart);
|
|
3060
|
+
const state = {
|
|
3061
|
+
text_search: queryText,
|
|
3062
|
+
options,
|
|
3063
|
+
world,
|
|
3064
|
+
locate: false,
|
|
3065
|
+
scroll: false,
|
|
3066
|
+
highlight: false,
|
|
3067
|
+
type: Types.VERIFY_PAGE_PATH,
|
|
3068
|
+
text: `Verify the page url is ${queryText}`,
|
|
3069
|
+
_text: `Verify the page url is ${queryText}`,
|
|
3070
|
+
operation: "verifyPagePath",
|
|
3071
|
+
log: "***** verify page url is " + queryText + " *****\n",
|
|
3072
|
+
};
|
|
2405
3073
|
try {
|
|
3074
|
+
await _preCommand(state, this);
|
|
3075
|
+
state.info.text = queryText;
|
|
2406
3076
|
for (let i = 0; i < 30; i++) {
|
|
2407
3077
|
const url = await this.page.url();
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
3078
|
+
switch (matcher) {
|
|
3079
|
+
case "exact":
|
|
3080
|
+
if (url !== queryText) {
|
|
3081
|
+
if (i === 29) {
|
|
3082
|
+
throw new Error(`Page URL ${url} is not equal to ${queryText}`);
|
|
3083
|
+
}
|
|
3084
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3085
|
+
continue;
|
|
3086
|
+
}
|
|
3087
|
+
break;
|
|
3088
|
+
case "contains":
|
|
3089
|
+
if (!url.includes(queryText)) {
|
|
3090
|
+
if (i === 29) {
|
|
3091
|
+
throw new Error(`Page URL ${url} doesn't contain ${queryText}`);
|
|
3092
|
+
}
|
|
3093
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3094
|
+
continue;
|
|
3095
|
+
}
|
|
3096
|
+
break;
|
|
3097
|
+
case "starts-with":
|
|
3098
|
+
{
|
|
3099
|
+
const domain = this._getDomain(url);
|
|
3100
|
+
if (domain.length > 0 && domain !== queryText) {
|
|
3101
|
+
if (i === 29) {
|
|
3102
|
+
throw new Error(`Page URL ${url} doesn't start with ${queryText}`);
|
|
3103
|
+
}
|
|
3104
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3105
|
+
continue;
|
|
3106
|
+
}
|
|
3107
|
+
}
|
|
3108
|
+
break;
|
|
3109
|
+
case "ends-with":
|
|
3110
|
+
{
|
|
3111
|
+
const urlObj = new URL(url);
|
|
3112
|
+
let route = "/";
|
|
3113
|
+
if (urlObj.pathname !== "/") {
|
|
3114
|
+
route = urlObj.pathname.split("/").slice(-1)[0].trim();
|
|
3115
|
+
}
|
|
3116
|
+
else {
|
|
3117
|
+
route = "/";
|
|
3118
|
+
}
|
|
3119
|
+
if (route !== queryText) {
|
|
3120
|
+
if (i === 29) {
|
|
3121
|
+
throw new Error(`Page URL ${url} doesn't end with ${queryText}`);
|
|
3122
|
+
}
|
|
3123
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3124
|
+
continue;
|
|
3125
|
+
}
|
|
3126
|
+
}
|
|
3127
|
+
break;
|
|
3128
|
+
case "regex":
|
|
3129
|
+
const regex = new RegExp(queryText.slice(1, -1), "g");
|
|
3130
|
+
if (!regex.test(url)) {
|
|
3131
|
+
if (i === 29) {
|
|
3132
|
+
throw new Error(`Page URL ${url} doesn't match regex ${queryText}`);
|
|
3133
|
+
}
|
|
3134
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3135
|
+
continue;
|
|
3136
|
+
}
|
|
3137
|
+
break;
|
|
3138
|
+
default:
|
|
3139
|
+
console.log("Unknown matching type, defaulting to contains matching");
|
|
3140
|
+
if (!url.includes(pathPart)) {
|
|
3141
|
+
if (i === 29) {
|
|
3142
|
+
throw new Error(`Page URL ${url} does not contain ${pathPart}`);
|
|
3143
|
+
}
|
|
3144
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3145
|
+
continue;
|
|
3146
|
+
}
|
|
2414
3147
|
}
|
|
2415
|
-
|
|
2416
|
-
return info;
|
|
3148
|
+
await _screenshot(state, this);
|
|
3149
|
+
return state.info;
|
|
2417
3150
|
}
|
|
2418
3151
|
}
|
|
2419
3152
|
catch (e) {
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
info.screenshotPath = screenshotPath;
|
|
2424
|
-
Object.assign(e, { info: info });
|
|
2425
|
-
error = e;
|
|
2426
|
-
// throw e;
|
|
2427
|
-
await _commandError({ text: "verifyPagePath", operation: "verifyPagePath", pathPart, info, throwError: true }, e, this);
|
|
3153
|
+
state.info.failCause.lastError = e.message;
|
|
3154
|
+
state.info.failCause.assertionFailed = true;
|
|
3155
|
+
await _commandError(state, e, this);
|
|
2428
3156
|
}
|
|
2429
3157
|
finally {
|
|
2430
|
-
|
|
2431
|
-
_reportToWorld(world, {
|
|
2432
|
-
type: Types.VERIFY_PAGE_PATH,
|
|
2433
|
-
text: "Verify page path",
|
|
2434
|
-
_text: "Verify the page path contains " + pathPart,
|
|
2435
|
-
screenshotId,
|
|
2436
|
-
result: error
|
|
2437
|
-
? {
|
|
2438
|
-
status: "FAILED",
|
|
2439
|
-
startTime,
|
|
2440
|
-
endTime,
|
|
2441
|
-
message: error?.message,
|
|
2442
|
-
}
|
|
2443
|
-
: {
|
|
2444
|
-
status: "PASSED",
|
|
2445
|
-
startTime,
|
|
2446
|
-
endTime,
|
|
2447
|
-
},
|
|
2448
|
-
info: info,
|
|
2449
|
-
});
|
|
3158
|
+
await _commandFinally(state, this);
|
|
2450
3159
|
}
|
|
2451
3160
|
}
|
|
3161
|
+
/**
|
|
3162
|
+
* Verify the page title matches the given title.
|
|
3163
|
+
* @param {string} title - The title to verify.
|
|
3164
|
+
* @param {object} options - Options for verification.
|
|
3165
|
+
* @param {object} world - The world context.
|
|
3166
|
+
* @returns {Promise<object>} - The state info after verification.
|
|
3167
|
+
*/
|
|
2452
3168
|
async verifyPageTitle(title, options = {}, world = null) {
|
|
2453
|
-
const startTime = Date.now();
|
|
2454
3169
|
let error = null;
|
|
2455
3170
|
let screenshotId = null;
|
|
2456
3171
|
let screenshotPath = null;
|
|
2457
3172
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
2458
|
-
const info = {};
|
|
2459
|
-
info.log = "***** verify page title " + title + " *****\n";
|
|
2460
|
-
info.operation = "verifyPageTitle";
|
|
2461
3173
|
const newValue = await this._replaceWithLocalData(title, world);
|
|
2462
3174
|
if (newValue !== title) {
|
|
2463
3175
|
this.logger.info(title + "=" + newValue);
|
|
2464
3176
|
title = newValue;
|
|
2465
3177
|
}
|
|
2466
|
-
|
|
3178
|
+
const { matcher, queryText } = this._matcher(title);
|
|
3179
|
+
const state = {
|
|
3180
|
+
text_search: queryText,
|
|
3181
|
+
options,
|
|
3182
|
+
world,
|
|
3183
|
+
locate: false,
|
|
3184
|
+
scroll: false,
|
|
3185
|
+
highlight: false,
|
|
3186
|
+
type: Types.VERIFY_PAGE_TITLE,
|
|
3187
|
+
text: `Verify the page title is ${queryText}`,
|
|
3188
|
+
_text: `Verify the page title is ${queryText}`,
|
|
3189
|
+
operation: "verifyPageTitle",
|
|
3190
|
+
log: "***** verify page title is " + queryText + " *****\n",
|
|
3191
|
+
};
|
|
2467
3192
|
try {
|
|
3193
|
+
await _preCommand(state, this);
|
|
3194
|
+
state.info.text = queryText;
|
|
2468
3195
|
for (let i = 0; i < 30; i++) {
|
|
2469
3196
|
const foundTitle = await this.page.title();
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
3197
|
+
switch (matcher) {
|
|
3198
|
+
case "exact":
|
|
3199
|
+
if (foundTitle !== queryText) {
|
|
3200
|
+
if (i === 29) {
|
|
3201
|
+
throw new Error(`Page Title ${foundTitle} is not equal to ${queryText}`);
|
|
3202
|
+
}
|
|
3203
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3204
|
+
continue;
|
|
3205
|
+
}
|
|
3206
|
+
break;
|
|
3207
|
+
case "contains":
|
|
3208
|
+
if (!foundTitle.includes(queryText)) {
|
|
3209
|
+
if (i === 29) {
|
|
3210
|
+
throw new Error(`Page Title ${foundTitle} doesn't contain ${queryText}`);
|
|
3211
|
+
}
|
|
3212
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3213
|
+
continue;
|
|
3214
|
+
}
|
|
3215
|
+
break;
|
|
3216
|
+
case "starts-with":
|
|
3217
|
+
if (!foundTitle.startsWith(queryText)) {
|
|
3218
|
+
if (i === 29) {
|
|
3219
|
+
throw new Error(`Page title ${foundTitle} doesn't start with ${queryText}`);
|
|
3220
|
+
}
|
|
3221
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3222
|
+
continue;
|
|
3223
|
+
}
|
|
3224
|
+
break;
|
|
3225
|
+
case "ends-with":
|
|
3226
|
+
if (!foundTitle.endsWith(queryText)) {
|
|
3227
|
+
if (i === 29) {
|
|
3228
|
+
throw new Error(`Page Title ${foundTitle} doesn't end with ${queryText}`);
|
|
3229
|
+
}
|
|
3230
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3231
|
+
continue;
|
|
3232
|
+
}
|
|
3233
|
+
break;
|
|
3234
|
+
case "regex":
|
|
3235
|
+
const regex = new RegExp(queryText.slice(1, -1), "g");
|
|
3236
|
+
if (!regex.test(foundTitle)) {
|
|
3237
|
+
if (i === 29) {
|
|
3238
|
+
throw new Error(`Page Title ${foundTitle} doesn't match regex ${queryText}`);
|
|
3239
|
+
}
|
|
3240
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3241
|
+
continue;
|
|
3242
|
+
}
|
|
3243
|
+
break;
|
|
3244
|
+
default:
|
|
3245
|
+
console.log("Unknown matching type, defaulting to contains matching");
|
|
3246
|
+
if (!foundTitle.includes(title)) {
|
|
3247
|
+
if (i === 29) {
|
|
3248
|
+
throw new Error(`Page Title ${foundTitle} does not contain ${title}`);
|
|
3249
|
+
}
|
|
3250
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3251
|
+
continue;
|
|
3252
|
+
}
|
|
2476
3253
|
}
|
|
2477
|
-
|
|
2478
|
-
return info;
|
|
3254
|
+
await _screenshot(state, this);
|
|
3255
|
+
return state.info;
|
|
2479
3256
|
}
|
|
2480
3257
|
}
|
|
2481
3258
|
catch (e) {
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
info.screenshotPath = screenshotPath;
|
|
2486
|
-
Object.assign(e, { info: info });
|
|
2487
|
-
error = e;
|
|
2488
|
-
// throw e;
|
|
2489
|
-
await _commandError({ text: "verifyPageTitle", operation: "verifyPageTitle", title, info, throwError: true }, e, this);
|
|
3259
|
+
state.info.failCause.lastError = e.message;
|
|
3260
|
+
state.info.failCause.assertionFailed = true;
|
|
3261
|
+
await _commandError(state, e, this);
|
|
2490
3262
|
}
|
|
2491
3263
|
finally {
|
|
2492
|
-
|
|
2493
|
-
_reportToWorld(world, {
|
|
2494
|
-
type: Types.VERIFY_PAGE_PATH,
|
|
2495
|
-
text: "Verify page title",
|
|
2496
|
-
_text: "Verify the page title contains " + title,
|
|
2497
|
-
screenshotId,
|
|
2498
|
-
result: error
|
|
2499
|
-
? {
|
|
2500
|
-
status: "FAILED",
|
|
2501
|
-
startTime,
|
|
2502
|
-
endTime,
|
|
2503
|
-
message: error?.message,
|
|
2504
|
-
}
|
|
2505
|
-
: {
|
|
2506
|
-
status: "PASSED",
|
|
2507
|
-
startTime,
|
|
2508
|
-
endTime,
|
|
2509
|
-
},
|
|
2510
|
-
info: info,
|
|
2511
|
-
});
|
|
3264
|
+
await _commandFinally(state, this);
|
|
2512
3265
|
}
|
|
2513
3266
|
}
|
|
2514
3267
|
async findTextInAllFrames(dateAlternatives, numberAlternatives, text, state, partial = true, ignoreCase = false) {
|
|
@@ -2592,27 +3345,10 @@ class StableBrowser {
|
|
|
2592
3345
|
const frame = resultWithElementsFound[0].frame;
|
|
2593
3346
|
const dataAttribute = `[data-blinq-id-${resultWithElementsFound[0].randomToken}]`;
|
|
2594
3347
|
await this._highlightElements(frame, dataAttribute);
|
|
2595
|
-
// if (world && world.screenshot && !world.screenshotPath) {
|
|
2596
|
-
// console.log(`Highlighting for verify text is found while running from recorder`);
|
|
2597
|
-
// this._highlightElements(frame, dataAttribute).then(async () => {
|
|
2598
|
-
// await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
2599
|
-
// this._unhighlightElements(frame, dataAttribute)
|
|
2600
|
-
// .then(async () => {
|
|
2601
|
-
// console.log(`Unhighlighted frame dataAttribute successfully`);
|
|
2602
|
-
// })
|
|
2603
|
-
// .catch(
|
|
2604
|
-
// (e) => {}
|
|
2605
|
-
// console.error(e)
|
|
2606
|
-
// );
|
|
2607
|
-
// });
|
|
2608
|
-
// }
|
|
2609
3348
|
const element = await frame.locator(dataAttribute).first();
|
|
2610
|
-
// await new Promise((resolve) => setTimeout(resolve, 100));
|
|
2611
|
-
// await this._unhighlightElements(frame, dataAttribute);
|
|
2612
3349
|
if (element) {
|
|
2613
3350
|
await this.scrollIfNeeded(element, state.info);
|
|
2614
3351
|
await element.dispatchEvent("bvt_verify_page_contains_text");
|
|
2615
|
-
// await _screenshot(state, this, element);
|
|
2616
3352
|
}
|
|
2617
3353
|
}
|
|
2618
3354
|
await _screenshot(state, this);
|
|
@@ -2622,7 +3358,6 @@ class StableBrowser {
|
|
|
2622
3358
|
console.error(error);
|
|
2623
3359
|
}
|
|
2624
3360
|
}
|
|
2625
|
-
// await expect(element).toHaveCount(1, { timeout: 10000 });
|
|
2626
3361
|
}
|
|
2627
3362
|
catch (e) {
|
|
2628
3363
|
await _commandError(state, e, this);
|
|
@@ -2704,6 +3439,8 @@ class StableBrowser {
|
|
|
2704
3439
|
operation: "verify_text_with_relation",
|
|
2705
3440
|
log: "***** search for " + textAnchor + " climb " + climb + " and verify " + textToVerify + " found *****\n",
|
|
2706
3441
|
};
|
|
3442
|
+
const cmdStartTime = Date.now();
|
|
3443
|
+
let cmdEndTime = null;
|
|
2707
3444
|
const timeout = this._getFindElementTimeout(options);
|
|
2708
3445
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
2709
3446
|
let newValue = await this._replaceWithLocalData(textAnchor, world);
|
|
@@ -2739,6 +3476,17 @@ class StableBrowser {
|
|
|
2739
3476
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
2740
3477
|
continue;
|
|
2741
3478
|
}
|
|
3479
|
+
else {
|
|
3480
|
+
cmdEndTime = Date.now();
|
|
3481
|
+
if (cmdEndTime - cmdStartTime > 55000) {
|
|
3482
|
+
if (foundAncore) {
|
|
3483
|
+
throw new Error(`Text ${textToVerify} not found in page`);
|
|
3484
|
+
}
|
|
3485
|
+
else {
|
|
3486
|
+
throw new Error(`Text ${textAnchor} not found in page`);
|
|
3487
|
+
}
|
|
3488
|
+
}
|
|
3489
|
+
}
|
|
2742
3490
|
try {
|
|
2743
3491
|
for (let i = 0; i < resultWithElementsFound.length; i++) {
|
|
2744
3492
|
foundAncore = true;
|
|
@@ -3138,6 +3886,43 @@ class StableBrowser {
|
|
|
3138
3886
|
});
|
|
3139
3887
|
}
|
|
3140
3888
|
}
|
|
3889
|
+
/**
|
|
3890
|
+
* Explicit wait/sleep function that pauses execution for a specified duration
|
|
3891
|
+
* @param duration - Duration to sleep in milliseconds (default: 1000ms)
|
|
3892
|
+
* @param options - Optional configuration object
|
|
3893
|
+
* @param world - Optional world context
|
|
3894
|
+
* @returns Promise that resolves after the specified duration
|
|
3895
|
+
*/
|
|
3896
|
+
async sleep(duration = 1000, options = {}, world = null) {
|
|
3897
|
+
const state = {
|
|
3898
|
+
duration,
|
|
3899
|
+
options,
|
|
3900
|
+
world,
|
|
3901
|
+
locate: false,
|
|
3902
|
+
scroll: false,
|
|
3903
|
+
screenshot: false,
|
|
3904
|
+
highlight: false,
|
|
3905
|
+
type: Types.SLEEP,
|
|
3906
|
+
text: `Sleep for ${duration} ms`,
|
|
3907
|
+
_text: `Sleep for ${duration} ms`,
|
|
3908
|
+
operation: "sleep",
|
|
3909
|
+
log: `***** Sleep for ${duration} ms *****\n`,
|
|
3910
|
+
};
|
|
3911
|
+
try {
|
|
3912
|
+
await _preCommand(state, this);
|
|
3913
|
+
if (duration < 0) {
|
|
3914
|
+
throw new Error("Sleep duration cannot be negative");
|
|
3915
|
+
}
|
|
3916
|
+
await new Promise((resolve) => setTimeout(resolve, duration));
|
|
3917
|
+
return state.info;
|
|
3918
|
+
}
|
|
3919
|
+
catch (e) {
|
|
3920
|
+
await _commandError(state, e, this);
|
|
3921
|
+
}
|
|
3922
|
+
finally {
|
|
3923
|
+
await _commandFinally(state, this);
|
|
3924
|
+
}
|
|
3925
|
+
}
|
|
3141
3926
|
async _replaceWithLocalData(value, world, _decrypt = true, totpWait = true) {
|
|
3142
3927
|
try {
|
|
3143
3928
|
return await replaceWithLocalTestData(value, world, _decrypt, totpWait, this.context, this);
|
|
@@ -3189,6 +3974,22 @@ class StableBrowser {
|
|
|
3189
3974
|
}
|
|
3190
3975
|
}
|
|
3191
3976
|
async waitForPageLoad(options = {}, world = null) {
|
|
3977
|
+
// try {
|
|
3978
|
+
// let currentPagePath = null;
|
|
3979
|
+
// currentPagePath = new URL(this.page.url()).pathname;
|
|
3980
|
+
// if (this.latestPagePath) {
|
|
3981
|
+
// // get the currect page path and compare with the latest page path
|
|
3982
|
+
// if (this.latestPagePath === currentPagePath) {
|
|
3983
|
+
// // if the page path is the same, do not wait for page load
|
|
3984
|
+
// console.log("No page change: " + currentPagePath);
|
|
3985
|
+
// return;
|
|
3986
|
+
// }
|
|
3987
|
+
// }
|
|
3988
|
+
// this.latestPagePath = currentPagePath;
|
|
3989
|
+
// } catch (e) {
|
|
3990
|
+
// console.debug("Error getting current page path: ", e);
|
|
3991
|
+
// }
|
|
3992
|
+
//console.log("Waiting for page load");
|
|
3192
3993
|
let timeout = this._getLoadTimeout(options);
|
|
3193
3994
|
const promiseArray = [];
|
|
3194
3995
|
// let waitForNetworkIdle = true;
|
|
@@ -3221,10 +4022,12 @@ class StableBrowser {
|
|
|
3221
4022
|
else if (e.label === "domcontentloaded") {
|
|
3222
4023
|
console.log("waited for the domcontent loaded timeout");
|
|
3223
4024
|
}
|
|
3224
|
-
console.log(".");
|
|
3225
4025
|
}
|
|
3226
4026
|
finally {
|
|
3227
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
4027
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
4028
|
+
if (options && !options.noSleep) {
|
|
4029
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
4030
|
+
}
|
|
3228
4031
|
({ screenshotId, screenshotPath } = await this._screenShot(options, world));
|
|
3229
4032
|
const endTime = Date.now();
|
|
3230
4033
|
_reportToWorld(world, {
|
|
@@ -3265,7 +4068,6 @@ class StableBrowser {
|
|
|
3265
4068
|
await this.page.close();
|
|
3266
4069
|
}
|
|
3267
4070
|
catch (e) {
|
|
3268
|
-
console.log(".");
|
|
3269
4071
|
await _commandError(state, e, this);
|
|
3270
4072
|
}
|
|
3271
4073
|
finally {
|
|
@@ -3279,7 +4081,7 @@ class StableBrowser {
|
|
|
3279
4081
|
}
|
|
3280
4082
|
operation = options.operation;
|
|
3281
4083
|
// validate operation is one of the supported operations
|
|
3282
|
-
if (operation != "click" && operation != "hover+click") {
|
|
4084
|
+
if (operation != "click" && operation != "hover+click" && operation != "hover") {
|
|
3283
4085
|
throw new Error("operation is not supported");
|
|
3284
4086
|
}
|
|
3285
4087
|
const state = {
|
|
@@ -3348,6 +4150,17 @@ class StableBrowser {
|
|
|
3348
4150
|
state.element = results[0];
|
|
3349
4151
|
await performAction("hover+click", state.element, options, this, state, _params);
|
|
3350
4152
|
break;
|
|
4153
|
+
case "hover":
|
|
4154
|
+
if (!options.css) {
|
|
4155
|
+
throw new Error("css is not defined");
|
|
4156
|
+
}
|
|
4157
|
+
const result1 = await findElementsInArea(options.css, cellArea, this, options);
|
|
4158
|
+
if (result1.length === 0) {
|
|
4159
|
+
throw new Error(`Element not found in cell area`);
|
|
4160
|
+
}
|
|
4161
|
+
state.element = result1[0];
|
|
4162
|
+
await performAction("hover", state.element, options, this, state, _params);
|
|
4163
|
+
break;
|
|
3351
4164
|
default:
|
|
3352
4165
|
throw new Error("operation is not supported");
|
|
3353
4166
|
}
|
|
@@ -3380,7 +4193,6 @@ class StableBrowser {
|
|
|
3380
4193
|
await this.page.setViewportSize({ width: width, height: hight });
|
|
3381
4194
|
}
|
|
3382
4195
|
catch (e) {
|
|
3383
|
-
console.log(".");
|
|
3384
4196
|
await _commandError({ text: "setViewportSize", operation: "setViewportSize", width, hight, info }, e, this);
|
|
3385
4197
|
}
|
|
3386
4198
|
finally {
|
|
@@ -3418,7 +4230,6 @@ class StableBrowser {
|
|
|
3418
4230
|
await this.page.reload();
|
|
3419
4231
|
}
|
|
3420
4232
|
catch (e) {
|
|
3421
|
-
console.log(".");
|
|
3422
4233
|
await _commandError({ text: "reloadPage", operation: "reloadPage", info }, e, this);
|
|
3423
4234
|
}
|
|
3424
4235
|
finally {
|
|
@@ -3462,6 +4273,10 @@ class StableBrowser {
|
|
|
3462
4273
|
}
|
|
3463
4274
|
}
|
|
3464
4275
|
async beforeScenario(world, scenario) {
|
|
4276
|
+
if (world && world.attach) {
|
|
4277
|
+
world.attach(this.context.reportFolder, { mediaType: "text/plain" });
|
|
4278
|
+
}
|
|
4279
|
+
this.context.loadedRoutes = null;
|
|
3465
4280
|
this.beforeScenarioCalled = true;
|
|
3466
4281
|
if (scenario && scenario.pickle && scenario.pickle.name) {
|
|
3467
4282
|
this.scenarioName = scenario.pickle.name;
|
|
@@ -3485,7 +4300,7 @@ class StableBrowser {
|
|
|
3485
4300
|
envName = this.context.environment.name;
|
|
3486
4301
|
}
|
|
3487
4302
|
if (!process.env.TEMP_RUN) {
|
|
3488
|
-
await getTestData(envName, world, undefined, this.featureName, this.scenarioName);
|
|
4303
|
+
await getTestData(envName, world, undefined, this.featureName, this.scenarioName, this.context);
|
|
3489
4304
|
}
|
|
3490
4305
|
await loadBrunoParams(this.context, this.context.environment.name);
|
|
3491
4306
|
}
|
|
@@ -3493,6 +4308,7 @@ class StableBrowser {
|
|
|
3493
4308
|
async beforeStep(world, step) {
|
|
3494
4309
|
if (!this.beforeScenarioCalled) {
|
|
3495
4310
|
this.beforeScenario(world, step);
|
|
4311
|
+
this.context.loadedRoutes = null;
|
|
3496
4312
|
}
|
|
3497
4313
|
if (this.stepIndex === undefined) {
|
|
3498
4314
|
this.stepIndex = 0;
|
|
@@ -3517,13 +4333,16 @@ class StableBrowser {
|
|
|
3517
4333
|
}
|
|
3518
4334
|
if (this.initSnapshotTaken === false) {
|
|
3519
4335
|
this.initSnapshotTaken = true;
|
|
3520
|
-
if (world && world.attach && !process.env.DISABLE_SNAPSHOT) {
|
|
4336
|
+
if (world && world.attach && !process.env.DISABLE_SNAPSHOT && !this.fastMode) {
|
|
3521
4337
|
const snapshot = await this.getAriaSnapshot();
|
|
3522
4338
|
if (snapshot) {
|
|
3523
4339
|
await world.attach(JSON.stringify(snapshot), "application/json+snapshot-before");
|
|
3524
4340
|
}
|
|
3525
4341
|
}
|
|
3526
4342
|
}
|
|
4343
|
+
this.context.routeResults = null;
|
|
4344
|
+
await registerBeforeStepRoutes(this.context, this.stepName);
|
|
4345
|
+
networkBeforeStep(this.stepName);
|
|
3527
4346
|
}
|
|
3528
4347
|
async getAriaSnapshot() {
|
|
3529
4348
|
try {
|
|
@@ -3543,12 +4362,18 @@ class StableBrowser {
|
|
|
3543
4362
|
try {
|
|
3544
4363
|
// Ensure frame is attached and has body
|
|
3545
4364
|
const body = frame.locator("body");
|
|
3546
|
-
await body.waitFor({ timeout:
|
|
4365
|
+
//await body.waitFor({ timeout: 2000 }); // wait explicitly
|
|
3547
4366
|
const snapshot = await body.ariaSnapshot({ timeout });
|
|
4367
|
+
if (!snapshot) {
|
|
4368
|
+
continue;
|
|
4369
|
+
}
|
|
3548
4370
|
content.push(`- frame: ${i}`);
|
|
3549
4371
|
content.push(snapshot);
|
|
3550
4372
|
}
|
|
3551
|
-
catch (innerErr) {
|
|
4373
|
+
catch (innerErr) {
|
|
4374
|
+
console.warn(`Frame ${i} snapshot failed:`, innerErr);
|
|
4375
|
+
content.push(`- frame: ${i} - error: ${innerErr.message}`);
|
|
4376
|
+
}
|
|
3552
4377
|
}
|
|
3553
4378
|
return content.join("\n");
|
|
3554
4379
|
}
|
|
@@ -3620,13 +4445,43 @@ class StableBrowser {
|
|
|
3620
4445
|
if (this.context) {
|
|
3621
4446
|
this.context.examplesRow = null;
|
|
3622
4447
|
}
|
|
3623
|
-
if (world && world.attach && !process.env.DISABLE_SNAPSHOT) {
|
|
4448
|
+
if (world && world.attach && !process.env.DISABLE_SNAPSHOT && !this.fastMode) {
|
|
3624
4449
|
const snapshot = await this.getAriaSnapshot();
|
|
3625
4450
|
if (snapshot) {
|
|
3626
4451
|
const obj = {};
|
|
3627
4452
|
await world.attach(JSON.stringify(snapshot), "application/json+snapshot-after");
|
|
3628
4453
|
}
|
|
3629
4454
|
}
|
|
4455
|
+
this.context.routeResults = await registerAfterStepRoutes(this.context, world);
|
|
4456
|
+
if (this.context.routeResults) {
|
|
4457
|
+
if (world && world.attach) {
|
|
4458
|
+
await world.attach(JSON.stringify(this.context.routeResults), "application/json+intercept-results");
|
|
4459
|
+
}
|
|
4460
|
+
}
|
|
4461
|
+
if (!process.env.TEMP_RUN) {
|
|
4462
|
+
const state = {
|
|
4463
|
+
world,
|
|
4464
|
+
locate: false,
|
|
4465
|
+
scroll: false,
|
|
4466
|
+
screenshot: true,
|
|
4467
|
+
highlight: true,
|
|
4468
|
+
type: Types.STEP_COMPLETE,
|
|
4469
|
+
text: "end of scenario",
|
|
4470
|
+
_text: "end of scenario",
|
|
4471
|
+
operation: "step_complete",
|
|
4472
|
+
log: "***** " + "end of scenario" + " *****\n",
|
|
4473
|
+
};
|
|
4474
|
+
try {
|
|
4475
|
+
await _preCommand(state, this);
|
|
4476
|
+
}
|
|
4477
|
+
catch (e) {
|
|
4478
|
+
await _commandError(state, e, this);
|
|
4479
|
+
}
|
|
4480
|
+
finally {
|
|
4481
|
+
await _commandFinally(state, this);
|
|
4482
|
+
}
|
|
4483
|
+
}
|
|
4484
|
+
networkAfterStep(this.stepName);
|
|
3630
4485
|
}
|
|
3631
4486
|
}
|
|
3632
4487
|
function createTimedPromise(promise, label) {
|
|
@@ -3635,4 +4490,4 @@ function createTimedPromise(promise, label) {
|
|
|
3635
4490
|
.catch((error) => Promise.reject({ status: "rejected", label, error }));
|
|
3636
4491
|
}
|
|
3637
4492
|
export { StableBrowser };
|
|
3638
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlX2Jyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhYmxlX2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sVUFBVSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLGFBQWEsTUFBTSxlQUFlLENBQUM7QUFDMUMsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEVBRWIsNEJBQTRCLEVBQzVCLGVBQWUsRUFDZixTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1QixjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksRUFDWixhQUFhLEdBQ2QsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcs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
|
|
4493
|
+
//# sourceMappingURL=stable_browser.js.map
|