automation_model 1.0.69 → 1.0.70
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.d.ts +5 -0
- package/lib/auto_page.js +56 -0
- package/lib/auto_page.js.map +1 -0
- package/lib/browser_manager.d.ts +28 -0
- package/lib/browser_manager.js +72 -0
- package/lib/browser_manager.js.map +1 -0
- package/lib/environment.d.ts +23 -0
- package/lib/environment.js +12 -0
- package/lib/environment.js.map +1 -0
- package/{src/index.ts → lib/index.d.ts} +6 -6
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -0
- package/lib/init_browser.d.ts +7 -0
- package/lib/init_browser.js +59 -0
- package/lib/init_browser.js.map +1 -0
- package/lib/locator.d.ts +15 -0
- package/lib/locator.js +172 -0
- package/lib/locator.js.map +1 -0
- package/lib/stable_browser.d.ts +26 -0
- package/lib/stable_browser.js +526 -0
- package/lib/stable_browser.js.map +1 -0
- package/lib/table_analyze.d.ts +3 -0
- package/lib/table_analyze.js +71 -0
- package/lib/table_analyze.js.map +1 -0
- package/lib/test_context.d.ts +13 -0
- package/lib/test_context.js +12 -0
- package/lib/test_context.js.map +1 -0
- package/package.json +1 -1
- 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/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/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
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TestContext } from "./test_context.js";
|
|
2
|
+
declare const navigate: (path?: string) => Promise<void>;
|
|
3
|
+
declare const initContext: (path: string, doNavigate?: boolean, headless?: boolean, world?: any) => Promise<TestContext>;
|
|
4
|
+
declare const closeContext: () => Promise<void>;
|
|
5
|
+
export { initContext, navigate, closeContext };
|
package/lib/auto_page.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { browserManager } from "./browser_manager.js";
|
|
2
|
+
import { getContext } from "./init_browser.js";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
let context = null;
|
|
6
|
+
const navigate = async (path = "") => {
|
|
7
|
+
let url = null;
|
|
8
|
+
if (path === null) {
|
|
9
|
+
url = context.environment.baseUrl;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
url = new URL(path, context.environment.baseUrl).href;
|
|
13
|
+
}
|
|
14
|
+
await context.stable.goto(url);
|
|
15
|
+
await context.stable.waitForPageLoad();
|
|
16
|
+
};
|
|
17
|
+
const _findEmptyFolder = (folder) => {
|
|
18
|
+
if (!folder) {
|
|
19
|
+
folder = "./runs";
|
|
20
|
+
}
|
|
21
|
+
if (!fs.existsSync(folder)) {
|
|
22
|
+
fs.mkdirSync(folder);
|
|
23
|
+
}
|
|
24
|
+
let nextIndex = 1;
|
|
25
|
+
while (fs.existsSync(path.join(folder, nextIndex.toString()))) {
|
|
26
|
+
nextIndex++;
|
|
27
|
+
}
|
|
28
|
+
return path.join(folder, nextIndex.toString());
|
|
29
|
+
};
|
|
30
|
+
const initContext = async (path, doNavigate = true, headless = false, world = null) => {
|
|
31
|
+
if (context) {
|
|
32
|
+
return context;
|
|
33
|
+
}
|
|
34
|
+
context = await getContext(null, headless);
|
|
35
|
+
if (world) {
|
|
36
|
+
world.screenshot = true;
|
|
37
|
+
const reportFolder = _findEmptyFolder();
|
|
38
|
+
if (world.attach) {
|
|
39
|
+
world.attach(reportFolder, { mediaType: "text/plain" });
|
|
40
|
+
}
|
|
41
|
+
world.screenshotPath = reportFolder;
|
|
42
|
+
context.reportFolder = reportFolder;
|
|
43
|
+
}
|
|
44
|
+
if (doNavigate) {
|
|
45
|
+
await navigate(path);
|
|
46
|
+
}
|
|
47
|
+
return context;
|
|
48
|
+
};
|
|
49
|
+
const closeContext = async () => {
|
|
50
|
+
if (context && context.browser) {
|
|
51
|
+
await browserManager.closeBrowser(context.browser);
|
|
52
|
+
}
|
|
53
|
+
context = null;
|
|
54
|
+
};
|
|
55
|
+
export { initContext, navigate, closeContext };
|
|
56
|
+
//# sourceMappingURL=auto_page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto_page.js","sourceRoot":"","sources":["../../src/auto_page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,IAAI,OAAO,GAAoB,IAAI,CAAC;AACpC,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;IACnC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,GAAG,GAAG,OAAQ,CAAC,WAAY,CAAC,OAAQ,CAAC;KACtC;SAAM;QACL,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAQ,CAAC,WAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;KACzD;IACD,MAAM,OAAQ,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,OAAQ,CAAC,MAAO,CAAC,eAAe,EAAE,CAAC;AAC3C,CAAC,CAAC;AACF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC1C,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,QAAQ,CAAC;KACnB;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC1B,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACtB;IACD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;QAC7D,SAAS,EAAE,CAAC;KACb;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,KAAK,EAAE,IAAW,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAY,IAAI,EAAE,EAAE;IAC/F,IAAI,OAAO,EAAE;QACX,OAAO,OAAO,CAAC;KAChB;IACD,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3C,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;SACzD;QACD,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC;QACpC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;KACrC;IAED,IAAI,UAAU,EAAE;QACd,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;KACtB;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;IAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;QAC9B,MAAM,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpD;IACD,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC,CAAC;AACF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Browser as PlaywrightBrowser, BrowserContext, Page } from "playwright";
|
|
2
|
+
import type { Cookie, LocalStorage } from "./environment.js";
|
|
3
|
+
type StorageState = {
|
|
4
|
+
cookies: Cookie[];
|
|
5
|
+
origins: {
|
|
6
|
+
origin: string;
|
|
7
|
+
localStorage: LocalStorage;
|
|
8
|
+
}[];
|
|
9
|
+
};
|
|
10
|
+
declare class BrowserManager {
|
|
11
|
+
browsers: Browser[];
|
|
12
|
+
constructor(browsers?: Browser[]);
|
|
13
|
+
closeAll(): Promise<void>;
|
|
14
|
+
closeBrowser(browser?: PlaywrightBrowser | Browser): Promise<void>;
|
|
15
|
+
createBrowser(headless?: boolean, storageState?: StorageState): Promise<Browser>;
|
|
16
|
+
getBrowser(headless?: boolean, storageState?: StorageState): Promise<Browser>;
|
|
17
|
+
}
|
|
18
|
+
declare class Browser {
|
|
19
|
+
browser: PlaywrightBrowser | null;
|
|
20
|
+
context: BrowserContext | null;
|
|
21
|
+
page: Page | null;
|
|
22
|
+
constructor();
|
|
23
|
+
init(headless?: boolean, storageState?: StorageState): Promise<void>;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
declare const browserManager: BrowserManager;
|
|
27
|
+
export { browserManager };
|
|
28
|
+
export type { BrowserManager, Browser };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { chromium } from "playwright";
|
|
2
|
+
class BrowserManager {
|
|
3
|
+
constructor(browsers = []) {
|
|
4
|
+
this.browsers = browsers;
|
|
5
|
+
}
|
|
6
|
+
async closeAll() {
|
|
7
|
+
await Promise.all(this.browsers.map((browser) => browser.close()));
|
|
8
|
+
this.browsers = [];
|
|
9
|
+
}
|
|
10
|
+
async closeBrowser(browser) {
|
|
11
|
+
if (!browser && this.browsers.length > 0) {
|
|
12
|
+
browser = this.browsers[0];
|
|
13
|
+
}
|
|
14
|
+
if (browser) {
|
|
15
|
+
await browser.close();
|
|
16
|
+
for (let i = 0; i < this.browsers.length; i++) {
|
|
17
|
+
if (this.browsers[i].browser === browser || this.browsers[i] === browser) {
|
|
18
|
+
this.browsers.splice(i, 1);
|
|
19
|
+
i--;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async createBrowser(headless = false, storageState) {
|
|
26
|
+
const browser = new Browser();
|
|
27
|
+
await browser.init(headless, storageState);
|
|
28
|
+
this.browsers.push(browser);
|
|
29
|
+
return browser;
|
|
30
|
+
}
|
|
31
|
+
async getBrowser(headless = false, storageState) {
|
|
32
|
+
if (this.browsers.length === 0) {
|
|
33
|
+
return await this.createBrowser(headless, storageState);
|
|
34
|
+
}
|
|
35
|
+
return this.browsers[0];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
class Browser {
|
|
39
|
+
constructor() {
|
|
40
|
+
this.browser = null;
|
|
41
|
+
this.context = null;
|
|
42
|
+
this.page = null;
|
|
43
|
+
}
|
|
44
|
+
async init(headless = false, storageState) {
|
|
45
|
+
this.browser = await chromium.launch({
|
|
46
|
+
headless: headless,
|
|
47
|
+
timeout: 0,
|
|
48
|
+
args: ["--ignore-https-errors"],
|
|
49
|
+
});
|
|
50
|
+
const contextOptions = !!storageState ? { storageState } : undefined;
|
|
51
|
+
this.context = await this.browser.newContext(contextOptions);
|
|
52
|
+
this.page = await this.context.newPage();
|
|
53
|
+
}
|
|
54
|
+
async close() {
|
|
55
|
+
if (this.browser !== null) {
|
|
56
|
+
await this.browser.close();
|
|
57
|
+
this.browser = null;
|
|
58
|
+
this.context = null;
|
|
59
|
+
this.page = null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const browserManager = new BrowserManager();
|
|
64
|
+
export { browserManager };
|
|
65
|
+
// let browser = await browserManager.createBrowser();
|
|
66
|
+
// browser.page.goto("https://www.cnn.com");
|
|
67
|
+
// let browser2 = await browserManager.createBrowser();
|
|
68
|
+
// await browser2.page.goto("https://www.google.com");
|
|
69
|
+
// // sleep for 2 seconds
|
|
70
|
+
// await new Promise((r) => setTimeout(r, 1000));
|
|
71
|
+
// await browserManager.closeAll();
|
|
72
|
+
//# sourceMappingURL=browser_manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser_manager.js","sourceRoot":"","sources":["../../src/browser_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type Cookie = {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
domain?: string;
|
|
5
|
+
path?: string;
|
|
6
|
+
expires?: number;
|
|
7
|
+
httpOnly?: boolean;
|
|
8
|
+
secure?: boolean;
|
|
9
|
+
sameSite?: string;
|
|
10
|
+
};
|
|
11
|
+
type LocalStorage = Record<string, string>;
|
|
12
|
+
declare class Environment {
|
|
13
|
+
baseUrl?: string | undefined;
|
|
14
|
+
cookies: Cookie[];
|
|
15
|
+
origins: {
|
|
16
|
+
origin: string;
|
|
17
|
+
localStorage: LocalStorage;
|
|
18
|
+
}[];
|
|
19
|
+
constructor(baseUrl?: string | undefined);
|
|
20
|
+
setBaseUrl(url: string): void;
|
|
21
|
+
}
|
|
22
|
+
export { Environment };
|
|
23
|
+
export type { Cookie, LocalStorage };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW;IAGf,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAFnC,YAAO,GAAY,EAAE,CAAA;QACrB,YAAO,GAAgD,EAAE,CAAA;IAEzD,CAAC;IACD,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;CACF;AACD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from "./auto_page.js";
|
|
2
|
-
export * from "./init_browser.js";
|
|
3
|
-
export * from "./stable_browser.js";
|
|
4
|
-
export * from "./environment.js";
|
|
5
|
-
export * from "./auto_page.js";
|
|
6
|
-
export * from "./browser_manager.js";
|
|
1
|
+
export * from "./auto_page.js";
|
|
2
|
+
export * from "./init_browser.js";
|
|
3
|
+
export * from "./stable_browser.js";
|
|
4
|
+
export * from "./environment.js";
|
|
5
|
+
export * from "./auto_page.js";
|
|
6
|
+
export * from "./browser_manager.js";
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Environment } from "./environment.js";
|
|
2
|
+
import { TestContext } from "./test_context.js";
|
|
3
|
+
import { Browser as PlaywrightBrowser } from "playwright";
|
|
4
|
+
import { Browser } from "./browser_manager.js";
|
|
5
|
+
declare const getContext: (environment: Environment | null, headless?: boolean, logger?: null) => Promise<TestContext>;
|
|
6
|
+
declare const closeBrowser: (browser?: Browser | PlaywrightBrowser) => Promise<void>;
|
|
7
|
+
export { getContext, closeBrowser };
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
// let environment = null;
|
|
7
|
+
// init browser create context and page, if context and page are not null
|
|
8
|
+
const getContext = async function (environment, headless = false, logger) {
|
|
9
|
+
if (environment === null) {
|
|
10
|
+
environment = initEnvironment();
|
|
11
|
+
}
|
|
12
|
+
const { cookies, origins } = environment;
|
|
13
|
+
const storageState = { cookies, origins };
|
|
14
|
+
let browser = await browserManager.getBrowser(headless, storageState);
|
|
15
|
+
let context = new TestContext();
|
|
16
|
+
context.browser = browser.browser;
|
|
17
|
+
context.playContext = browser.context;
|
|
18
|
+
context.page = browser.page;
|
|
19
|
+
context.environment = environment;
|
|
20
|
+
context.stable = new StableBrowser(context.browser, context.page, logger);
|
|
21
|
+
// await _initCookies(context);
|
|
22
|
+
return context;
|
|
23
|
+
};
|
|
24
|
+
// const _initCookies = async function (context) {
|
|
25
|
+
// if (context.environment.cookies) {
|
|
26
|
+
// const cookies = [];
|
|
27
|
+
// for (let i = 0; i < context.environment.cookies.length; i++) {
|
|
28
|
+
// const cookie = context.environment.cookies[i];
|
|
29
|
+
// if (cookie.expires && cookie.expires == "undefined") {
|
|
30
|
+
// delete cookie.expires;
|
|
31
|
+
// }
|
|
32
|
+
// cookies.push(cookie);
|
|
33
|
+
// }
|
|
34
|
+
// await context.playContext.addCookies(cookies);
|
|
35
|
+
// }
|
|
36
|
+
// };
|
|
37
|
+
const closeBrowser = async function (browser) {
|
|
38
|
+
await browserManager.closeBrowser(browser);
|
|
39
|
+
};
|
|
40
|
+
const initEnvironment = function () {
|
|
41
|
+
// if (environment === null) {
|
|
42
|
+
const environment = new Environment();
|
|
43
|
+
try {
|
|
44
|
+
const data = fs.readFileSync("env.json", "utf8");
|
|
45
|
+
//console.log("data", data);
|
|
46
|
+
const envObject = JSON.parse(data);
|
|
47
|
+
//console.log("envObject", envObject);
|
|
48
|
+
Object.assign(environment, envObject);
|
|
49
|
+
//console.log("env", environment);
|
|
50
|
+
console.log("Base url: " + environment.baseUrl);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
console.error("Error reading env.json", err);
|
|
54
|
+
}
|
|
55
|
+
// }
|
|
56
|
+
return environment;
|
|
57
|
+
};
|
|
58
|
+
export { getContext, closeBrowser };
|
|
59
|
+
//# sourceMappingURL=init_browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init_browser.js","sourceRoot":"","sources":["../../src/init_browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,0BAA0B;AAE1B,yEAAyE;AACzE,MAAM,UAAU,GAAG,KAAK,WAAW,WAA6B,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAa;IAC/F,IAAI,WAAW,KAAK,IAAI,EAAE;QACxB,WAAW,GAAG,eAAe,EAAE,CAAC;KACjC;IACD,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;IACxC,IAAI,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IACtC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IAElC,OAAO,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,OAAQ,EAAE,OAAO,CAAC,IAAK,EAAE,MAAM,CAAC,CAAC;IAC5E,+BAA+B;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF,kDAAkD;AAClD,uCAAuC;AACvC,0BAA0B;AAC1B,qEAAqE;AACrE,uDAAuD;AACvD,+DAA+D;AAC/D,iCAAiC;AACjC,UAAU;AACV,8BAA8B;AAC9B,QAAQ;AACR,qDAAqD;AACrD,MAAM;AACN,KAAK;AAEL,MAAM,YAAY,GAAG,KAAK,WAAW,OAAmC;IACtE,MAAM,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,8BAA8B;IAC5B,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,IAAI;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,4BAA4B;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,sCAAsC;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACtC,kCAAkC;QAClC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;KACjD;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;KAC9C;IACH,IAAI;IACJ,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
package/lib/locator.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare function processTableQuery(table: Element, query: string): {
|
|
2
|
+
cells: any[];
|
|
3
|
+
error?: undefined;
|
|
4
|
+
rect?: undefined;
|
|
5
|
+
} | {
|
|
6
|
+
error: string;
|
|
7
|
+
cells?: undefined;
|
|
8
|
+
rect?: undefined;
|
|
9
|
+
} | {
|
|
10
|
+
cells: any[];
|
|
11
|
+
rect: DOMRect | null;
|
|
12
|
+
error?: undefined;
|
|
13
|
+
};
|
|
14
|
+
type TprocessTableQuery = typeof processTableQuery;
|
|
15
|
+
export type { TprocessTableQuery };
|
package/lib/locator.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
const selectors = null;
|
|
2
|
+
document.selectors = selectors;
|
|
3
|
+
const tableSelector = null;
|
|
4
|
+
document.tableSelector = tableSelector;
|
|
5
|
+
// locator | operator | value
|
|
6
|
+
// table.rows | >= | 1
|
|
7
|
+
// table[1]["Availability"].text | equals | 100%
|
|
8
|
+
// table[*][2].text |not_equals| error
|
|
9
|
+
function processTableQuery(table, query) {
|
|
10
|
+
if (document.selectors && document.selectors.length > 0) {
|
|
11
|
+
for (let i = 0; i < document.selectors.length; i++) {
|
|
12
|
+
const selector = document.selectors[i];
|
|
13
|
+
const allElementsList = document.querySelectorAll(selector.css);
|
|
14
|
+
const allElements = Array.from(allElementsList);
|
|
15
|
+
for (let j = 0; j < allElements.length; j++) {
|
|
16
|
+
const element = allElements[j];
|
|
17
|
+
element.setAttribute("data-blinq-role", selector.changes.role);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const rows = Array.from(table.querySelectorAll("tr, [data-blinq-role='row'], [role='row']"));
|
|
22
|
+
const _rows = rows.length;
|
|
23
|
+
const _columnNames = [];
|
|
24
|
+
let _columns = 0;
|
|
25
|
+
let columnheader = [];
|
|
26
|
+
if (rows.length > 0) {
|
|
27
|
+
//const rowheader = rows[0];
|
|
28
|
+
columnheader = Array.from(table.querySelectorAll("th, [data-blinq-role='columnheader'], [role='columnheader']"));
|
|
29
|
+
console.log("columnheader length", columnheader.length);
|
|
30
|
+
_columns = columnheader.length;
|
|
31
|
+
for (let i = 0; i < columnheader.length; i++) {
|
|
32
|
+
const cell = columnheader[i];
|
|
33
|
+
const cellText = cell.innerText;
|
|
34
|
+
_columnNames.push(cellText);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
let _rowStartIndex = 0;
|
|
38
|
+
// if (columnheader.length > 0) {
|
|
39
|
+
// tableData.rowStartIndex = 1;
|
|
40
|
+
// }
|
|
41
|
+
const tableData = {
|
|
42
|
+
rows: _rows,
|
|
43
|
+
columns: _columns,
|
|
44
|
+
columnNames: _columnNames,
|
|
45
|
+
rowStartIndex: _rowStartIndex,
|
|
46
|
+
};
|
|
47
|
+
if (query.startsWith("table.")) {
|
|
48
|
+
const result = [];
|
|
49
|
+
const property = query.substring(6);
|
|
50
|
+
//console.log("property", property);
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
const value = tableData[property];
|
|
53
|
+
//console.log("value", value);
|
|
54
|
+
result.push(value);
|
|
55
|
+
return { cells: result };
|
|
56
|
+
}
|
|
57
|
+
const pattern = /^table\[(.+)\]\[(.+)\]\.(.+)$/;
|
|
58
|
+
const match = query.match(pattern);
|
|
59
|
+
if (!match) {
|
|
60
|
+
return { error: "Invalid quary" };
|
|
61
|
+
}
|
|
62
|
+
const rowSelector = match[1];
|
|
63
|
+
let columnSelector = match[2];
|
|
64
|
+
const property = match[3];
|
|
65
|
+
let selectedRows = [];
|
|
66
|
+
if (rowSelector === "*") {
|
|
67
|
+
selectedRows = rows;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
if (isNaN(rowSelector)) {
|
|
72
|
+
return { error: "Invalid row selector" };
|
|
73
|
+
}
|
|
74
|
+
const rowIndex = parseInt(rowSelector);
|
|
75
|
+
if (rowIndex < 0 || rowIndex >= rows.length) {
|
|
76
|
+
return { error: "Invalid row selector" };
|
|
77
|
+
}
|
|
78
|
+
selectedRows.push(rows[rowIndex]);
|
|
79
|
+
}
|
|
80
|
+
console.log("selectedRows count", selectedRows.length);
|
|
81
|
+
const selectedCells = [];
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
if (isNaN(columnSelector)) {
|
|
84
|
+
if (columnSelector.startsWith('"') && columnSelector.endsWith('"')) {
|
|
85
|
+
columnSelector = columnSelector.substring(1, columnSelector.length - 1);
|
|
86
|
+
}
|
|
87
|
+
else if (columnSelector.startsWith("'") && columnSelector.endsWith("'")) {
|
|
88
|
+
columnSelector = columnSelector.substring(1, columnSelector.length - 1);
|
|
89
|
+
}
|
|
90
|
+
if (columnheader.length === 0) {
|
|
91
|
+
return { error: "No column header available" };
|
|
92
|
+
}
|
|
93
|
+
let foundHeader = null;
|
|
94
|
+
for (let i = 0; i < columnheader.length; i++) {
|
|
95
|
+
const cell = columnheader[i];
|
|
96
|
+
const cellText = cell.innerText;
|
|
97
|
+
console.log("cellText", cellText);
|
|
98
|
+
if (cellText === columnSelector) {
|
|
99
|
+
foundHeader = cell;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!foundHeader) {
|
|
104
|
+
return { error: "No column header found" };
|
|
105
|
+
}
|
|
106
|
+
const foundHeaderRec = foundHeader.getBoundingClientRect();
|
|
107
|
+
for (let i = 0; i < selectedRows.length; i++) {
|
|
108
|
+
const row = selectedRows[i];
|
|
109
|
+
const cells = Array.from(row.querySelectorAll("td, [data-blinq-role='cell'], [role='cell']"));
|
|
110
|
+
console.log("cells count", cells.length);
|
|
111
|
+
for (let j = 0; j < cells.length; j++) {
|
|
112
|
+
const cell = cells[j];
|
|
113
|
+
const rec = cell.getBoundingClientRect();
|
|
114
|
+
const xCenter = rec.left + rec.width / 2;
|
|
115
|
+
if (foundHeaderRec.left <= xCenter && xCenter <= foundHeaderRec.right) {
|
|
116
|
+
selectedCells.push(cell);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const columnIndex = parseInt(columnSelector);
|
|
123
|
+
if (columnIndex < 0 || columnIndex >= columnheader.length) {
|
|
124
|
+
return { error: "Column index out of bounds" };
|
|
125
|
+
}
|
|
126
|
+
for (let i = 0; i < selectedRows.length; i++) {
|
|
127
|
+
const row = selectedRows[i];
|
|
128
|
+
const cells = Array.from(row.querySelectorAll("td, [data-blinq-role='cell'], [role='cell']"));
|
|
129
|
+
selectedCells.push(cells[columnIndex]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
let rect = null;
|
|
133
|
+
const result = [];
|
|
134
|
+
for (let i = 0; i < selectedCells.length; i++) {
|
|
135
|
+
let added = false;
|
|
136
|
+
if (property === "element") {
|
|
137
|
+
added = true;
|
|
138
|
+
result.push(selectedCells[i]);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
if (property === "text" || property === "innerText") {
|
|
142
|
+
added = true;
|
|
143
|
+
result.push(selectedCells[i].innerText);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
if (selectedCells[i].hasAttribute(property)) {
|
|
147
|
+
added = true;
|
|
148
|
+
result.push(selectedCells[i].getAttribute(property));
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
added = true;
|
|
152
|
+
// @ts-ignore
|
|
153
|
+
result.push(selectedCells[i][property]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (added) {
|
|
157
|
+
rect = rect ? merge(rect, selectedCells[i].getBoundingClientRect()) : selectedCells[i].getBoundingClientRect();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { cells: result, rect };
|
|
162
|
+
}
|
|
163
|
+
const merge = (rec1, rec2) => {
|
|
164
|
+
const x = Math.min(rec1.left, rec2.left);
|
|
165
|
+
const y = Math.min(rec1.top, rec2.top);
|
|
166
|
+
const width = Math.max(rec1.right, rec2.right) - x;
|
|
167
|
+
const height = Math.max(rec1.bottom, rec2.bottom) - y;
|
|
168
|
+
return { x, y, width, height };
|
|
169
|
+
};
|
|
170
|
+
document.processTableQuery = processTableQuery;
|
|
171
|
+
export {};
|
|
172
|
+
//# sourceMappingURL=locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/locator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Browser, Page } from "playwright";
|
|
2
|
+
type Params = Record<string, string>;
|
|
3
|
+
declare class StableBrowser {
|
|
4
|
+
browser: Browser;
|
|
5
|
+
page: Page;
|
|
6
|
+
logger: any;
|
|
7
|
+
constructor(browser: Browser, page: Page, logger?: any);
|
|
8
|
+
goto(url: string): Promise<void>;
|
|
9
|
+
_fixUsingParams(text: any, _params: Params): any;
|
|
10
|
+
_getLocator(locator: any, scope: any, _params: Params): any;
|
|
11
|
+
_locateElementByText(scope: any, text1: any, tag1: any, regex: boolean | undefined, _params: Params): Promise<any>;
|
|
12
|
+
_collectLocatorInformation(selectorHierarchy: any, index: number | undefined, scope: any, foundLocators: any, _params: Params): Promise<void>;
|
|
13
|
+
_locate(selectors: any, info: any, _params?: Params, timeout?: number): Promise<any>;
|
|
14
|
+
click(selector: any, _params?: Params, options?: {}, world?: null): Promise<{}>;
|
|
15
|
+
selectOption(selector: any, values: any, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
16
|
+
fill(selector: any, value: any, enter?: boolean, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
17
|
+
getText(selector: any, _params?: null, options?: {}, info?: {}, world?: null): Promise<any>;
|
|
18
|
+
containsPattern(selector: any, pattern: any, text: any, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
19
|
+
containsText(selector: any, text: any, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
20
|
+
_screenShot(options?: {}, world?: null): Promise<void>;
|
|
21
|
+
verifyElementExistInPage(selector: any, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
22
|
+
analyzeTable(selector: any, query: any, operator: any, value: any, _params?: null, options?: {}, world?: null): Promise<{}>;
|
|
23
|
+
waitForPageLoad(options?: {}, world?: null): Promise<void>;
|
|
24
|
+
_reportToWorld(world: any, properties?: {}): void;
|
|
25
|
+
}
|
|
26
|
+
export { StableBrowser };
|