automation_model 1.0.11 → 1.0.13
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/bin/auto_page.js +2 -2
- package/bin/browser_manager.js +12 -17
- package/bin/init_browser.js +2 -2
- package/bin/stable_browser.js +18 -14
- package/package.json +3 -2
package/bin/auto_page.js
CHANGED
|
@@ -26,9 +26,9 @@ class AutoPage {
|
|
|
26
26
|
/**
|
|
27
27
|
* init context
|
|
28
28
|
*/
|
|
29
|
-
static async init(navigate = true) {
|
|
29
|
+
static async init(navigate = true, headless = false) {
|
|
30
30
|
const instance = new this();
|
|
31
|
-
instance.context = await getContext();
|
|
31
|
+
instance.context = await getContext(null, headless);
|
|
32
32
|
instance.page = instance.context.page;
|
|
33
33
|
instance.browser = instance.context.browser;
|
|
34
34
|
instance.stable = instance.context.stable;
|
package/bin/browser_manager.js
CHANGED
|
@@ -9,7 +9,11 @@ class BrowserManager {
|
|
|
9
9
|
this.browsers = [];
|
|
10
10
|
}
|
|
11
11
|
async closeBrowser(browser) {
|
|
12
|
-
if (browser
|
|
12
|
+
if (!browser && this.browsers.length > 0) {
|
|
13
|
+
browser = this.browsers[0];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (browser) {
|
|
13
17
|
await browser.close();
|
|
14
18
|
for (let i = 0; i < this.browsers.length; i++) {
|
|
15
19
|
if (
|
|
@@ -24,15 +28,15 @@ class BrowserManager {
|
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
async createBrowser() {
|
|
31
|
+
async createBrowser(headless = false) {
|
|
28
32
|
const browser = new Browser();
|
|
29
|
-
await browser.init();
|
|
33
|
+
await browser.init(headless);
|
|
30
34
|
this.browsers.push(browser);
|
|
31
35
|
return browser;
|
|
32
36
|
}
|
|
33
|
-
async getBrowser() {
|
|
37
|
+
async getBrowser(headless = false) {
|
|
34
38
|
if (this.browsers.length === 0) {
|
|
35
|
-
return await this.createBrowser();
|
|
39
|
+
return await this.createBrowser(headless);
|
|
36
40
|
}
|
|
37
41
|
return this.browsers[0];
|
|
38
42
|
}
|
|
@@ -44,23 +48,14 @@ class Browser {
|
|
|
44
48
|
this.page = null;
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
async init() {
|
|
48
|
-
//let port = 9222;
|
|
51
|
+
async init(headless = false) {
|
|
49
52
|
this.browser = await chromium.launch({
|
|
50
|
-
headless:
|
|
53
|
+
headless: headless,
|
|
51
54
|
timeout: 0,
|
|
52
|
-
//args: ["--remote-debugging-port=" + port],
|
|
53
55
|
});
|
|
54
|
-
|
|
55
|
-
// endpointURL: `http://127.0.0.1:${port}/`,
|
|
56
|
-
// });
|
|
57
|
-
// //let context = await browser.newContext();
|
|
58
|
-
// const context = cdpBrowser.contexts()[0];
|
|
59
|
-
// let page = await context.newPage();
|
|
60
|
-
// page.goto("https://www.cnn.com");
|
|
56
|
+
|
|
61
57
|
this.context = await this.browser.newContext();
|
|
62
58
|
this.page = await this.context.newPage();
|
|
63
|
-
//console.log("browser", this.browser);
|
|
64
59
|
}
|
|
65
60
|
|
|
66
61
|
async close() {
|
package/bin/init_browser.js
CHANGED
|
@@ -7,11 +7,11 @@ import { StableBrowser } from "./stable_browser.js";
|
|
|
7
7
|
let environment = null;
|
|
8
8
|
|
|
9
9
|
// init browser create context and page, if context and page are not null
|
|
10
|
-
const getContext = async function (environment = null) {
|
|
10
|
+
const getContext = async function (environment = null, headless = false) {
|
|
11
11
|
if (environment === null) {
|
|
12
12
|
environment = initEnvoronment();
|
|
13
13
|
}
|
|
14
|
-
let browser = await browserManager.getBrowser();
|
|
14
|
+
let browser = await browserManager.getBrowser(headless);
|
|
15
15
|
let context = new TestContext();
|
|
16
16
|
context.browser = browser.browser;
|
|
17
17
|
context.playContext = browser.context;
|
package/bin/stable_browser.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { expect } from "@playwright/test";
|
|
2
2
|
class StableBrowser {
|
|
3
|
-
constructor(browser, page) {
|
|
3
|
+
constructor(browser, page, logger = console) {
|
|
4
4
|
this.browser = browser;
|
|
5
5
|
this.page = page;
|
|
6
|
+
this.logger = logger;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
async goto(url) {
|
|
@@ -10,10 +11,16 @@ class StableBrowser {
|
|
|
10
11
|
timeout: 60000,
|
|
11
12
|
});
|
|
12
13
|
}
|
|
13
|
-
async
|
|
14
|
+
async _checkUnique(locator) {
|
|
14
15
|
let count = await locator.count();
|
|
15
16
|
if (count > 1) {
|
|
16
|
-
|
|
17
|
+
logger.error("Found more than one element for locator", JSON.stringify(locator));
|
|
18
|
+
for (let i = 0; i < count; i++) {
|
|
19
|
+
let loc = locator.nth(i);
|
|
20
|
+
if ((await loc.isVisible()) && (await loc.isEnabled())) {
|
|
21
|
+
return loc;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
17
24
|
}
|
|
18
25
|
return locator;
|
|
19
26
|
}
|
|
@@ -23,23 +30,19 @@ class StableBrowser {
|
|
|
23
30
|
let currentScope = scope;
|
|
24
31
|
|
|
25
32
|
for (let i = 0; i < selector.length; i++) {
|
|
26
|
-
currentScope = await this.
|
|
27
|
-
await this._locate(selector[i], currentScope)
|
|
28
|
-
);
|
|
33
|
+
currentScope = await this._locate(selector[i], currentScope);
|
|
29
34
|
}
|
|
30
35
|
return currentScope;
|
|
31
36
|
}
|
|
32
37
|
if (typeof selector === "object") {
|
|
33
38
|
if (selector.css) {
|
|
34
|
-
return await this.
|
|
39
|
+
return await this._checkUnique(scope.locator(selector.css));
|
|
35
40
|
}
|
|
36
41
|
if (selector.role) {
|
|
37
|
-
return await this.
|
|
38
|
-
scope.getByRole(selector.role[0], selector.role[1])
|
|
39
|
-
);
|
|
42
|
+
return await this._checkUnique(scope.getByRole(selector.role[0], selector.role[1]));
|
|
40
43
|
}
|
|
41
44
|
if (selector.text) {
|
|
42
|
-
return await this.
|
|
45
|
+
return await this._checkUnique(scope.getByText(selector.text));
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
throw new Error(`Unknown locator type ${type}`);
|
|
@@ -62,9 +65,10 @@ class StableBrowser {
|
|
|
62
65
|
await element.fill(value);
|
|
63
66
|
await element.dispatchEvent("change");
|
|
64
67
|
}
|
|
65
|
-
async
|
|
66
|
-
const element = await
|
|
67
|
-
await expect(element
|
|
68
|
+
async verifyElementExistInPage(selector) {
|
|
69
|
+
const element = await this._locate(selector, this.page);
|
|
70
|
+
await expect(element).toHaveCount(1);
|
|
71
|
+
//await expect(element !== undefined).toBeTruthy();
|
|
68
72
|
}
|
|
69
73
|
async waitForPageLoad() {
|
|
70
74
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "automation_model",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "An automation infrastructure module to be use for generative AI automation projects.",
|
|
5
5
|
"main": "bin/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"pack": "mkdir build && mkdir build/bin && cp ./src/auto_page.js ./build/bin/auto_page.js && cp ./src/environment.js ./build/bin/environment.js && cp ./src/browser_manager.js ./build/bin/browser_manager.js && cp ./src/test_context.js ./build/bin/test_context.js && cp ./src/init_browser.js ./build/bin/init_browser.js && cp ./src/stable_browser.js ./build/bin/stable_browser.js && cp ./src/index.js ./build/bin/index.js && cp ./package.json ./build/package.json",
|
|
12
12
|
"clean": "rm -rf ./build",
|
|
13
|
-
"build": "npm run clean && npm run pack"
|
|
13
|
+
"build": "npm run clean && npm run pack",
|
|
14
|
+
"test": "node ./tests/launch_page.js"
|
|
14
15
|
},
|
|
15
16
|
"author": "",
|
|
16
17
|
"license": "ISC",
|