automation_model 1.0.64 → 1.0.66
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/lib/auto_page.js.map +1 -0
- package/lib/browser_manager.js.map +1 -0
- package/lib/environment.js.map +1 -0
- package/lib/index.js.map +1 -0
- package/lib/init_browser.js.map +1 -0
- package/lib/locator.js.map +1 -0
- package/lib/stable_browser.js.map +1 -0
- package/{build → lib}/table_analyze.d.ts +1 -1
- package/{build → lib}/table_analyze.js +7 -0
- package/lib/table_analyze.js.map +1 -0
- package/lib/test_context.js.map +1 -0
- package/package.json +3 -2
- package/.github/workflows/npm-publish.yml +0 -38
- package/.vscode/launch.json +0 -30
- package/README.md +0 -3
- package/ai_config.json +0 -53
- package/build/auto_page.js.map +0 -1
- package/build/browser_manager.js.map +0 -1
- package/build/environment.js.map +0 -1
- package/build/index.js.map +0 -1
- package/build/init_browser.js.map +0 -1
- package/build/locator.js.map +0 -1
- package/build/stable_browser.js.map +0 -1
- package/build/table_analyze.js.map +0 -1
- package/build/test_context.js.map +0 -1
- package/env.json +0 -3
- package/src/auto_page.ts +0 -58
- package/src/browser_manager.ts +0 -87
- package/src/environment.ts +0 -24
- package/src/index.ts +0 -6
- package/src/init_browser.ts +0 -65
- package/src/locator.ts +0 -173
- package/src/stable_browser.ts +0 -523
- package/src/table_analyze.ts +0 -69
- package/src/test_context.ts +0 -16
- package/tests/create_new_repository.test.js +0 -62
- package/tests/debug.test.js +0 -41
- package/tests/gmail_login.test.js +0 -39
- package/tests/launch_page.test.js +0 -32
- package/tests/navigate_to_new_repository_page.test.js +0 -45
- package/tsconfig.json +0 -110
- /package/{build → lib}/auto_page.d.ts +0 -0
- /package/{build → lib}/auto_page.js +0 -0
- /package/{build → lib}/browser_manager.d.ts +0 -0
- /package/{build → lib}/browser_manager.js +0 -0
- /package/{build → lib}/environment.d.ts +0 -0
- /package/{build → lib}/environment.js +0 -0
- /package/{build → lib}/index.d.ts +0 -0
- /package/{build → lib}/index.js +0 -0
- /package/{build → lib}/init_browser.d.ts +0 -0
- /package/{build → lib}/init_browser.js +0 -0
- /package/{build → lib}/locator.d.ts +0 -0
- /package/{build → lib}/locator.js +0 -0
- /package/{build → lib}/stable_browser.d.ts +0 -0
- /package/{build → lib}/stable_browser.js +0 -0
- /package/{build → lib}/test_context.d.ts +0 -0
- /package/{build → lib}/test_context.js +0 -0
package/src/init_browser.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import { Environment } from "./environment.js";
|
|
3
|
-
import { browserManager } from "./browser_manager.js";
|
|
4
|
-
import { TestContext } from "./test_context.js";
|
|
5
|
-
import { StableBrowser } from "./stable_browser.js";
|
|
6
|
-
import { Browser as PlaywrightBrowser } from "playwright";
|
|
7
|
-
import { Browser } from "./browser_manager.js";
|
|
8
|
-
|
|
9
|
-
// let environment = null;
|
|
10
|
-
|
|
11
|
-
// init browser create context and page, if context and page are not null
|
|
12
|
-
const getContext = async function (environment: Environment|null, headless = false, logger?: null) {
|
|
13
|
-
if (environment === null) {
|
|
14
|
-
environment = initEnvironment();
|
|
15
|
-
}
|
|
16
|
-
const {cookies, origins} = environment;
|
|
17
|
-
const storageState = {cookies, origins};
|
|
18
|
-
let browser = await browserManager.getBrowser(headless, storageState);
|
|
19
|
-
let context = new TestContext();
|
|
20
|
-
context.browser = browser.browser;
|
|
21
|
-
context.playContext = browser.context;
|
|
22
|
-
context.page = browser.page;
|
|
23
|
-
context.environment = environment;
|
|
24
|
-
|
|
25
|
-
context.stable = new StableBrowser(context.browser!, context.page!, logger);
|
|
26
|
-
// await _initCookies(context);
|
|
27
|
-
return context;
|
|
28
|
-
};
|
|
29
|
-
// const _initCookies = async function (context) {
|
|
30
|
-
// if (context.environment.cookies) {
|
|
31
|
-
// const cookies = [];
|
|
32
|
-
// for (let i = 0; i < context.environment.cookies.length; i++) {
|
|
33
|
-
// const cookie = context.environment.cookies[i];
|
|
34
|
-
// if (cookie.expires && cookie.expires == "undefined") {
|
|
35
|
-
// delete cookie.expires;
|
|
36
|
-
// }
|
|
37
|
-
// cookies.push(cookie);
|
|
38
|
-
// }
|
|
39
|
-
// await context.playContext.addCookies(cookies);
|
|
40
|
-
// }
|
|
41
|
-
// };
|
|
42
|
-
|
|
43
|
-
const closeBrowser = async function (browser? :Browser|PlaywrightBrowser) {
|
|
44
|
-
await browserManager.closeBrowser(browser);
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const initEnvironment = function () {
|
|
48
|
-
// if (environment === null) {
|
|
49
|
-
const environment = new Environment();
|
|
50
|
-
try {
|
|
51
|
-
const data = fs.readFileSync("env.json", "utf8");
|
|
52
|
-
//console.log("data", data);
|
|
53
|
-
const envObject = JSON.parse(data);
|
|
54
|
-
//console.log("envObject", envObject);
|
|
55
|
-
Object.assign(environment, envObject);
|
|
56
|
-
//console.log("env", environment);
|
|
57
|
-
console.log("Base url: " + environment.baseUrl);
|
|
58
|
-
} catch (err) {
|
|
59
|
-
console.error("Error reading env.json", err);
|
|
60
|
-
}
|
|
61
|
-
// }
|
|
62
|
-
return environment;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export { getContext, closeBrowser };
|
package/src/locator.ts
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
type Change = {css:string, changes:{role:string}};
|
|
2
|
-
declare const document: Document & { selectors: Change[]|null ; tableSelector: string|null; processTableQuery: TprocessTableQuery };
|
|
3
|
-
const selectors = null;
|
|
4
|
-
document.selectors = selectors;
|
|
5
|
-
const tableSelector = null;
|
|
6
|
-
document.tableSelector = tableSelector;
|
|
7
|
-
|
|
8
|
-
// locator | operator | value
|
|
9
|
-
// table.rows | >= | 1
|
|
10
|
-
// table[1]["Availability"].text | equals | 100%
|
|
11
|
-
// table[*][2].text |not_equals| error
|
|
12
|
-
|
|
13
|
-
function processTableQuery(table:Element, query:string) {
|
|
14
|
-
|
|
15
|
-
if (document.selectors && document.selectors.length > 0) {
|
|
16
|
-
for (let i = 0; i < document.selectors.length; i++) {
|
|
17
|
-
const selector = document.selectors[i];
|
|
18
|
-
const allElementsList = document.querySelectorAll(selector.css);
|
|
19
|
-
const allElements = Array.from(allElementsList);
|
|
20
|
-
for (let j = 0; j < allElements.length; j++) {
|
|
21
|
-
const element = allElements[j];
|
|
22
|
-
element.setAttribute("data-blinq-role", selector.changes.role);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const rows = Array.from(table.querySelectorAll("tr, [data-blinq-role='row'], [role='row']"));
|
|
28
|
-
const _rows = rows.length;
|
|
29
|
-
const _columnNames = [];
|
|
30
|
-
let _columns:number = 0;
|
|
31
|
-
let columnheader:HTMLElement[] = [];
|
|
32
|
-
if (rows.length > 0) {
|
|
33
|
-
//const rowheader = rows[0];
|
|
34
|
-
columnheader = Array.from(table.querySelectorAll("th, [data-blinq-role='columnheader'], [role='columnheader']"));
|
|
35
|
-
console.log("columnheader length", columnheader.length);
|
|
36
|
-
_columns = columnheader.length;
|
|
37
|
-
for (let i = 0; i < columnheader.length; i++) {
|
|
38
|
-
const cell = columnheader[i];
|
|
39
|
-
const cellText = cell.innerText;
|
|
40
|
-
_columnNames.push(cellText);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
let _rowStartIndex = 0;
|
|
44
|
-
// if (columnheader.length > 0) {
|
|
45
|
-
// tableData.rowStartIndex = 1;
|
|
46
|
-
// }
|
|
47
|
-
const tableData = {
|
|
48
|
-
rows: _rows,
|
|
49
|
-
columns: _columns,
|
|
50
|
-
columnNames: _columnNames,
|
|
51
|
-
rowStartIndex: _rowStartIndex,
|
|
52
|
-
};
|
|
53
|
-
if (query.startsWith("table.")) {
|
|
54
|
-
const result = [];
|
|
55
|
-
const property = query.substring(6);
|
|
56
|
-
//console.log("property", property);
|
|
57
|
-
// @ts-ignore
|
|
58
|
-
const value = tableData[property];
|
|
59
|
-
//console.log("value", value);
|
|
60
|
-
result.push(value);
|
|
61
|
-
return { cells: result };
|
|
62
|
-
}
|
|
63
|
-
const pattern = /^table\[(.+)\]\[(.+)\]\.(.+)$/;
|
|
64
|
-
const match = query.match(pattern);
|
|
65
|
-
if (!match) {
|
|
66
|
-
return { error: "Invalid quary" };
|
|
67
|
-
}
|
|
68
|
-
const rowSelector = match[1];
|
|
69
|
-
let columnSelector = match[2];
|
|
70
|
-
const property = match[3];
|
|
71
|
-
let selectedRows = [];
|
|
72
|
-
if (rowSelector === "*") {
|
|
73
|
-
selectedRows = rows;
|
|
74
|
-
} else {
|
|
75
|
-
// @ts-ignore
|
|
76
|
-
if (isNaN(rowSelector)) {
|
|
77
|
-
return { error: "Invalid row selector" };
|
|
78
|
-
}
|
|
79
|
-
const rowIndex = parseInt(rowSelector);
|
|
80
|
-
if (rowIndex < 0 || rowIndex >= rows.length) {
|
|
81
|
-
return { error: "Invalid row selector" };
|
|
82
|
-
}
|
|
83
|
-
selectedRows.push(rows[rowIndex]);
|
|
84
|
-
}
|
|
85
|
-
console.log("selectedRows count", selectedRows.length);
|
|
86
|
-
const selectedCells:HTMLElement[] = [];
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
if (isNaN(columnSelector)) {
|
|
89
|
-
if (columnSelector.startsWith('"') && columnSelector.endsWith('"')) {
|
|
90
|
-
columnSelector = columnSelector.substring(1, columnSelector.length - 1);
|
|
91
|
-
} else if (columnSelector.startsWith("'") && columnSelector.endsWith("'")) {
|
|
92
|
-
columnSelector = columnSelector.substring(1, columnSelector.length - 1);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (columnheader.length === 0) {
|
|
96
|
-
return { error: "No column header available" };
|
|
97
|
-
}
|
|
98
|
-
let foundHeader = null;
|
|
99
|
-
for (let i = 0; i < columnheader.length; i++) {
|
|
100
|
-
const cell = columnheader[i];
|
|
101
|
-
const cellText = cell.innerText;
|
|
102
|
-
console.log("cellText", cellText);
|
|
103
|
-
if (cellText === columnSelector) {
|
|
104
|
-
foundHeader = cell;
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (!foundHeader) {
|
|
109
|
-
return { error: "No column header found" };
|
|
110
|
-
}
|
|
111
|
-
const foundHeaderRec = foundHeader.getBoundingClientRect();
|
|
112
|
-
for (let i = 0; i < selectedRows.length; i++) {
|
|
113
|
-
const row = selectedRows[i];
|
|
114
|
-
const cells:HTMLElement[] = Array.from(row.querySelectorAll("td, [data-blinq-role='cell'], [role='cell']"));
|
|
115
|
-
console.log("cells count", cells.length);
|
|
116
|
-
for (let j = 0; j < cells.length; j++) {
|
|
117
|
-
const cell = cells[j];
|
|
118
|
-
const rec = cell.getBoundingClientRect();
|
|
119
|
-
const xCenter = rec.left + rec.width / 2;
|
|
120
|
-
if (foundHeaderRec.left <= xCenter && xCenter <= foundHeaderRec.right) {
|
|
121
|
-
selectedCells.push(cell);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
} else {
|
|
126
|
-
const columnIndex = parseInt(columnSelector);
|
|
127
|
-
if (columnIndex < 0 || columnIndex >= columnheader.length) {
|
|
128
|
-
return { error: "Column index out of bounds" };
|
|
129
|
-
}
|
|
130
|
-
for (let i = 0; i < selectedRows.length; i++) {
|
|
131
|
-
const row = selectedRows[i];
|
|
132
|
-
const cells:HTMLElement[] = Array.from(row.querySelectorAll("td, [data-blinq-role='cell'], [role='cell']"));
|
|
133
|
-
selectedCells.push(cells[columnIndex]);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
let rect:DOMRect|null = null;
|
|
137
|
-
const result = [];
|
|
138
|
-
for (let i = 0; i < selectedCells.length; i++) {
|
|
139
|
-
let added = false;
|
|
140
|
-
if (property === "element") {
|
|
141
|
-
added = true;
|
|
142
|
-
result.push(selectedCells[i]);
|
|
143
|
-
} else {
|
|
144
|
-
if (property === "text" || property === "innerText") {
|
|
145
|
-
added = true;
|
|
146
|
-
result.push(selectedCells[i].innerText);
|
|
147
|
-
} else {
|
|
148
|
-
if (selectedCells[i].hasAttribute(property)) {
|
|
149
|
-
added = true;
|
|
150
|
-
result.push(selectedCells[i].getAttribute(property));
|
|
151
|
-
} else {
|
|
152
|
-
added = true;
|
|
153
|
-
// @ts-ignore
|
|
154
|
-
result.push(selectedCells[i][property]);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (added) {
|
|
158
|
-
rect = rect ? merge(rect, selectedCells[i].getBoundingClientRect()) : selectedCells[i].getBoundingClientRect();
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return { cells: result, rect };
|
|
163
|
-
}
|
|
164
|
-
const merge = (rec1:DOMRect, rec2:DOMRect) => {
|
|
165
|
-
const x = Math.min(rec1.left, rec2.left);
|
|
166
|
-
const y = Math.min(rec1.top, rec2.top);
|
|
167
|
-
const width = Math.max(rec1.right, rec2.right) - x;
|
|
168
|
-
const height = Math.max(rec1.bottom, rec2.bottom) - y;
|
|
169
|
-
return { x, y, width, height } as DOMRect;
|
|
170
|
-
};
|
|
171
|
-
document.processTableQuery = processTableQuery;
|
|
172
|
-
type TprocessTableQuery = typeof processTableQuery;
|
|
173
|
-
export type {TprocessTableQuery}
|