automation_model 1.0.488-dev → 1.0.488
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 +133 -0
- package/lib/analyze_helper.js.map +1 -1
- package/lib/api.d.ts +2 -2
- package/lib/api.js +151 -120
- package/lib/api.js.map +1 -1
- package/lib/auto_page.d.ts +7 -2
- package/lib/auto_page.js +309 -29
- package/lib/auto_page.js.map +1 -1
- package/lib/browser_manager.d.ts +6 -3
- package/lib/browser_manager.js +194 -46
- package/lib/browser_manager.js.map +1 -1
- package/lib/bruno.d.ts +2 -0
- package/lib/bruno.js +381 -0
- 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.d.ts +5 -4
- package/lib/command_common.js +126 -21
- package/lib/command_common.js.map +1 -1
- package/lib/date_time.js.map +1 -1
- package/lib/drawRect.js.map +1 -1
- package/lib/environment.d.ts +1 -0
- package/lib/environment.js +1 -0
- package/lib/environment.js.map +1 -1
- package/lib/error-messages.d.ts +6 -0
- package/lib/error-messages.js +206 -0
- package/lib/error-messages.js.map +1 -0
- package/lib/file_checker.d.ts +1 -0
- package/lib/file_checker.js +172 -0
- package/lib/file_checker.js.map +1 -0
- package/lib/find_function.js.map +1 -1
- package/lib/generation_scripts.d.ts +4 -0
- package/lib/generation_scripts.js +2 -0
- package/lib/generation_scripts.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/init_browser.d.ts +4 -3
- package/lib/init_browser.js +160 -83
- package/lib/init_browser.js.map +1 -1
- package/lib/locate_element.js +16 -14
- package/lib/locate_element.js.map +1 -1
- package/lib/locator.d.ts +37 -0
- package/lib/locator.js +172 -0
- package/lib/locator.js.map +1 -1
- package/lib/locator_log.d.ts +26 -0
- package/lib/locator_log.js +69 -0
- package/lib/locator_log.js.map +1 -0
- package/lib/network.d.ts +5 -0
- package/lib/network.js +494 -0
- package/lib/network.js.map +1 -0
- package/lib/route.d.ts +83 -0
- package/lib/route.js +691 -0
- package/lib/route.js.map +1 -0
- package/lib/scripts/axe.mini.js +24005 -0
- package/lib/snapshot_validation.d.ts +37 -0
- package/lib/snapshot_validation.js +360 -0
- package/lib/snapshot_validation.js.map +1 -0
- package/lib/stable_browser.d.ts +147 -47
- package/lib/stable_browser.js +2587 -828
- package/lib/stable_browser.js.map +1 -1
- package/lib/table.d.ts +15 -0
- package/lib/table.js +257 -0
- package/lib/table.js.map +1 -0
- package/lib/table_analyze.js.map +1 -1
- package/lib/table_helper.d.ts +19 -0
- package/lib/table_helper.js +130 -0
- package/lib/table_helper.js.map +1 -0
- package/lib/test_context.d.ts +6 -0
- package/lib/test_context.js +5 -0
- package/lib/test_context.js.map +1 -1
- package/lib/utils.d.ts +38 -3
- package/lib/utils.js +748 -36
- package/lib/utils.js.map +1 -1
- package/package.json +31 -13
- package/lib/axe/axe.mini.js +0 -12
package/lib/table.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ElementHandle, Page } from "playwright";
|
|
2
|
+
interface AnalyzeResult {
|
|
3
|
+
status: boolean;
|
|
4
|
+
cells: any[];
|
|
5
|
+
error: string;
|
|
6
|
+
cellIndex: number;
|
|
7
|
+
rowIndex: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class Table {
|
|
10
|
+
private tableData;
|
|
11
|
+
constructor();
|
|
12
|
+
initFromElement(page: Page, tableElement: ElementHandle): Promise<void>;
|
|
13
|
+
analyze(analyzeObject: any): AnalyzeResult;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
package/lib/table.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const currentDir = path.dirname(__filename);
|
|
6
|
+
export class Table {
|
|
7
|
+
tableData;
|
|
8
|
+
constructor() { }
|
|
9
|
+
/* result object looks as follows:
|
|
10
|
+
{
|
|
11
|
+
"rowsCount": 5,
|
|
12
|
+
"columnsCount": 8,
|
|
13
|
+
"nodes": [
|
|
14
|
+
{
|
|
15
|
+
"tag": "TR",
|
|
16
|
+
"role": "row",
|
|
17
|
+
"rec": [
|
|
18
|
+
160.1171875,
|
|
19
|
+
726.5234375,
|
|
20
|
+
274.2578125,
|
|
21
|
+
28.5
|
|
22
|
+
],
|
|
23
|
+
"children": [
|
|
24
|
+
{
|
|
25
|
+
"tag": "TH",
|
|
26
|
+
"role": "columnheader",
|
|
27
|
+
"rec": [
|
|
28
|
+
160.1171875,
|
|
29
|
+
726.5234375,
|
|
30
|
+
54.6171875,
|
|
31
|
+
28.5
|
|
32
|
+
],
|
|
33
|
+
"children": [],
|
|
34
|
+
"text": "Family"
|
|
35
|
+
},
|
|
36
|
+
...
|
|
37
|
+
*/
|
|
38
|
+
async initFromElement(page, tableElement) {
|
|
39
|
+
let script = fs.readFileSync(path.join(currentDir, "locator.js"), "utf8");
|
|
40
|
+
// run the script inside the element context (iframe)
|
|
41
|
+
await tableElement.evaluate(script);
|
|
42
|
+
try {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
this.tableData = await tableElement.evaluate((_node) => {
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
return document.getTableData2(_node);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/*
|
|
54
|
+
analyzeObject examples:
|
|
55
|
+
{
|
|
56
|
+
type: “VALIDATE_HEADER”, cells: [“Name”, “Values”]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: “FIND_ROW”,
|
|
60
|
+
cells: [/.+/, “AAA”]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: “VALIDATE_GRID”,
|
|
64
|
+
grid: [[],[]]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: “VALIDATE_CELL”,
|
|
68
|
+
column_name: “Aaa”,
|
|
69
|
+
column_search_name:
|
|
70
|
+
row_search_value
|
|
71
|
+
expected_value
|
|
72
|
+
}
|
|
73
|
+
*/
|
|
74
|
+
// define the reault object structure
|
|
75
|
+
analyze(analyzeObject) {
|
|
76
|
+
let result = {
|
|
77
|
+
status: false,
|
|
78
|
+
cells: [],
|
|
79
|
+
error: "",
|
|
80
|
+
cellIndex: -1,
|
|
81
|
+
rowIndex: -1,
|
|
82
|
+
};
|
|
83
|
+
switch (analyzeObject.type) {
|
|
84
|
+
case "VALIDATE_HEADER":
|
|
85
|
+
result.cellIndex = _searchStringArrayInCellsArray(analyzeObject.cells, this.tableData.columnHeaders);
|
|
86
|
+
result.status = result.cellIndex !== -1;
|
|
87
|
+
if (result.status) {
|
|
88
|
+
result.cells = this.tableData.columnHeaders;
|
|
89
|
+
result.cellIndex = result.cellIndex;
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
case "FIND_ROW":
|
|
93
|
+
for (let i = 0; i < this.tableData.rows.length; i++) {
|
|
94
|
+
const index = _searchStringArrayInCellsArray(analyzeObject.cells, this.tableData.rows[i].children);
|
|
95
|
+
if (index !== -1) {
|
|
96
|
+
result.status = true;
|
|
97
|
+
result.cells = this.tableData.rows[i];
|
|
98
|
+
result.rowIndex = i;
|
|
99
|
+
result.cellIndex = index;
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// ts-ignore
|
|
104
|
+
result.error = "Row not found";
|
|
105
|
+
return result;
|
|
106
|
+
case "VALIDATE_CELL": {
|
|
107
|
+
if (
|
|
108
|
+
//!analyzeObject.column_name ||
|
|
109
|
+
!analyzeObject.row_anchor_value ||
|
|
110
|
+
!analyzeObject.expected_value) {
|
|
111
|
+
result.error = "Missing parameters, expected: row_anchor_value, expected_value";
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
// find all the rows that contain the row_anchor_value
|
|
115
|
+
let rows = [];
|
|
116
|
+
for (let i = 0; i < this.tableData.rows.length; i++) {
|
|
117
|
+
if (_searchStringArrayInCellsArray([analyzeObject.row_anchor_value], this.tableData.rows[i].children) !== -1) {
|
|
118
|
+
rows.push(this.tableData.rows[i]);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (rows.length === 0) {
|
|
122
|
+
result.error = "Row containing the anchor value not found";
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
// within the found rows find a cell with the expected value
|
|
126
|
+
for (let i = 0; i < rows.length; i++) {
|
|
127
|
+
const index = _searchStringArrayInCellsArray([analyzeObject.expected_value], rows[i].children);
|
|
128
|
+
if (index !== -1) {
|
|
129
|
+
result.status = true;
|
|
130
|
+
result.cells = rows[i].children[index];
|
|
131
|
+
result.rowIndex = i;
|
|
132
|
+
result.cellIndex = index;
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
result.error = "Cell not found";
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
case "GET_COLUMN_DATA": {
|
|
140
|
+
let columnIndex = -1;
|
|
141
|
+
if (!analyzeObject.column_name && analyzeObject.column_index === undefined) {
|
|
142
|
+
result.error = "Missing parameters, expected: column_name or column_index";
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
if (analyzeObject.column_index !== undefined) {
|
|
146
|
+
columnIndex = analyzeObject.column_index;
|
|
147
|
+
}
|
|
148
|
+
else if (analyzeObject.column_name) {
|
|
149
|
+
columnIndex = _searchStringArrayInCellsArray([analyzeObject.column_name], this.tableData.columnHeaders);
|
|
150
|
+
}
|
|
151
|
+
if (columnIndex === -1) {
|
|
152
|
+
result.error = "Column not found";
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
for (let i = this.tableData.headerRowsCount; i < this.tableData.rows.length; i++) {
|
|
156
|
+
if (this.tableData.rows[i].children[columnIndex]) {
|
|
157
|
+
result.cells.push(this.tableData.rows[i].children[columnIndex].text);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
result.status = true;
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
case "VALIDATE_COLUMN_DATA": {
|
|
164
|
+
analyzeObject.type = "GET_COLUMN_DATA"; // reuse the logic of GET_COLUMN_DATA
|
|
165
|
+
const columnDataResult = this.analyze(analyzeObject);
|
|
166
|
+
if (!columnDataResult.status) {
|
|
167
|
+
return columnDataResult; // return the error if column data is not found
|
|
168
|
+
}
|
|
169
|
+
if (analyzeObject.validation === "ascending") {
|
|
170
|
+
for (let i = 0; i < columnDataResult.cells.length - 1; i++) {
|
|
171
|
+
if (columnDataResult.cells[i] > columnDataResult.cells[i + 1]) {
|
|
172
|
+
result.status = false;
|
|
173
|
+
result.error = `rows ${i} and ${i + 1} are not in ascending order: ${columnDataResult.cells[i]} >= ${columnDataResult.cells[i + 1]}`;
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
result.status = true;
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
else if (analyzeObject.validation === "descending") {
|
|
181
|
+
for (let i = 0; i < columnDataResult.cells.length - 1; i++) {
|
|
182
|
+
if (columnDataResult.cells[i] < columnDataResult.cells[i + 1]) {
|
|
183
|
+
result.status = false;
|
|
184
|
+
result.error = `rows ${i} and ${i + 1} are not in descending order: ${columnDataResult.cells[i]} <= ${columnDataResult.cells[i + 1]}`;
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
result.status = true;
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
else if (analyzeObject.validation === "check_filter") {
|
|
192
|
+
const filter = analyzeObject.filter_text;
|
|
193
|
+
if (!filter) {
|
|
194
|
+
result.error = "Missing filter parameter";
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
// if one of the cells does not contain the filter text, return false
|
|
198
|
+
for (let i = 0; i < columnDataResult.cells.length; i++) {
|
|
199
|
+
if (!columnDataResult.cells[i].includes(filter)) {
|
|
200
|
+
result.status = false;
|
|
201
|
+
result.error = `Cell ${i} does not contain the filter text: ${filter}`;
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
result.status = true;
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
result.error = "Unknown validation type: " + analyzeObject.validation;
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
default:
|
|
214
|
+
throw new Error("Unknown analyzeObject type: " + analyzeObject.type);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const _compareStringArrayWithCellsArray = (stringArray, cellsArray) => {
|
|
219
|
+
if (!stringArray || !cellsArray) {
|
|
220
|
+
return -1;
|
|
221
|
+
}
|
|
222
|
+
if (stringArray.length !== cellsArray.length) {
|
|
223
|
+
return -1;
|
|
224
|
+
}
|
|
225
|
+
let i = 0;
|
|
226
|
+
for (; i < stringArray.length; i++) {
|
|
227
|
+
if (stringArray[i] instanceof RegExp) {
|
|
228
|
+
// @ts-ignore
|
|
229
|
+
if (!stringArray[i].test(cellsArray[i].text)) {
|
|
230
|
+
return -1;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
if (stringArray[i] !== cellsArray[i].text) {
|
|
235
|
+
return -1;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return i - stringArray.length;
|
|
240
|
+
};
|
|
241
|
+
const _searchStringArrayInCellsArray = (stringArray, cellsArray) => {
|
|
242
|
+
if (!stringArray || !cellsArray) {
|
|
243
|
+
return -1;
|
|
244
|
+
}
|
|
245
|
+
if (stringArray.length > cellsArray.length) {
|
|
246
|
+
return -1;
|
|
247
|
+
}
|
|
248
|
+
// search using _compareStringArrayWithCellsArray
|
|
249
|
+
for (let i = 0; i < cellsArray.length - stringArray.length + 1; i++) {
|
|
250
|
+
const index = _compareStringArrayWithCellsArray(stringArray, cellsArray.slice(i, i + stringArray.length));
|
|
251
|
+
if (index !== -1) {
|
|
252
|
+
return index + i;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return -1;
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=table.js.map
|
package/lib/table.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAS5C,MAAM,OAAO,KAAK;IACR,SAAS,CAAM;IACvB,gBAAe,CAAC;IAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BA;IACA,KAAK,CAAC,eAAe,CAAC,IAAU,EAAE,YAA2B;QAC3D,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,qDAAqD;QACrD,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,aAAa;YACb,IAAI,CAAC,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrD,aAAa;gBACb,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAgB,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;IAoBA;IACA,qCAAqC;IACrC,OAAO,CAAC,aAAkB;QACxB,IAAI,MAAM,GAAkB;YAC1B,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,CAAC,CAAC;YACb,QAAQ,EAAE,CAAC,CAAC;SACb,CAAC;QACF,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,iBAAiB;gBACpB,MAAM,CAAC,SAAS,GAAG,8BAA8B,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACrG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;gBACxC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;oBAC5C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBACtC,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,KAAK,UAAU;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,MAAM,KAAK,GAAG,8BAA8B,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACnG,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;wBACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;wBACpB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;wBACzB,OAAO,MAAM,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,YAAY;gBACZ,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB;gBACE,+BAA+B;gBAC/B,CAAC,aAAa,CAAC,gBAAgB;oBAC/B,CAAC,aAAa,CAAC,cAAc,EAC7B,CAAC;oBACD,MAAM,CAAC,KAAK,GAAG,gEAAgE,CAAC;oBAChF,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,sDAAsD;gBACtD,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,IACE,8BAA8B,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACxG,CAAC;wBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,GAAG,2CAA2C,CAAC;oBAC3D,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,4DAA4D;gBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,8BAA8B,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC/F,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;wBACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACvC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;wBACpB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;wBACzB,OAAO,MAAM,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC3E,MAAM,CAAC,KAAK,GAAG,2DAA2D,CAAC;oBAC3E,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,IAAI,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC7C,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC;gBAC3C,CAAC;qBAAM,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;oBACrC,WAAW,GAAG,8BAA8B,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAC1G,CAAC;gBACD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC;oBAClC,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBACjD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC;oBACvE,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,qCAAqC;gBAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC7B,OAAO,gBAAgB,CAAC,CAAC,+CAA+C;gBAC1E,CAAC;gBACD,IAAI,aAAa,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;oBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3D,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;4BAC9D,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;4BACtB,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,gCAAgC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;4BACrI,OAAO,MAAM,CAAC;wBAChB,CAAC;oBACH,CAAC;oBACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;qBAAM,IAAI,aAAa,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;oBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3D,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;4BAC9D,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;4BACtB,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,iCAAiC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;4BACtI,OAAO,MAAM,CAAC;wBAChB,CAAC;oBACH,CAAC;oBACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;qBAAM,IAAI,aAAa,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;oBACvD,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;oBACzC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,CAAC,KAAK,GAAG,0BAA0B,CAAC;wBAC1C,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,qEAAqE;oBACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BAChD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;4BACtB,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,sCAAsC,MAAM,EAAE,CAAC;4BACvE,OAAO,MAAM,CAAC;wBAChB,CAAC;oBACH,CAAC;oBACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,GAAG,2BAA2B,GAAG,aAAa,CAAC,UAAU,CAAC;oBACtE,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AACD,MAAM,iCAAiC,GAAG,CAAC,WAAgC,EAAE,UAAiB,EAAE,EAAE;IAChG,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,WAAW,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC;YACrC,aAAa;YACb,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1C,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;AAChC,CAAC,CAAC;AACF,MAAM,8BAA8B,GAAG,CAAC,WAAgC,EAAE,UAAiB,EAAE,EAAE;IAC7F,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,iDAAiD;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,iCAAiC,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1G,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC"}
|
package/lib/table_analyze.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_analyze.js","sourceRoot":"","sources":["../../src/table_analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,uDAAuD;AACvD,qDAAqD;AACrD,6HAA6H;AAC7H,SAAS,eAAe,CAAC,GAAY,EAAE,WAAW,GAAG,CAAC;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"table_analyze.js","sourceRoot":"","sources":["../../src/table_analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,uDAAuD;AACvD,qDAAqD;AACrD,6HAA6H;AAC7H,SAAS,eAAe,CAAC,GAAY,EAAE,WAAW,GAAG,CAAC;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC;IAChB,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,CAAC;QACd,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,iDAAiD;YACjD,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM;oBACJ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;wBACtB,MAAM;wBACN,IAAI;wBACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;wBACnB,IAAI;wBACJ,aAAa;wBACb,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC7C,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC5C,MAAM,aAAa,GAAG,KAAK,EAAE,IAAU,EAAE,OAAsB,EAAE,aAAkB,EAAE,OAAY,EAAE,EAAE,EAAE;IACrG,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,oBAAoB,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,wBAAwB,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACjH,qDAAqD;IACrD,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,aAAa;QACb,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,aAAa;YACb,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YACrD,aAAa;YACb,OAAO,QAAQ,CAAC,iBAAiB,CAAC,KAAgB,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,aAAa;QACb,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,KAAK,EAAE,IAAU,EAAE,OAAsB,EAAE,EAAE;IAChE,IAAI,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,qDAAqD;IACrD,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,aAAa;QACb,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,aAAa;YACb,OAAO,QAAQ,CAAC,YAAY,CAAC,KAAgB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function findHighestWithSameInnerText(cssSelector: string, scope: any, web: any): Promise<{
|
|
2
|
+
element: any;
|
|
3
|
+
cssSelector: string;
|
|
4
|
+
climb: number;
|
|
5
|
+
innerText: any;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function findCellRectangle(headerResult: any, rowResult: any, web: any, info: any): Promise<{
|
|
8
|
+
x: any;
|
|
9
|
+
y: any;
|
|
10
|
+
width: any;
|
|
11
|
+
height: any;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function _findCellArea(headerText: string, rowText: string, web: any, state: any): Promise<{
|
|
14
|
+
x: any;
|
|
15
|
+
y: any;
|
|
16
|
+
width: any;
|
|
17
|
+
height: any;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function findElementsInArea(cssSelector: string, area: any, web: any, options: any): Promise<any[]>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export async function findHighestWithSameInnerText(cssSelector, scope, web) {
|
|
2
|
+
await web._highlightElements(scope, cssSelector);
|
|
3
|
+
const element = await scope.locator(cssSelector).first();
|
|
4
|
+
if (!element) {
|
|
5
|
+
throw new Error("header element not found");
|
|
6
|
+
}
|
|
7
|
+
const innerText = await element.innerText();
|
|
8
|
+
// climb to the parent element until the innerText is changing, get the top element with the same innerText
|
|
9
|
+
let climb = 0;
|
|
10
|
+
let topElement = element;
|
|
11
|
+
let elementCss = cssSelector;
|
|
12
|
+
while (true) {
|
|
13
|
+
climb++;
|
|
14
|
+
// create a climb xpath: 1: .. 2: ../.. etc.
|
|
15
|
+
const climbXpath = "xpath=" + "../".repeat(climb).slice(0, -1);
|
|
16
|
+
const climbCss = elementCss + " >> " + climbXpath;
|
|
17
|
+
const climbElement = await scope.locator(climbCss).first();
|
|
18
|
+
if (!climbElement) {
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const climbInnerText = await climbElement.innerText();
|
|
22
|
+
if (climbInnerText !== innerText) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
topElement = climbElement;
|
|
26
|
+
elementCss = climbCss;
|
|
27
|
+
}
|
|
28
|
+
return { element: topElement, cssSelector: elementCss, climb: climb, innerText: innerText };
|
|
29
|
+
}
|
|
30
|
+
export async function findCellRectangle(headerResult, rowResult, web, info) {
|
|
31
|
+
await web.scrollIfNeeded(rowResult.element, info);
|
|
32
|
+
// find the header cell and the row cell location
|
|
33
|
+
const headerRect = await headerResult.element.boundingBox();
|
|
34
|
+
const rowRect = await rowResult.element.boundingBox();
|
|
35
|
+
if (!headerRect || !rowRect) {
|
|
36
|
+
throw new Error("element not found");
|
|
37
|
+
}
|
|
38
|
+
// found there rectengle of cell that is in the header horizontal and the row vertical
|
|
39
|
+
return {
|
|
40
|
+
x: headerRect.x,
|
|
41
|
+
y: rowRect.y,
|
|
42
|
+
width: headerRect.width,
|
|
43
|
+
height: rowRect.height,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export async function _findCellArea(headerText, rowText, web, state) {
|
|
47
|
+
const headerFoundElements = await web.findTextInAllFrames({}, {}, headerText, state);
|
|
48
|
+
if (headerFoundElements.length === 0) {
|
|
49
|
+
throw new Error("header not found");
|
|
50
|
+
}
|
|
51
|
+
if (headerFoundElements.length > 1) {
|
|
52
|
+
throw new Error("multiple headers found");
|
|
53
|
+
}
|
|
54
|
+
const rowFoundElements = await web.findTextInAllFrames({}, {}, rowText, state);
|
|
55
|
+
if (rowFoundElements.length === 0) {
|
|
56
|
+
throw new Error("row not found");
|
|
57
|
+
}
|
|
58
|
+
if (rowFoundElements.length > 1) {
|
|
59
|
+
throw new Error("multiple rows found");
|
|
60
|
+
}
|
|
61
|
+
const headerScope = headerFoundElements[0].frame;
|
|
62
|
+
const headerResult = await findHighestWithSameInnerText(`[data-blinq-id-${headerFoundElements[0].randomToken}]`, headerScope, web);
|
|
63
|
+
const rowScope = rowFoundElements[0].frame;
|
|
64
|
+
const rowResult = await findHighestWithSameInnerText(`[data-blinq-id-${rowFoundElements[0].randomToken}]`, rowScope, web);
|
|
65
|
+
return await findCellRectangle(headerResult, rowResult, web, state.info);
|
|
66
|
+
}
|
|
67
|
+
export async function findElementsInArea(cssSelector, area, web, options) {
|
|
68
|
+
let results = null;
|
|
69
|
+
try {
|
|
70
|
+
results = await _findElementsInArea(cssSelector, area, web, options);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
// ignore
|
|
74
|
+
}
|
|
75
|
+
if (!results || results.length === 0) {
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
77
|
+
results = await _findElementsInArea(cssSelector, area, web, options);
|
|
78
|
+
}
|
|
79
|
+
return results;
|
|
80
|
+
}
|
|
81
|
+
async function _findElementsInArea(cssSelector, area, web, options) {
|
|
82
|
+
if (!cssSelector) {
|
|
83
|
+
cssSelector = "*";
|
|
84
|
+
}
|
|
85
|
+
const frames = await web.page.frames();
|
|
86
|
+
const elements = [];
|
|
87
|
+
for (const scope of frames) {
|
|
88
|
+
const count = await scope.locator(cssSelector).count();
|
|
89
|
+
for (let i = 0; i < count; i++) {
|
|
90
|
+
const element = await scope.locator(cssSelector).nth(i);
|
|
91
|
+
elements.push(element);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const foundElements = [];
|
|
95
|
+
let hTollarance = 10;
|
|
96
|
+
let vTollarance = 10;
|
|
97
|
+
if (options && options.hTollarance && options.vTollarance) {
|
|
98
|
+
hTollarance = options.hTollarance;
|
|
99
|
+
vTollarance = options.vTollarance;
|
|
100
|
+
}
|
|
101
|
+
for (const element of elements) {
|
|
102
|
+
const rect = await element.boundingBox();
|
|
103
|
+
if (!rect) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (rect.x >= area.x - hTollarance &&
|
|
107
|
+
rect.x + rect.width <= area.x + area.width + hTollarance &&
|
|
108
|
+
rect.y >= area.y - vTollarance &&
|
|
109
|
+
rect.y + rect.height <= area.y + area.height + vTollarance) {
|
|
110
|
+
foundElements.push(element);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (foundElements.length === 0) {
|
|
114
|
+
// find elements that intersect with the area
|
|
115
|
+
for (const element of elements) {
|
|
116
|
+
const rect = await element.boundingBox();
|
|
117
|
+
if (!rect) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (rect.x + rect.width >= area.x &&
|
|
121
|
+
rect.x <= area.x + area.width &&
|
|
122
|
+
rect.y + rect.height >= area.y &&
|
|
123
|
+
rect.y <= area.y + area.height) {
|
|
124
|
+
foundElements.push(element);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return foundElements;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=table_helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table_helper.js","sourceRoot":"","sources":["../../src/table_helper.ts"],"names":[],"mappings":"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"}
|
package/lib/test_context.d.ts
CHANGED
|
@@ -2,17 +2,23 @@ import { BrowserContext, Page, Browser as PlaywrightBrowser } from "playwright";
|
|
|
2
2
|
import { Environment } from "./environment.js";
|
|
3
3
|
import { StableBrowser } from "./stable_browser.js";
|
|
4
4
|
import { Api } from "./api.js";
|
|
5
|
+
import { InitScripts } from "./generation_scripts.js";
|
|
5
6
|
declare class TestContext {
|
|
6
7
|
stable: StableBrowser | null;
|
|
8
|
+
web: StableBrowser | null;
|
|
7
9
|
browser: PlaywrightBrowser | null;
|
|
8
10
|
playContext: BrowserContext | null;
|
|
9
11
|
page: Page | null;
|
|
10
12
|
environment: Environment | null;
|
|
11
13
|
reportFolder: string | null;
|
|
14
|
+
snapshotFolder: string | null;
|
|
15
|
+
fixturesFolder: string | null;
|
|
12
16
|
api: Api | null;
|
|
13
17
|
navigate: boolean;
|
|
14
18
|
headless: boolean;
|
|
15
19
|
browserName: string | null;
|
|
20
|
+
browserObject: any;
|
|
21
|
+
initScripts: InitScripts | null;
|
|
16
22
|
constructor();
|
|
17
23
|
}
|
|
18
24
|
export { TestContext };
|
package/lib/test_context.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
class TestContext {
|
|
2
2
|
stable = null;
|
|
3
|
+
web = null;
|
|
3
4
|
browser = null;
|
|
4
5
|
playContext = null;
|
|
5
6
|
page = null;
|
|
6
7
|
environment = null;
|
|
7
8
|
reportFolder = null;
|
|
9
|
+
snapshotFolder = null;
|
|
10
|
+
fixturesFolder = null;
|
|
8
11
|
api = null;
|
|
9
12
|
navigate = false;
|
|
10
13
|
headless = false;
|
|
11
14
|
browserName = null;
|
|
15
|
+
browserObject = null;
|
|
16
|
+
initScripts = null;
|
|
12
17
|
constructor() { }
|
|
13
18
|
}
|
|
14
19
|
export { TestContext };
|
package/lib/test_context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_context.js","sourceRoot":"","sources":["../../src/test_context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test_context.js","sourceRoot":"","sources":["../../src/test_context.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW;IACf,MAAM,GAAyB,IAAI,CAAC;IACpC,GAAG,GAAyB,IAAI,CAAC;IACjC,OAAO,GAA6B,IAAI,CAAC;IACzC,WAAW,GAA0B,IAAI,CAAC;IAC1C,IAAI,GAAgB,IAAI,CAAC;IACzB,WAAW,GAAuB,IAAI,CAAC;IACvC,YAAY,GAAkB,IAAI,CAAC;IACnC,cAAc,GAAkB,IAAI,CAAC;IACrC,cAAc,GAAkB,IAAI,CAAC;IACrC,GAAG,GAAe,IAAI,CAAC;IACvB,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,GAAkB,IAAI,CAAC;IAClC,aAAa,GAAQ,IAAI,CAAC;IAC1B,WAAW,GAAuB,IAAI,CAAC;IACvC,gBAAe,CAAC;CACjB;AACD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
|
+
declare const measureAsync: (name: string, fn: () => Promise<any>) => Promise<any>;
|
|
1
2
|
declare function encrypt(text: string, key?: string | null): string;
|
|
2
|
-
declare function
|
|
3
|
-
declare function
|
|
3
|
+
declare function getTestDataValue(key: string, environment?: string): any;
|
|
4
|
+
declare function decrypt(encryptedText: string, key?: string | null, totpWait?: boolean): string;
|
|
5
|
+
export declare function testForRegex(text: string): boolean;
|
|
6
|
+
declare function _convertToRegexQuery(text: string, isRegex: boolean, fullMatch: boolean, ignoreCase: boolean): string;
|
|
7
|
+
declare function _getDataFile(world?: any, context?: any, web?: any): string;
|
|
8
|
+
declare function _getTestData(world?: null, context?: null, web?: null): any;
|
|
9
|
+
declare function getObjectDataPathFromKey(key: string): string[];
|
|
10
|
+
declare function replaceWithLocalTestData(value: string, world: any, _decrypt?: boolean, totpWait?: boolean, context?: any, web?: any, throwError?: boolean): Promise<string>;
|
|
11
|
+
interface TestDataArray {
|
|
12
|
+
[key: string]: {
|
|
13
|
+
DataType: string;
|
|
14
|
+
key: string;
|
|
15
|
+
value: string;
|
|
16
|
+
}[];
|
|
17
|
+
}
|
|
18
|
+
interface TestDataValue {
|
|
19
|
+
[key: string]: string;
|
|
20
|
+
}
|
|
21
|
+
type TestData = TestDataArray | TestDataValue;
|
|
22
|
+
declare function replaceTestDataValue(env: string, key: string, testData: TestData, decryptValue?: boolean): string | null;
|
|
23
|
+
declare function evaluateString(template: string, parameters: any): any;
|
|
24
|
+
declare function formatDate(dateStr: string, format: string | null): string;
|
|
4
25
|
declare function maskValue(value: string): string;
|
|
5
|
-
|
|
26
|
+
declare function _copyContext(from: any, to: any): void;
|
|
27
|
+
declare function scrollPageToLoadLazyElements(page: any): Promise<void>;
|
|
28
|
+
type Params = Record<string, string>;
|
|
29
|
+
declare function _fixUsingParams(text: string, _params: Params): string;
|
|
30
|
+
declare function getWebLogFile(logFolder: string): string;
|
|
31
|
+
declare function _fixLocatorUsingParams(locator: any, _params: Params): any;
|
|
32
|
+
declare function _isObject(value: any): any;
|
|
33
|
+
declare function scanAndManipulate(currentObj: any, _params: Params): void;
|
|
34
|
+
declare function extractStepExampleParameters(step: any): any;
|
|
35
|
+
export declare function performAction(action: string, element: any, options: any, web: any, state: any, _params: Params): Promise<void>;
|
|
36
|
+
declare const KEYBOARD_EVENTS: string[];
|
|
37
|
+
declare function unEscapeString(str: string): string;
|
|
38
|
+
declare function _getServerUrl(): string;
|
|
39
|
+
declare function tryParseJson(input: any): any;
|
|
40
|
+
export { measureAsync, encrypt, decrypt, getObjectDataPathFromKey, replaceWithLocalTestData, formatDate, evaluateString, maskValue, _copyContext, scrollPageToLoadLazyElements, _fixUsingParams, getWebLogFile, _fixLocatorUsingParams, _isObject, scanAndManipulate, KEYBOARD_EVENTS, unEscapeString, Params, _getServerUrl, _convertToRegexQuery, extractStepExampleParameters, _getDataFile, tryParseJson, getTestDataValue, replaceTestDataValue, _getTestData, };
|