artes 1.0.86 → 1.0.88

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.
Files changed (38) hide show
  1. package/README.md +367 -366
  2. package/cucumber.config.js +136 -120
  3. package/docs/functionDefinitions.md +2401 -2401
  4. package/docs/stepDefinitions.md +352 -352
  5. package/executer.js +108 -106
  6. package/index.js +46 -46
  7. package/package.json +50 -50
  8. package/src/helper/contextManager/browserManager.js +71 -70
  9. package/src/helper/contextManager/requestManager.js +30 -30
  10. package/src/helper/executers/cleaner.js +19 -19
  11. package/src/helper/executers/exporter.js +15 -15
  12. package/src/helper/executers/helper.js +77 -74
  13. package/src/helper/executers/projectCreator.js +164 -163
  14. package/src/helper/executers/reportGenerator.js +25 -25
  15. package/src/helper/executers/testRunner.js +30 -30
  16. package/src/helper/executers/versionChecker.js +14 -13
  17. package/src/helper/imports/commons.js +52 -52
  18. package/src/helper/pomController/elementController.js +144 -144
  19. package/src/helper/pomController/pomCollector.js +20 -20
  20. package/src/helper/stepFunctions/APIActions.js +313 -313
  21. package/src/helper/stepFunctions/assertions.js +523 -523
  22. package/src/helper/stepFunctions/browserActions.js +21 -21
  23. package/src/helper/stepFunctions/elementInteractions.js +38 -38
  24. package/src/helper/stepFunctions/exporter.js +19 -19
  25. package/src/helper/stepFunctions/frameActions.js +50 -50
  26. package/src/helper/stepFunctions/keyboardActions.js +41 -41
  27. package/src/helper/stepFunctions/mouseActions.js +145 -145
  28. package/src/helper/stepFunctions/pageActions.js +27 -27
  29. package/src/hooks/context.js +15 -15
  30. package/src/hooks/hooks.js +157 -157
  31. package/src/stepDefinitions/API.steps.js +252 -252
  32. package/src/stepDefinitions/assertions.steps.js +826 -826
  33. package/src/stepDefinitions/browser.steps.js +7 -7
  34. package/src/stepDefinitions/frameActions.steps.js +76 -76
  35. package/src/stepDefinitions/keyboardActions.steps.js +95 -87
  36. package/src/stepDefinitions/mouseActions.steps.js +256 -256
  37. package/src/stepDefinitions/page.steps.js +71 -71
  38. package/src/stepDefinitions/random.steps.js +31 -31
@@ -1,13 +1,14 @@
1
- const fs = require("fs");
2
- const { moduleConfig } = require("../imports/commons");
3
-
4
- function showVersion() {
5
- const packageJson = JSON.parse(
6
- fs.readFileSync(moduleConfig.modulePackageJsonPath, "utf-8"),
7
- );
8
- console.log(`📌 Artes version: ${packageJson.version}`);
9
- }
10
-
11
- module.exports = {
12
- showVersion,
13
- };
1
+ const { execSync } = require("child_process");
2
+ const path = require("path");
3
+ const fs = require("fs");
4
+
5
+ function showVersion() {
6
+ const artesVersion = execSync("npm root -g").toString().trim();
7
+ const artesGPackageJSONPath = path.join(artesVersion, "artes/package.json");
8
+ const asrtesGPackageJSON = JSON.parse(fs.readFileSync(artesGPackageJSONPath, "utf8"));
9
+ console.log(`ARTES Version: ${asrtesGPackageJSON.version}`);
10
+ }
11
+
12
+ module.exports = {
13
+ showVersion,
14
+ };
@@ -1,52 +1,52 @@
1
- const { expect } = require("playwright/test");
2
- const { Given, When, Then } = require("@cucumber/cucumber");
3
- const {
4
- getElement,
5
- getSelector,
6
- extractVarsFromResponse,
7
- saveVar,
8
- resolveVariable,
9
- } = require("../pomController/elementController");
10
- const { faker } = require("@faker-js/faker");
11
- const { context } = require("../../hooks/context");
12
-
13
- const element = getElement;
14
- const selector = getSelector;
15
- const page = context.page;
16
- const request = context.request;
17
- const random = faker;
18
-
19
- const path = require("path");
20
- const modulePath = process.cwd();
21
- const projectPath = modulePath.split(/[/\\]/).slice(0, -2).join("/");
22
-
23
- const moduleConfig = {
24
- projectPath: projectPath,
25
- modulePackageJsonPath: path.join(modulePath, "/package.json"),
26
- modulePath: path.join(modulePath, "/node_modules/artes"),
27
- reportPath: path.join(modulePath, "/report"),
28
- tracerPath: path.join(projectPath, "/trace.zip"),
29
- cucumberConfigPath: path.join(projectPath, "/artes.config.js"),
30
- featuresPath: path.join(projectPath, "/tests/features/"),
31
- stepsPath: path.join(projectPath, "/tests/steps/*.js"),
32
- pomPath: path.join(projectPath, "/tests/POMs"),
33
- cleanUpPaths:
34
- "allure-result allure-results test-results @rerun.txt testsStatus",
35
- };
36
-
37
- module.exports = {
38
- expect,
39
- Given,
40
- When,
41
- Then,
42
- element,
43
- selector,
44
- extractVarsFromResponse,
45
- saveVar,
46
- resolveVariable,
47
- random,
48
- page,
49
- request,
50
- context,
51
- moduleConfig,
52
- };
1
+ const { expect } = require("playwright/test");
2
+ const { Given, When, Then } = require("@cucumber/cucumber");
3
+ const {
4
+ getElement,
5
+ getSelector,
6
+ extractVarsFromResponse,
7
+ saveVar,
8
+ resolveVariable,
9
+ } = require("../pomController/elementController");
10
+ const { faker } = require("@faker-js/faker");
11
+ const { context } = require("../../hooks/context");
12
+
13
+ const element = getElement;
14
+ const selector = getSelector;
15
+ const page = context.page;
16
+ const request = context.request;
17
+ const random = faker;
18
+
19
+ const path = require("path");
20
+ const modulePath = process.cwd();
21
+ const projectPath = modulePath.split(/[/\\]/).slice(0, -2).join("/");
22
+
23
+ const moduleConfig = {
24
+ projectPath: projectPath,
25
+ modulePackageJsonPath: path.join(modulePath, "/package.json"),
26
+ modulePath: path.join(modulePath, "/node_modules/artes"),
27
+ reportPath: path.join(modulePath, "/report"),
28
+ tracerPath: path.join(projectPath, "/trace.zip"),
29
+ cucumberConfigPath: path.join(projectPath, "/artes.config.js"),
30
+ featuresPath: path.join(projectPath, "/tests/features/"),
31
+ stepsPath: path.join(projectPath, "/tests/steps/*.js"),
32
+ pomPath: path.join(projectPath, "/tests/POMs"),
33
+ cleanUpPaths:
34
+ "allure-result allure-results test-results @rerun.txt testsStatus",
35
+ };
36
+
37
+ module.exports = {
38
+ expect,
39
+ Given,
40
+ When,
41
+ Then,
42
+ element,
43
+ selector,
44
+ extractVarsFromResponse,
45
+ saveVar,
46
+ resolveVariable,
47
+ random,
48
+ page,
49
+ request,
50
+ context,
51
+ moduleConfig,
52
+ };
@@ -1,144 +1,144 @@
1
- const { context } = require("../../hooks/context");
2
-
3
- class Elements {
4
- static elements = {};
5
-
6
- static addElements(elements) {
7
- this.elements = { ...this.elements, ...elements };
8
- }
9
-
10
- // static async locatorExistenceChecker(locator){
11
- // const locatorCount = await locator.count();
12
- // console.log(locator, locatorCount)
13
- // return locatorCount ==0 ? false : true;
14
- // }
15
-
16
- static getElement(element) {
17
- if (!context.page) {
18
- throw new Error("Page context is not initialized.");
19
- }
20
-
21
- function selectorSeperator(element) {
22
- const selector = element?.split("=");
23
- return [
24
- selector[0]?.trim(),
25
- selector[1] !== undefined ? selector[1].trim() : "",
26
- ];
27
- }
28
-
29
- function getSelector(elements, element) {
30
- if (elements?.[element]?.selector) {
31
- return selectorSeperator(elements[element].selector);
32
- } else if (elements?.[element]) {
33
- return selectorSeperator(elements[element]);
34
- } else if (typeof element === "string") {
35
- return selectorSeperator(element);
36
- }
37
- return null;
38
- }
39
-
40
- const selector = getSelector(this.elements, element);
41
- const waitTime = this.elements[element]?.waitTime * 1000 || 0;
42
-
43
- let locator;
44
- switch (selector[0]) {
45
- case "xpath":
46
- locator = context.page.locator(`xpath=${selector[1]}`, { exact: true });
47
- break;
48
- case "name":
49
- locator = context.page.locator(`[name=${selector[1]}]`, {
50
- exact: true,
51
- });
52
- break;
53
- case "placeholder":
54
- locator = context.page.getByPlaceholder(selector[1], { exact: true });
55
- break;
56
- case "text":
57
- locator = context.page.getByText(selector[1], { exact: true });
58
- break;
59
- case "label":
60
- locator = context.page.getByLabel(selector[1], { exact: true });
61
- break;
62
- case "role":
63
- locator = context.page.getByRole(selector[1], { exact: true });
64
- break;
65
- case "alt":
66
- locator = context.page.getByAltText(selector[1], { exact: true });
67
- break;
68
- case "title":
69
- locator = context.page.getByTitle(selector[1], { exact: true });
70
- break;
71
- case "testid":
72
- locator = context.page.getByTestId(selector[1], { exact: true });
73
- break;
74
- default:
75
- locator = context.page.locator(selector[0], { exact: true });
76
- break;
77
- }
78
-
79
- return locator;
80
- }
81
-
82
- static getSelector(element) {
83
- const selector =
84
- this.elements?.[element]?.selector || this.elements?.[element] || element;
85
- return selector;
86
- }
87
-
88
- static extractVarsFromResponse(responseBody, vars, customVarName) {
89
- function getValueByPath(obj, path) {
90
- const keys = path.split(".");
91
- let current = obj;
92
-
93
- for (const key of keys) {
94
- if (current && typeof current === "object" && key in current) {
95
- current = current[key];
96
- } else {
97
- return undefined;
98
- }
99
- }
100
-
101
- return current;
102
- }
103
-
104
- vars.split(",").forEach((v) => {
105
- const path = v.trim();
106
- const value = getValueByPath(responseBody, path);
107
- if (value !== undefined) {
108
- this.saveVar(value, customVarName, path);
109
- }
110
- });
111
- }
112
-
113
- static saveVar(value, customName, path) {
114
- if (!customName) {
115
- const flatKey = path
116
- .split(".")
117
- .map((part, i) =>
118
- i === 0 ? part : part[0].toUpperCase() + part.slice(1),
119
- )
120
- .join("");
121
-
122
- context.vars[flatKey] = value;
123
- } else {
124
- context.vars[customName] = value;
125
- }
126
- }
127
-
128
- static resolveVariable(template) {
129
- if (typeof template !== "string") return template;
130
- return template.replace(/{{\s*(\w+)\s*}}/g, (_, varName) => {
131
- const value = context.vars[varName];
132
- return value !== undefined ? value : `{{${varName}}}`;
133
- });
134
- }
135
- }
136
-
137
- module.exports = {
138
- getElement: Elements.getElement.bind(Elements),
139
- addElements: Elements.addElements.bind(Elements),
140
- getSelector: Elements.getSelector.bind(Elements),
141
- extractVarsFromResponse: Elements.extractVarsFromResponse.bind(Elements),
142
- saveVar: Elements.saveVar.bind(Elements),
143
- resolveVariable: Elements.resolveVariable.bind(Elements),
144
- };
1
+ const { context } = require("../../hooks/context");
2
+
3
+ class Elements {
4
+ static elements = {};
5
+
6
+ static addElements(elements) {
7
+ this.elements = { ...this.elements, ...elements };
8
+ }
9
+
10
+ // static async locatorExistenceChecker(locator){
11
+ // const locatorCount = await locator.count();
12
+ // console.log(locator, locatorCount)
13
+ // return locatorCount ==0 ? false : true;
14
+ // }
15
+
16
+ static getElement(element) {
17
+ if (!context.page) {
18
+ throw new Error("Page context is not initialized.");
19
+ }
20
+
21
+ function selectorSeperator(element) {
22
+ const selector = element?.split("=");
23
+ return [
24
+ selector[0]?.trim(),
25
+ selector[1] !== undefined ? selector[1].trim() : "",
26
+ ];
27
+ }
28
+
29
+ function getSelector(elements, element) {
30
+ if (elements?.[element]?.selector) {
31
+ return selectorSeperator(elements[element].selector);
32
+ } else if (elements?.[element]) {
33
+ return selectorSeperator(elements[element]);
34
+ } else if (typeof element === "string") {
35
+ return selectorSeperator(element);
36
+ }
37
+ return null;
38
+ }
39
+
40
+ const selector = getSelector(this.elements, element);
41
+ const waitTime = this.elements[element]?.waitTime * 1000 || 0;
42
+
43
+ let locator;
44
+ switch (selector[0]) {
45
+ case "xpath":
46
+ locator = context.page.locator(`xpath=${selector[1]}`, { exact: true });
47
+ break;
48
+ case "name":
49
+ locator = context.page.locator(`[name=${selector[1]}]`, {
50
+ exact: true,
51
+ });
52
+ break;
53
+ case "placeholder":
54
+ locator = context.page.getByPlaceholder(selector[1], { exact: true });
55
+ break;
56
+ case "text":
57
+ locator = context.page.getByText(selector[1], { exact: true });
58
+ break;
59
+ case "label":
60
+ locator = context.page.getByLabel(selector[1], { exact: true });
61
+ break;
62
+ case "role":
63
+ locator = context.page.getByRole(selector[1], { exact: true });
64
+ break;
65
+ case "alt":
66
+ locator = context.page.getByAltText(selector[1], { exact: true });
67
+ break;
68
+ case "title":
69
+ locator = context.page.getByTitle(selector[1], { exact: true });
70
+ break;
71
+ case "testid":
72
+ locator = context.page.getByTestId(selector[1], { exact: true });
73
+ break;
74
+ default:
75
+ locator = context.page.locator(selector[0], { exact: true });
76
+ break;
77
+ }
78
+
79
+ return locator;
80
+ }
81
+
82
+ static getSelector(element) {
83
+ const selector =
84
+ this.elements?.[element]?.selector || this.elements?.[element] || element;
85
+ return selector;
86
+ }
87
+
88
+ static extractVarsFromResponse(responseBody, vars, customVarName) {
89
+ function getValueByPath(obj, path) {
90
+ const keys = path.split(".");
91
+ let current = obj;
92
+
93
+ for (const key of keys) {
94
+ if (current && typeof current === "object" && key in current) {
95
+ current = current[key];
96
+ } else {
97
+ return undefined;
98
+ }
99
+ }
100
+
101
+ return current;
102
+ }
103
+
104
+ vars.split(",").forEach((v) => {
105
+ const path = v.trim();
106
+ const value = getValueByPath(responseBody, path);
107
+ if (value !== undefined) {
108
+ this.saveVar(value, customVarName, path);
109
+ }
110
+ });
111
+ }
112
+
113
+ static saveVar(value, customName, path) {
114
+ if (!customName) {
115
+ const flatKey = path
116
+ .split(".")
117
+ .map((part, i) =>
118
+ i === 0 ? part : part[0].toUpperCase() + part.slice(1),
119
+ )
120
+ .join("");
121
+
122
+ context.vars[flatKey] = value;
123
+ } else {
124
+ context.vars[customName] = value;
125
+ }
126
+ }
127
+
128
+ static resolveVariable(template) {
129
+ if (typeof template !== "string") return template;
130
+ return template.replace(/{{\s*(\w+)\s*}}/g, (_, varName) => {
131
+ const value = context.vars[varName];
132
+ return value !== undefined ? value : `{{${varName}}}`;
133
+ });
134
+ }
135
+ }
136
+
137
+ module.exports = {
138
+ getElement: Elements.getElement.bind(Elements),
139
+ addElements: Elements.addElements.bind(Elements),
140
+ getSelector: Elements.getSelector.bind(Elements),
141
+ extractVarsFromResponse: Elements.extractVarsFromResponse.bind(Elements),
142
+ saveVar: Elements.saveVar.bind(Elements),
143
+ resolveVariable: Elements.resolveVariable.bind(Elements),
144
+ };
@@ -1,20 +1,20 @@
1
- const { addElements } = require("./elementController");
2
- const cucumberConfig = require("../../../cucumber.config");
3
- const fs = require("fs");
4
- function pomCollector() {
5
- if (fs.existsSync(cucumberConfig.default.pomPath)) {
6
- fs.readdir(`${cucumberConfig.default.pomPath}`, (err, files) => {
7
- files.forEach((file) => {
8
- fs.readFile(
9
- `${cucumberConfig.default.pomPath}/${file}`,
10
- "utf-8",
11
- (err, content) => {
12
- addElements(JSON.parse(content));
13
- },
14
- );
15
- });
16
- });
17
- }
18
- }
19
-
20
- module.exports = { pomCollector };
1
+ const { addElements } = require("./elementController");
2
+ const cucumberConfig = require("../../../cucumber.config");
3
+ const fs = require("fs");
4
+ function pomCollector() {
5
+ if (fs.existsSync(cucumberConfig.default.pomPath)) {
6
+ fs.readdir(`${cucumberConfig.default.pomPath}`, (err, files) => {
7
+ files.forEach((file) => {
8
+ fs.readFile(
9
+ `${cucumberConfig.default.pomPath}/${file}`,
10
+ "utf-8",
11
+ (err, content) => {
12
+ addElements(JSON.parse(content));
13
+ },
14
+ );
15
+ });
16
+ });
17
+ }
18
+ }
19
+
20
+ module.exports = { pomCollector };