vita-playwright 1.3.25 → 1.4.1
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/.prettierrc +9 -0
- package/dist/index.d.ts +11 -12
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/src/helpers/api-helpers.d.ts +3 -23
- package/dist/src/helpers/api-helpers.js +15 -35
- package/dist/src/helpers/api-helpers.js.map +1 -1
- package/dist/src/helpers/ui-helpers.d.ts +6 -72
- package/dist/src/helpers/ui-helpers.js +41 -78
- package/dist/src/helpers/ui-helpers.js.map +1 -1
- package/dist/src/utils/api_axios.js +1 -1
- package/dist/src/utils/api_axios.js.map +1 -1
- package/dist/src/utils/azure_storage_methods.js +67 -34
- package/dist/src/utils/azure_storage_methods.js.map +1 -1
- package/dist/src/utils/comparisions.js +24 -12
- package/dist/src/utils/comparisions.js.map +1 -1
- package/dist/src/utils/date_utilitites.d.ts +0 -38
- package/dist/src/utils/date_utilitites.js +0 -38
- package/dist/src/utils/date_utilitites.js.map +1 -1
- package/dist/src/utils/document_utility.d.ts +1 -32
- package/dist/src/utils/document_utility.js +28 -39
- package/dist/src/utils/document_utility.js.map +1 -1
- package/dist/src/utils/email_sender.js +11 -10
- package/dist/src/utils/email_sender.js.map +1 -1
- package/dist/src/utils/keyvault_methods.js +5 -5
- package/dist/src/utils/keyvault_methods.js.map +1 -1
- package/dist/src/utils/lighhouse_utility.d.ts +0 -17
- package/dist/src/utils/lighhouse_utility.js +74 -69
- package/dist/src/utils/lighhouse_utility.js.map +1 -1
- package/dist/src/utils/test_data.d.ts +0 -11
- package/dist/src/utils/test_data.js +31 -40
- package/dist/src/utils/test_data.js.map +1 -1
- package/dist/src/utils/xmlToJson.js +16 -14
- package/dist/src/utils/xmlToJson.js.map +1 -1
- package/index.ts +23 -24
- package/package.json +4 -2
- package/src/helpers/api-helpers.ts +38 -58
- package/src/helpers/ui-helpers.ts +144 -181
- package/src/utils/api_axios.ts +16 -19
- package/src/utils/azure_storage_methods.ts +171 -102
- package/src/utils/comparisions.ts +99 -72
- package/src/utils/date_utilitites.ts +39 -66
- package/src/utils/document_utility.ts +81 -103
- package/src/utils/email_sender.ts +36 -41
- package/src/utils/keyvault_methods.ts +15 -16
- package/src/utils/lighhouse_utility.ts +123 -109
- package/src/utils/test_data.ts +121 -138
- package/src/utils/xmlToJson.ts +41 -39
- package/tsconfig.json +1 -1
package/.prettierrc
ADDED
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { UIHelper } from
|
|
2
|
-
import { ApiHelper } from
|
|
3
|
-
import { TokenGenerators } from
|
|
4
|
-
import { AzureStorageMethods } from
|
|
5
|
-
import { Comparisions } from
|
|
6
|
-
import { DocumentUtility } from
|
|
7
|
-
import { KeyVaultMethods } from
|
|
8
|
-
import { TestData } from
|
|
9
|
-
import { XmlToJson } from
|
|
10
|
-
import { LightHouseUtility } from
|
|
11
|
-
|
|
12
|
-
export { UIHelper, ApiHelper, TokenGenerators, AzureStorageMethods, Comparisions, DocumentUtility, KeyVaultMethods, TestData, XmlToJson, LightHouseUtility, Dateutility };
|
|
1
|
+
import { UIHelper } from './src/helpers/ui-helpers';
|
|
2
|
+
import { ApiHelper } from './src/helpers/api-helpers';
|
|
3
|
+
import { TokenGenerators } from './src/utils/api_axios';
|
|
4
|
+
import { AzureStorageMethods } from './src/utils/azure_storage_methods';
|
|
5
|
+
import { Comparisions } from './src/utils/comparisions';
|
|
6
|
+
import { DocumentUtility } from './src/utils/document_utility';
|
|
7
|
+
import { KeyVaultMethods } from './src/utils/keyvault_methods';
|
|
8
|
+
import { TestData } from './src/utils/test_data';
|
|
9
|
+
import { XmlToJson } from './src/utils/xmlToJson';
|
|
10
|
+
import { LightHouseUtility } from './src/utils/lighhouse_utility';
|
|
11
|
+
export { UIHelper, ApiHelper, TokenGenerators, AzureStorageMethods, Comparisions, DocumentUtility, KeyVaultMethods, TestData, XmlToJson, LightHouseUtility, };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.LightHouseUtility = exports.XmlToJson = exports.TestData = exports.KeyVaultMethods = exports.DocumentUtility = exports.Comparisions = exports.AzureStorageMethods = exports.TokenGenerators = exports.ApiHelper = exports.UIHelper = void 0;
|
|
4
4
|
const ui_helpers_1 = require("./src/helpers/ui-helpers");
|
|
5
5
|
Object.defineProperty(exports, "UIHelper", { enumerable: true, get: function () { return ui_helpers_1.UIHelper; } });
|
|
6
6
|
const api_helpers_1 = require("./src/helpers/api-helpers");
|
|
@@ -11,8 +11,8 @@ const azure_storage_methods_1 = require("./src/utils/azure_storage_methods");
|
|
|
11
11
|
Object.defineProperty(exports, "AzureStorageMethods", { enumerable: true, get: function () { return azure_storage_methods_1.AzureStorageMethods; } });
|
|
12
12
|
const comparisions_1 = require("./src/utils/comparisions");
|
|
13
13
|
Object.defineProperty(exports, "Comparisions", { enumerable: true, get: function () { return comparisions_1.Comparisions; } });
|
|
14
|
-
const
|
|
15
|
-
Object.defineProperty(exports, "DocumentUtility", { enumerable: true, get: function () { return
|
|
14
|
+
const document_utility_1 = require("./src/utils/document_utility");
|
|
15
|
+
Object.defineProperty(exports, "DocumentUtility", { enumerable: true, get: function () { return document_utility_1.DocumentUtility; } });
|
|
16
16
|
const keyvault_methods_1 = require("./src/utils/keyvault_methods");
|
|
17
17
|
Object.defineProperty(exports, "KeyVaultMethods", { enumerable: true, get: function () { return keyvault_methods_1.KeyVaultMethods; } });
|
|
18
18
|
const test_data_1 = require("./src/utils/test_data");
|
|
@@ -21,6 +21,4 @@ const xmlToJson_1 = require("./src/utils/xmlToJson");
|
|
|
21
21
|
Object.defineProperty(exports, "XmlToJson", { enumerable: true, get: function () { return xmlToJson_1.XmlToJson; } });
|
|
22
22
|
const lighhouse_utility_1 = require("./src/utils/lighhouse_utility");
|
|
23
23
|
Object.defineProperty(exports, "LightHouseUtility", { enumerable: true, get: function () { return lighhouse_utility_1.LightHouseUtility; } });
|
|
24
|
-
const date_utilitites_1 = require("./src/utils/date_utilitites");
|
|
25
|
-
Object.defineProperty(exports, "Dateutility", { enumerable: true, get: function () { return date_utilitites_1.Dateutility; } });
|
|
26
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAYhD,yFAZK,qBAAQ,OAYL;AAXZ,2DAAsD;AAYlD,0FAZK,uBAAS,OAYL;AAXb,qDAAwD;AAYpD,gGAZK,2BAAe,OAYL;AAXnB,6EAAwE;AAYpE,oGAZK,2CAAmB,OAYL;AAXvB,2DAAwD;AAYpD,6FAZK,2BAAY,OAYL;AAXhB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAYhD,yFAZK,qBAAQ,OAYL;AAXZ,2DAAsD;AAYlD,0FAZK,uBAAS,OAYL;AAXb,qDAAwD;AAYpD,gGAZK,2BAAe,OAYL;AAXnB,6EAAwE;AAYpE,oGAZK,2CAAmB,OAYL;AAXvB,2DAAwD;AAYpD,6FAZK,2BAAY,OAYL;AAXhB,mEAA+D;AAY3D,gGAZK,kCAAe,OAYL;AAXnB,mEAA+D;AAY3D,gGAZK,kCAAe,OAYL;AAXnB,qDAAiD;AAY7C,yFAZK,oBAAQ,OAYL;AAXZ,qDAAkD;AAY9C,0FAZK,qBAAS,OAYL;AAXb,qEAAkE;AAY9D,kGAZK,qCAAiB,OAYL"}
|
|
@@ -1,25 +1,5 @@
|
|
|
1
1
|
export declare class ApiHelper {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @param {string} header - header contains authentication keys, application type etc..
|
|
6
|
-
* @param {string} payload - payload data
|
|
7
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
8
|
-
*/
|
|
9
|
-
static post(apiEndPoint: any, header: any, payload: any): Promise<any>;
|
|
10
|
-
/**
|
|
11
|
-
* @description: Get call with endpoint and headers.
|
|
12
|
-
* @param {string} apiEndPoint - API end point.
|
|
13
|
-
* @param {string} header - header contains authentication keys, application type etc..
|
|
14
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
15
|
-
*/
|
|
16
|
-
static get(apiEndPoint: any, header: any): Promise<any>;
|
|
17
|
-
/**
|
|
18
|
-
* @description: Put call with endpoint, headers and data and it will insert the data.
|
|
19
|
-
* @param {string} apiEndPoint - API end point.
|
|
20
|
-
* @param {string} header - headers contains authentication keys, application type etc..
|
|
21
|
-
* @param {string} payload - payload data
|
|
22
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
23
|
-
*/
|
|
24
|
-
static put(apiEndPoint: any, header: any, payload: any): Promise<any>;
|
|
2
|
+
static post(url: any, header: any, payload: any): Promise<any>;
|
|
3
|
+
static get(url: any, header: any): Promise<any>;
|
|
4
|
+
static put(url: any, header: any, payload: any): Promise<any>;
|
|
25
5
|
}
|
|
@@ -12,58 +12,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ApiHelper = void 0;
|
|
13
13
|
const api_axios_1 = require("../utils/api_axios");
|
|
14
14
|
class ApiHelper {
|
|
15
|
-
|
|
16
|
-
* @description: Post call with endpoint, headers and data.
|
|
17
|
-
* @param {string} apiEndPoint - API end point.
|
|
18
|
-
* @param {string} header - header contains authentication keys, application type etc..
|
|
19
|
-
* @param {string} payload - payload data
|
|
20
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
21
|
-
*/
|
|
22
|
-
static post(apiEndPoint, header, payload) {
|
|
15
|
+
static post(url, header, payload) {
|
|
23
16
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
|
|
17
|
+
const config = {
|
|
25
18
|
method: 'post',
|
|
26
|
-
url:
|
|
19
|
+
url: url,
|
|
27
20
|
headers: header,
|
|
28
|
-
data: payload
|
|
21
|
+
data: payload,
|
|
29
22
|
};
|
|
30
|
-
|
|
23
|
+
const response = yield api_axios_1.TokenGenerators.request(config);
|
|
31
24
|
return response;
|
|
32
25
|
});
|
|
33
26
|
}
|
|
34
|
-
|
|
35
|
-
* @description: Get call with endpoint and headers.
|
|
36
|
-
* @param {string} apiEndPoint - API end point.
|
|
37
|
-
* @param {string} header - header contains authentication keys, application type etc..
|
|
38
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
39
|
-
*/
|
|
40
|
-
static get(apiEndPoint, header) {
|
|
27
|
+
static get(url, header) {
|
|
41
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
|
|
29
|
+
const config = {
|
|
43
30
|
method: 'GET',
|
|
44
|
-
url:
|
|
45
|
-
headers: header
|
|
31
|
+
url: url,
|
|
32
|
+
headers: header,
|
|
46
33
|
};
|
|
47
|
-
|
|
34
|
+
const response = yield api_axios_1.TokenGenerators.request(config);
|
|
48
35
|
return response;
|
|
49
36
|
});
|
|
50
37
|
}
|
|
51
|
-
|
|
52
|
-
* @description: Put call with endpoint, headers and data and it will insert the data.
|
|
53
|
-
* @param {string} apiEndPoint - API end point.
|
|
54
|
-
* @param {string} header - headers contains authentication keys, application type etc..
|
|
55
|
-
* @param {string} payload - payload data
|
|
56
|
-
* @returns {Promise<reponse>} - returns Promise of reponse
|
|
57
|
-
*/
|
|
58
|
-
static put(apiEndPoint, header, payload) {
|
|
38
|
+
static put(url, header, payload) {
|
|
59
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
|
|
40
|
+
const config = {
|
|
61
41
|
method: 'put',
|
|
62
|
-
url:
|
|
42
|
+
url: url,
|
|
63
43
|
headers: header,
|
|
64
|
-
data: payload
|
|
44
|
+
data: payload,
|
|
65
45
|
};
|
|
66
|
-
|
|
46
|
+
const response = yield api_axios_1.TokenGenerators.request(config);
|
|
67
47
|
return response;
|
|
68
48
|
});
|
|
69
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-helpers.js","sourceRoot":"","sources":["../../../src/helpers/api-helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAqD;AAErD,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"api-helpers.js","sourceRoot":"","sources":["../../../src/helpers/api-helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAqD;AAErD,MAAa,SAAS;IAClB,MAAM,CAAO,IAAI,CAAC,GAAQ,EAAE,MAAW,EAAE,OAAY;;YACjD,MAAM,MAAM,GAAG;gBACX,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,OAAO;aAChB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,2BAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC;QACpB,CAAC;KAAA;IAED,MAAM,CAAO,GAAG,CAAC,GAAQ,EAAE,MAAW;;YAClC,MAAM,MAAM,GAAG;gBACX,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,MAAM;aAClB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,2BAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC;QACpB,CAAC;KAAA;IAED,MAAM,CAAO,GAAG,CAAC,GAAQ,EAAE,MAAW,EAAE,OAAY;;YAChD,MAAM,MAAM,GAAG;gBACX,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,OAAO;aAChB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,2BAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC;QACpB,CAAC;KAAA;CACJ;AAnCD,8BAmCC"}
|
|
@@ -1,89 +1,23 @@
|
|
|
1
|
+
import { BrowserContext, Page } from 'playwright';
|
|
1
2
|
export declare class UIHelper {
|
|
2
3
|
page: any;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
9
|
-
*/
|
|
4
|
+
browser: BrowserContext;
|
|
5
|
+
constructor(page: Page);
|
|
6
|
+
launchNonIncognito(chromePath: string): Promise<void>;
|
|
7
|
+
closeNonIncognito(): Promise<void>;
|
|
8
|
+
combineAllCookies(cookieJson: any): string;
|
|
10
9
|
filltheData(locator: any, data: any): Promise<void>;
|
|
11
|
-
/**
|
|
12
|
-
* @description: click the given locator element.
|
|
13
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
14
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
15
|
-
*/
|
|
16
10
|
clickonWebElement(locator: any): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* @description: returns inner html of locator element.
|
|
19
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
20
|
-
* @returns {string} - returns inner html string
|
|
21
|
-
*/
|
|
22
11
|
getInnerHTML(locator: any): Promise<any>;
|
|
23
|
-
/**
|
|
24
|
-
* @description: returns inner text of locator element.
|
|
25
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
26
|
-
* @returns {string} - returns inner text string
|
|
27
|
-
*/
|
|
28
12
|
getInnerText(locator: any): Promise<any>;
|
|
29
|
-
/**
|
|
30
|
-
* @description: returns text of locator element.
|
|
31
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
32
|
-
* @returns {string} - returns text string
|
|
33
|
-
*/
|
|
34
13
|
getText(locator: any): Promise<any>;
|
|
35
|
-
/**
|
|
36
|
-
* @description: returns given attribute value of locator element.
|
|
37
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
38
|
-
* @param {string} attribute - html attribute to get value
|
|
39
|
-
* @returns {string} - returns text string
|
|
40
|
-
*/
|
|
41
14
|
getAttribute(locator: any, attribute: any): Promise<any>;
|
|
42
15
|
evaluateJS(jsDOM: any): Promise<any>;
|
|
43
|
-
/**
|
|
44
|
-
* @description: verifies given locator element is displayed or not.
|
|
45
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
46
|
-
* @returns {boolean} - returns true/false
|
|
47
|
-
*/
|
|
48
16
|
isElementPresent(locator: any): Promise<any>;
|
|
49
|
-
/**
|
|
50
|
-
* @description: verifies given locator element is enabled or not.
|
|
51
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
52
|
-
* @returns {boolean} - returns true/false
|
|
53
|
-
*/
|
|
54
17
|
isElementEnabled(locator: any): Promise<any>;
|
|
55
|
-
/**
|
|
56
|
-
* @description: waits until locator element visibles.
|
|
57
|
-
* @param {elementReference} elementSelector - element reference.
|
|
58
|
-
* @param {number} wait time
|
|
59
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
60
|
-
*/
|
|
61
18
|
waitTillElementIsVisible(elementSelector: any, waitTime?: number): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* @description: returns value of inputbox.
|
|
64
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
65
|
-
* @returns {string} - returns text string
|
|
66
|
-
*/
|
|
67
19
|
getInputBoxValue(locator: any): Promise<any>;
|
|
68
|
-
/**
|
|
69
|
-
* @description: wait untill download process completes and save file with custom name.
|
|
70
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
71
|
-
* @param {string} filePath - Complete path of the excel file, example: C:/resources/****.xlsx.
|
|
72
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
73
|
-
*/
|
|
74
20
|
downloadAFile(downloadButton: String, filePath: string): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* @description: wait untill upload process completes and save file with custom name.
|
|
77
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
78
|
-
* @param {string} filePath - Complete path of the excel file, example: C:/resources/****.xlsx.
|
|
79
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
80
|
-
*/
|
|
81
21
|
uploadAFile(uploadButton: String, uploadFilePath: String): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* @description: will perform click action.
|
|
84
|
-
* @param {string} roleType - example: "alert"|"alertdialog"|"application"|"article"|"banner"|"blockquote"|"button"|"caption"|"cell"|"checkbox"|"code"|"columnheader"|"combobox"|"complementary"|"contentinfo"|"definition"|"deletion"|"dialog"|"directory"|"document"|"emphasis"|"feed"|"figure"|"form"|"generic"|"grid"|"gridcell"|"group"|"heading"|"img"|"insertion"|"link"|"list"|"listbox"|"listitem"|"log"|"main"|"marquee"|"math"|"meter"|"menu"|"menubar"|"menuitem"|"menuitemcheckbox"|"menuitemradio"|"navigation"|"none"|"note"|"option"|"paragraph"|"presentation"|"progressbar"|"radio"|"radiogroup"|"region"|"row"|"rowgroup"|"rowheader"|"scrollbar"|"search"|"searchbox"|"separator"|"slider"|"spinbutton"|"status"|"strong"|"subscript"|"superscript"|"switch"|"tab"|"table"|"tablist"|"tabpanel"|"term"|"textbox"|"time"|"timer"|"toolbar"|"tooltip"|"tree"|"treegrid"|"treeitem".
|
|
85
|
-
* @param {string} roleName - name of the element.
|
|
86
|
-
* @returns {Promise<locator>} - returns Promise of void
|
|
87
|
-
*/
|
|
88
22
|
getElementRefByRole(roleType: string, roleName: string): Promise<any>;
|
|
89
23
|
}
|
|
@@ -10,20 +10,45 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.UIHelper = void 0;
|
|
13
|
+
//import robot from "robotjs";
|
|
14
|
+
const playwright_1 = require("playwright");
|
|
13
15
|
class UIHelper {
|
|
14
16
|
constructor(page) {
|
|
15
17
|
this.page = page;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
}
|
|
19
|
+
/* chromePath should be something like below
|
|
20
|
+
<UserDirectory>/AppData/Local/Google/Chrome/User Data
|
|
21
|
+
*/
|
|
22
|
+
launchNonIncognito(chromePath) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
// Launch non-incognito session using provided chromePath
|
|
25
|
+
this.browser = yield playwright_1.chromium.launchPersistentContext(chromePath, {
|
|
26
|
+
headless: false,
|
|
27
|
+
});
|
|
28
|
+
this.page = yield this.browser.newPage();
|
|
29
|
+
this.browser.clearCookies();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// Close All the windows opened for non-incognito session
|
|
33
|
+
closeNonIncognito() {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
this.browser.clearCookies();
|
|
36
|
+
const allPages = this.browser.pages();
|
|
37
|
+
allPages.forEach((element) => {
|
|
38
|
+
element.close();
|
|
39
|
+
});
|
|
19
40
|
});
|
|
20
41
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
//Combines given list of cookies and generates a single cookie for passing in API as header
|
|
43
|
+
combineAllCookies(cookieJson) {
|
|
44
|
+
let Finalcookie = '';
|
|
45
|
+
for (let val of cookieJson) {
|
|
46
|
+
Finalcookie += val.name + '=' + val.value + ';';
|
|
47
|
+
}
|
|
48
|
+
console.log('\n----------------> Final Cookie Generated ---------------->\n');
|
|
49
|
+
Finalcookie = Finalcookie.toString().slice(0, -1);
|
|
50
|
+
return Finalcookie.toString();
|
|
51
|
+
}
|
|
27
52
|
filltheData(locator, data) {
|
|
28
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29
54
|
if (data) {
|
|
@@ -33,11 +58,6 @@ class UIHelper {
|
|
|
33
58
|
}
|
|
34
59
|
});
|
|
35
60
|
}
|
|
36
|
-
/**
|
|
37
|
-
* @description: click the given locator element.
|
|
38
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
39
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
40
|
-
*/
|
|
41
61
|
clickonWebElement(locator) {
|
|
42
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
63
|
yield this.page.locator(locator).scrollIntoViewIfNeeded();
|
|
@@ -45,11 +65,6 @@ class UIHelper {
|
|
|
45
65
|
yield this.page.locator(locator).click();
|
|
46
66
|
});
|
|
47
67
|
}
|
|
48
|
-
/**
|
|
49
|
-
* @description: returns inner html of locator element.
|
|
50
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
51
|
-
* @returns {string} - returns inner html string
|
|
52
|
-
*/
|
|
53
68
|
getInnerHTML(locator) {
|
|
54
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
70
|
yield this.waitTillElementIsVisible(locator);
|
|
@@ -57,11 +72,6 @@ class UIHelper {
|
|
|
57
72
|
return yield this.page.innerHTML(locator);
|
|
58
73
|
});
|
|
59
74
|
}
|
|
60
|
-
/**
|
|
61
|
-
* @description: returns inner text of locator element.
|
|
62
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
63
|
-
* @returns {string} - returns inner text string
|
|
64
|
-
*/
|
|
65
75
|
getInnerText(locator) {
|
|
66
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
77
|
yield this.waitTillElementIsVisible(locator);
|
|
@@ -69,11 +79,6 @@ class UIHelper {
|
|
|
69
79
|
return yield this.page.locator(locator).innerText().trim();
|
|
70
80
|
});
|
|
71
81
|
}
|
|
72
|
-
/**
|
|
73
|
-
* @description: returns text of locator element.
|
|
74
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
75
|
-
* @returns {string} - returns text string
|
|
76
|
-
*/
|
|
77
82
|
getText(locator) {
|
|
78
83
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
84
|
yield this.waitTillElementIsVisible(locator);
|
|
@@ -81,12 +86,6 @@ class UIHelper {
|
|
|
81
86
|
return yield this.page.locator(locator).textContent();
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
|
-
/**
|
|
85
|
-
* @description: returns given attribute value of locator element.
|
|
86
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
87
|
-
* @param {string} attribute - html attribute to get value
|
|
88
|
-
* @returns {string} - returns text string
|
|
89
|
-
*/
|
|
90
89
|
getAttribute(locator, attribute) {
|
|
91
90
|
return __awaiter(this, void 0, void 0, function* () {
|
|
92
91
|
yield this.waitTillElementIsVisible(locator);
|
|
@@ -99,53 +98,35 @@ class UIHelper {
|
|
|
99
98
|
return yield this.page.evaluate(jsDOM);
|
|
100
99
|
});
|
|
101
100
|
}
|
|
102
|
-
/**
|
|
103
|
-
* @description: verifies given locator element is displayed or not.
|
|
104
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
105
|
-
* @returns {boolean} - returns true/false
|
|
106
|
-
*/
|
|
107
101
|
isElementPresent(locator) {
|
|
108
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
103
|
// console.log(typeof locator.toString());
|
|
110
104
|
let type = typeof locator;
|
|
111
|
-
if (type ===
|
|
105
|
+
if (type === 'string') {
|
|
112
106
|
yield this.page.locator(locator).scrollIntoViewIfNeeded();
|
|
113
107
|
return yield this.page.locator(locator).isVisible();
|
|
114
108
|
}
|
|
115
|
-
else if (type ===
|
|
109
|
+
else if (type === 'object') {
|
|
116
110
|
return yield locator.isVisible();
|
|
117
111
|
}
|
|
118
112
|
console.log(type);
|
|
119
113
|
console.log(type.toString());
|
|
120
114
|
});
|
|
121
115
|
}
|
|
122
|
-
/**
|
|
123
|
-
* @description: verifies given locator element is enabled or not.
|
|
124
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
125
|
-
* @returns {boolean} - returns true/false
|
|
126
|
-
*/
|
|
127
116
|
isElementEnabled(locator) {
|
|
128
117
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
118
|
yield this.page.locator(locator).scrollIntoViewIfNeeded();
|
|
130
119
|
return yield this.page.locator(locator).isEnabled();
|
|
131
120
|
});
|
|
132
121
|
}
|
|
133
|
-
/**
|
|
134
|
-
* @description: waits until locator element visibles.
|
|
135
|
-
* @param {elementReference} elementSelector - element reference.
|
|
136
|
-
* @param {number} wait time
|
|
137
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
138
|
-
*/
|
|
139
122
|
waitTillElementIsVisible(elementSelector, waitTime = 60000) {
|
|
140
123
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
yield this.page.waitForSelector(elementSelector, {
|
|
124
|
+
yield this.page.waitForSelector(elementSelector, {
|
|
125
|
+
waitFor: 'visible',
|
|
126
|
+
timeout: waitTime,
|
|
127
|
+
});
|
|
142
128
|
});
|
|
143
129
|
}
|
|
144
|
-
/**
|
|
145
|
-
* @description: returns value of inputbox.
|
|
146
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
147
|
-
* @returns {string} - returns text string
|
|
148
|
-
*/
|
|
149
130
|
getInputBoxValue(locator) {
|
|
150
131
|
return __awaiter(this, void 0, void 0, function* () {
|
|
151
132
|
yield this.waitTillElementIsVisible(locator);
|
|
@@ -158,28 +139,16 @@ class UIHelper {
|
|
|
158
139
|
// robot.moveMouse(400, 20);
|
|
159
140
|
// robot.keyTap("enter");
|
|
160
141
|
// }
|
|
161
|
-
/**
|
|
162
|
-
* @description: wait untill download process completes and save file with custom name.
|
|
163
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
164
|
-
* @param {string} filePath - Complete path of the excel file, example: C:/resources/****.xlsx.
|
|
165
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
166
|
-
*/
|
|
167
142
|
downloadAFile(downloadButton, filePath) {
|
|
168
143
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
144
|
const downloadPromise = this.page.waitForEvent('download');
|
|
170
145
|
yield this.clickonWebElement(downloadButton);
|
|
171
146
|
const download = yield downloadPromise;
|
|
172
147
|
// Wait for the download process to complete
|
|
173
|
-
console.log(
|
|
148
|
+
console.log('download', yield download.path());
|
|
174
149
|
yield download.saveAs(filePath);
|
|
175
150
|
});
|
|
176
151
|
}
|
|
177
|
-
/**
|
|
178
|
-
* @description: wait untill upload process completes and save file with custom name.
|
|
179
|
-
* @param {string} locator - css selector/xpath of the element.
|
|
180
|
-
* @param {string} filePath - Complete path of the excel file, example: C:/resources/****.xlsx.
|
|
181
|
-
* @returns {Promise<void>} - returns Promise of void
|
|
182
|
-
*/
|
|
183
152
|
uploadAFile(uploadButton, uploadFilePath) {
|
|
184
153
|
return __awaiter(this, void 0, void 0, function* () {
|
|
185
154
|
const fileChooserPromise = this.page.waitForEvent('filechooser');
|
|
@@ -188,12 +157,6 @@ class UIHelper {
|
|
|
188
157
|
yield fileChooser.setFiles(uploadFilePath);
|
|
189
158
|
});
|
|
190
159
|
}
|
|
191
|
-
/**
|
|
192
|
-
* @description: will perform click action.
|
|
193
|
-
* @param {string} roleType - example: "alert"|"alertdialog"|"application"|"article"|"banner"|"blockquote"|"button"|"caption"|"cell"|"checkbox"|"code"|"columnheader"|"combobox"|"complementary"|"contentinfo"|"definition"|"deletion"|"dialog"|"directory"|"document"|"emphasis"|"feed"|"figure"|"form"|"generic"|"grid"|"gridcell"|"group"|"heading"|"img"|"insertion"|"link"|"list"|"listbox"|"listitem"|"log"|"main"|"marquee"|"math"|"meter"|"menu"|"menubar"|"menuitem"|"menuitemcheckbox"|"menuitemradio"|"navigation"|"none"|"note"|"option"|"paragraph"|"presentation"|"progressbar"|"radio"|"radiogroup"|"region"|"row"|"rowgroup"|"rowheader"|"scrollbar"|"search"|"searchbox"|"separator"|"slider"|"spinbutton"|"status"|"strong"|"subscript"|"superscript"|"switch"|"tab"|"table"|"tablist"|"tabpanel"|"term"|"textbox"|"time"|"timer"|"toolbar"|"tooltip"|"tree"|"treegrid"|"treeitem".
|
|
194
|
-
* @param {string} roleName - name of the element.
|
|
195
|
-
* @returns {Promise<locator>} - returns Promise of void
|
|
196
|
-
*/
|
|
197
160
|
getElementRefByRole(roleType, roleName) {
|
|
198
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
199
162
|
return this.page.getByRole(roleType, { name: roleName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-helpers.js","sourceRoot":"","sources":["../../../src/helpers/ui-helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ui-helpers.js","sourceRoot":"","sources":["../../../src/helpers/ui-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ class TokenGenerators {
|
|
|
22
22
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
23
|
try {
|
|
24
24
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
25
|
-
|
|
25
|
+
const response = yield (0, axios_1.default)(config);
|
|
26
26
|
return response;
|
|
27
27
|
}
|
|
28
28
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_axios.js","sourceRoot":"","sources":["../../../src/utils/api_axios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAAkD;AAElD,MAAa,eAAe;IACxB,MAAM,CAAC,2BAA2B;QAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAO,OAAO,CAAC,MAA+B;;YAChD,IAAI;gBACA,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,GAAG,CAAC;gBAC/C,
|
|
1
|
+
{"version":3,"file":"api_axios.js","sourceRoot":"","sources":["../../../src/utils/api_axios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAAkD;AAElD,MAAa,eAAe;IACxB,MAAM,CAAC,2BAA2B;QAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,CAAO,OAAO,CAAC,MAA+B;;YAChD,IAAI;gBACA,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,GAAG,CAAC;gBAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,CAAC,CAAC;gBACrC,OAAO,QAAQ,CAAC;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,KAAK,CAAC,QAAQ,CAAC;aACzB;QACL,CAAC;KAAA;CACJ;AAbD,0CAaC"}
|