@sap_oss/wdio-qmate-service 1.0.0 → 1.0.2

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 (144) hide show
  1. package/README.md +2 -1
  2. package/{test/core/package-lock.json → docs/bestPractices/spec.md} +0 -0
  3. package/docs/doc.md +176 -353
  4. package/docs/gettingStarted/setup.md +2 -2
  5. package/docs/index.md +1 -1
  6. package/docs/sections/bestPractices/authentication.md +151 -0
  7. package/docs/sections/bestPractices/dataHandling.md +61 -0
  8. package/docs/sections/bestPractices/selectors.md +44 -0
  9. package/docs/{contact.md → sections/contact.md} +0 -0
  10. package/docs/sections/features/advancedDataHandling.md +252 -0
  11. package/docs/sections/features/config.md +171 -0
  12. package/docs/sections/features/dataHandling.md +83 -0
  13. package/docs/{gettingStarted → sections/features}/selectors.md +0 -0
  14. package/docs/sections/features/spec.md +0 -0
  15. package/docs/sections/gettingStarted/config.md +18 -0
  16. package/docs/sections/gettingStarted/execution.md +7 -0
  17. package/docs/sections/gettingStarted/setup.md +9 -0
  18. package/docs/sections/gettingStarted/spec.md +31 -0
  19. package/docs/sections/gettingStarted/specs.md +19 -0
  20. package/docs/sections/support/bugReporting.md +19 -0
  21. package/docs/sections/support/knownIssuesAndLimitations.md +0 -0
  22. package/docs/sections/support/troubleshooting.md +16 -0
  23. package/docs/sources/images/fiori_form.PNG +0 -0
  24. package/docs/sources/images/sapCloud_form.PNG +0 -0
  25. package/lib/index.js +59 -82
  26. package/lib/index.js.map +1 -1
  27. package/lib/reuse/authenticator/authHandler.js +12 -23
  28. package/lib/reuse/authenticator/authHandler.js.map +1 -1
  29. package/lib/reuse/authenticator/basicUrlAuthenticator.js +21 -32
  30. package/lib/reuse/authenticator/basicUrlAuthenticator.js.map +1 -1
  31. package/lib/reuse/authenticator/customAuthenticator.js +42 -55
  32. package/lib/reuse/authenticator/customAuthenticator.js.map +1 -1
  33. package/lib/reuse/authenticator/formAuthenticator.js +37 -50
  34. package/lib/reuse/authenticator/formAuthenticator.js.map +1 -1
  35. package/lib/reuse/authenticator/plainAuthenticator.js +5 -16
  36. package/lib/reuse/authenticator/plainAuthenticator.js.map +1 -1
  37. package/lib/reuse/helper/jsDocGen.js +4 -12
  38. package/lib/reuse/helper/jsDocGen.js.map +1 -1
  39. package/lib/reuse/index.js +20 -5
  40. package/lib/reuse/index.js.map +1 -1
  41. package/lib/reuse/modules/common/navigation.js +10 -23
  42. package/lib/reuse/modules/common/navigation.js.map +1 -1
  43. package/lib/reuse/modules/common/userInteraction.js +40 -73
  44. package/lib/reuse/modules/common/userInteraction.js.map +1 -1
  45. package/lib/reuse/modules/nonUi5/assertion.js +31 -52
  46. package/lib/reuse/modules/nonUi5/assertion.js.map +1 -1
  47. package/lib/reuse/modules/nonUi5/element.js +266 -331
  48. package/lib/reuse/modules/nonUi5/element.js.map +1 -1
  49. package/lib/reuse/modules/nonUi5/navigation.js +10 -21
  50. package/lib/reuse/modules/nonUi5/navigation.js.map +1 -1
  51. package/lib/reuse/modules/nonUi5/userInteraction.js +176 -215
  52. package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -1
  53. package/lib/reuse/modules/service/odata.d.ts +106 -94
  54. package/lib/reuse/modules/service/odata.js +209 -204
  55. package/lib/reuse/modules/service/odata.js.map +1 -1
  56. package/lib/reuse/modules/service/rest.js +64 -81
  57. package/lib/reuse/modules/service/rest.js.map +1 -1
  58. package/lib/reuse/modules/ui5/assertion.js +217 -268
  59. package/lib/reuse/modules/ui5/assertion.js.map +1 -1
  60. package/lib/reuse/modules/ui5/confirmationDialog.js +17 -42
  61. package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -1
  62. package/lib/reuse/modules/ui5/control.js +12 -33
  63. package/lib/reuse/modules/ui5/control.js.map +1 -1
  64. package/lib/reuse/modules/ui5/date.js +70 -89
  65. package/lib/reuse/modules/ui5/date.js.map +1 -1
  66. package/lib/reuse/modules/ui5/element.js +121 -156
  67. package/lib/reuse/modules/ui5/element.js.map +1 -1
  68. package/lib/reuse/modules/ui5/errorDialog.js +4 -17
  69. package/lib/reuse/modules/ui5/errorDialog.js.map +1 -1
  70. package/lib/reuse/modules/ui5/footerBar.js +28 -63
  71. package/lib/reuse/modules/ui5/footerBar.js.map +1 -1
  72. package/lib/reuse/modules/ui5/mockserver.js +390 -427
  73. package/lib/reuse/modules/ui5/mockserver.js.map +1 -1
  74. package/lib/reuse/modules/ui5/navigation.js +105 -132
  75. package/lib/reuse/modules/ui5/navigation.js.map +1 -1
  76. package/lib/reuse/modules/ui5/navigationBar.js +58 -77
  77. package/lib/reuse/modules/ui5/navigationBar.js.map +1 -1
  78. package/lib/reuse/modules/ui5/qunit.js +16 -27
  79. package/lib/reuse/modules/ui5/qunit.js.map +1 -1
  80. package/lib/reuse/modules/ui5/session.js +200 -236
  81. package/lib/reuse/modules/ui5/session.js.map +1 -1
  82. package/lib/reuse/modules/ui5/table.js +79 -98
  83. package/lib/reuse/modules/ui5/table.js.map +1 -1
  84. package/lib/reuse/modules/ui5/userInteraction.js +264 -335
  85. package/lib/reuse/modules/ui5/userInteraction.js.map +1 -1
  86. package/lib/reuse/modules/util/browser.js +131 -178
  87. package/lib/reuse/modules/util/browser.js.map +1 -1
  88. package/lib/reuse/modules/util/data.js +3 -2
  89. package/lib/reuse/modules/util/data.js.map +1 -1
  90. package/lib/reuse/modules/util/file.js +71 -90
  91. package/lib/reuse/modules/util/file.js.map +1 -1
  92. package/lib/reuse/modules/util/function.js +68 -87
  93. package/lib/reuse/modules/util/function.js.map +1 -1
  94. package/lib/reuse/modules/util/system.js +22 -33
  95. package/lib/reuse/modules/util/system.js.map +1 -1
  96. package/lib/scripts/dataExchange/dataExchange.js +145 -160
  97. package/lib/scripts/dataExchange/dataExchange.js.map +1 -1
  98. package/lib/scripts/dataExchange/dataExchangeUtil.js +93 -114
  99. package/lib/scripts/dataExchange/dataExchangeUtil.js.map +1 -1
  100. package/lib/scripts/hooks/after.js +3 -14
  101. package/lib/scripts/hooks/after.js.map +1 -1
  102. package/lib/scripts/hooks/before.js +9 -20
  103. package/lib/scripts/hooks/before.js.map +1 -1
  104. package/lib/scripts/hooks/beforeSession.js +7 -18
  105. package/lib/scripts/hooks/beforeSession.js.map +1 -1
  106. package/lib/scripts/hooks/onComplete.js +2 -13
  107. package/lib/scripts/hooks/onComplete.js.map +1 -1
  108. package/lib/scripts/hooks/onPrepare.js +9 -20
  109. package/lib/scripts/hooks/onPrepare.js.map +1 -1
  110. package/lib/scripts/hooks/utils/addLocatorCommands.js +109 -172
  111. package/lib/scripts/hooks/utils/addLocatorCommands.js.map +1 -1
  112. package/lib/scripts/hooks/utils/browserLog.js +18 -31
  113. package/lib/scripts/hooks/utils/browserLog.js.map +1 -1
  114. package/lib/scripts/hooks/utils/dataExchangeCommands.js +13 -24
  115. package/lib/scripts/hooks/utils/dataExchangeCommands.js.map +1 -1
  116. package/lib/scripts/hooks/utils/decryption.d.ts +1 -1
  117. package/lib/scripts/hooks/utils/decryption.js +33 -14
  118. package/lib/scripts/hooks/utils/decryption.js.map +1 -1
  119. package/lib/scripts/hooks/utils/lib.js +249 -272
  120. package/lib/scripts/hooks/utils/lib.js.map +1 -1
  121. package/lib/scripts/hooks/utils/locatorCommands.js +154 -183
  122. package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -1
  123. package/mkdocs.yml +16 -3
  124. package/package.json +14 -11
  125. package/test/authenticator/staticLogin/specs/custom.spec.js +30 -1
  126. package/test/reuse/nonUi5/element/getById.spec.js +17 -0
  127. package/test/reuse/service/odata/get.spec.js +61 -0
  128. package/test/reuse/service/odata/getEntitySet.spec.js +87 -0
  129. package/test/reuse/service/odata/test.odata.conf.js +15 -0
  130. package/test/reuse/ui5/confirmationDialog/clickButton.spec.js +87 -0
  131. package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.conf.js +2 -1
  132. package/test/reuse/ui5/element/test.element.conf.js +2 -1
  133. package/test/reuse/ui5/element/waitForAll.spec.js +46 -0
  134. package/test/reuse/ui5/userInteraction/clearAndFillSmartFieldInputAndRetry.spec.js +28 -0
  135. package/test/reuse/ui5/userInteraction/test.userInteraction.conf.js +1 -0
  136. package/test/reuse/util/browser/switchToNewWindow.spec.js +2 -2
  137. package/test/reuse/util/console/console.spec.js +27 -0
  138. package/test/reuse/util/console/test.console.conf.js +12 -0
  139. package/test/reuse/util/data/data/test.secure.json +7 -3
  140. package/test/reuse/util/data/getSecureData.spec.js +9 -3
  141. package/test/reuse/util/file/pdfParser.spec.js +33 -8
  142. package/test/reuse/util/system/system.spec.js +16 -0
  143. package/test/reuse/util/system/test.system.conf.js +12 -0
  144. package/tsconfig.json +1 -1
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.QUnit = void 0;
13
4
  /**
@@ -25,24 +16,22 @@ class QUnit {
25
16
  * @param {String} path - Relative path to the QUnit/OPA5 html file.
26
17
  * @example await ui5.qunit.executeTests("path/to/qunit.html");
27
18
  */
28
- executeTests(path) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const url = yield browser.getUrl();
31
- if (url.indexOf("4431") !== -1) {
32
- yield browser.navigateTo(`http://localhost:4431/${path}`);
33
- }
34
- else {
35
- yield browser.navigateTo(`http://localhost:34005/${path}`);
36
- }
37
- // Note: cannot use "null" as a first argument for "clientsidescripts.waitForAngular" due to browser.executeAsync error:
38
- // "Error: Malformed type for "args" parameter of command executeAsyncScript
39
- // Expected: (string|object|number|boolean|undefined)[]
40
- // Actual: (null,number)[]"
41
- yield browser.executeAsync(this.clientsidescripts.waitForAngular, undefined, 10);
42
- const execRes = yield browser.executeAsync(this.clientsidescripts.execQUnits, {});
43
- if (!execRes)
44
- throw new Error("QUnit tests failed, see log message for more details.");
45
- });
19
+ async executeTests(path) {
20
+ const url = await browser.getUrl();
21
+ if (url.indexOf("4431") !== -1) {
22
+ await browser.navigateTo(`http://localhost:4431/${path}`);
23
+ }
24
+ else {
25
+ await browser.navigateTo(`http://localhost:34005/${path}`);
26
+ }
27
+ // Note: cannot use "null" as a first argument for "clientsidescripts.waitForAngular" due to browser.executeAsync error:
28
+ // "Error: Malformed type for "args" parameter of command executeAsyncScript
29
+ // Expected: (string|object|number|boolean|undefined)[]
30
+ // Actual: (null,number)[]"
31
+ await browser.executeAsync(this.clientsidescripts.waitForAngular, undefined, 10);
32
+ const execRes = await browser.executeAsync(this.clientsidescripts.execQUnits, {});
33
+ if (!execRes)
34
+ throw new Error("QUnit tests failed, see log message for more details.");
46
35
  }
47
36
  ;
48
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qunit.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/qunit.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;AACb;;;GAGG;AACH,MAAa,KAAK;IAAlB;QAEU,sBAAiB,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAyB3E,CAAC;IAvBC;;;;;;OAMG;IACG,YAAY,CAAE,IAAY;;YAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC9B,MAAM,OAAO,CAAC,UAAU,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;aAC3D;iBAAM;gBACL,MAAM,OAAO,CAAC,UAAU,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;aAC5D;YACD,wHAAwH;YACxH,4EAA4E;YAC5E,uDAAuD;YACvD,2BAA2B;YAC3B,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACzF,CAAC;KAAA;IAAA,CAAC;CAEH;AA3BD,sBA2BC;AAAA,CAAC;AACF,kBAAe,IAAI,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"qunit.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/qunit.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AACb;;;GAGG;AACH,MAAa,KAAK;IAAlB;QAEU,sBAAiB,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;IAyB3E,CAAC;IAvBC;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAE,IAAY;QAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YAC9B,MAAM,OAAO,CAAC,UAAU,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;SAC3D;aAAM;YACL,MAAM,OAAO,CAAC,UAAU,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;SAC5D;QACD,wHAAwH;QACxH,4EAA4E;QAC5E,uDAAuD;QACvD,2BAA2B;QAC3B,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACzF,CAAC;IAAA,CAAC;CAEH;AA3BD,sBA2BC;AAAA,CAAC;AACF,kBAAe,IAAI,KAAK,EAAE,CAAC"}
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.Session = void 0;
13
4
  /**
@@ -27,51 +18,47 @@ class Session {
27
18
  * @example await ui5.session.login("PURCHASER");
28
19
  * @example await ui5.session.login("JOHN_DOE", "abc123!", true);
29
20
  */
30
- login(username, password = "Welcome1!", verify = false, timeout = process.env.QMATE_CUSTOM_TIMEOUT || 30000) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- if (browser.config && browser.config.params &&
33
- browser.config.params.auth && browser.config.params.auth.formType === "skip") {
34
- util.console.warn("Login is skipped since 'formType' is set to 'skip'");
35
- return true;
36
- }
37
- if (!username) {
38
- throw new Error("Please provide a valid username.");
39
- }
40
- let authenticator;
41
- let messageSelector;
42
- try {
43
- yield browser.waitUntil(function () {
44
- return __awaiter(this, void 0, void 0, function* () {
45
- try {
46
- const fioriFormId = ui5.authenticators.fioriForm.formId;
47
- const elem = yield nonUi5.element.getByCss(fioriFormId, 0, 7500);
48
- yield nonUi5.element.isVisible(elem);
49
- authenticator = ui5.authenticators.fioriForm;
50
- messageSelector = ui5.authenticators.fioriForm.messageSelector;
51
- return true;
52
- }
53
- catch (e) {
54
- // continue
55
- }
56
- try {
57
- const sapCloudFormId = ui5.authenticators.sapCloudForm.formId;
58
- const elem = yield nonUi5.element.getByCss(sapCloudFormId, 0, 7500);
59
- yield nonUi5.element.isVisible(elem);
60
- authenticator = ui5.authenticators.sapCloudForm;
61
- messageSelector = ui5.authenticators.sapCloudForm.messageSelector;
62
- return true;
63
- }
64
- catch (e) {
65
- return false;
66
- }
67
- });
68
- }, timeout);
69
- }
70
- catch (error) {
71
- throw new Error("login failed. Could not find the login page within the given time. \n" + error);
72
- }
73
- yield this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
74
- });
21
+ async login(username, password = "Welcome1!", verify = false, timeout = process.env.QMATE_CUSTOM_TIMEOUT || 30000) {
22
+ if (browser.config && browser.config.params &&
23
+ browser.config.params.auth && browser.config.params.auth.formType === "skip") {
24
+ util.console.warn("Login is skipped since 'formType' is set to 'skip'");
25
+ return true;
26
+ }
27
+ if (!username) {
28
+ throw new Error("Please provide a valid username.");
29
+ }
30
+ let authenticator;
31
+ let messageSelector;
32
+ try {
33
+ await browser.waitUntil(async function () {
34
+ try {
35
+ const fioriFormId = ui5.authenticators.fioriForm.formId;
36
+ const elem = await nonUi5.element.getByCss(fioriFormId, 0, 7500);
37
+ await nonUi5.element.isVisible(elem);
38
+ authenticator = ui5.authenticators.fioriForm;
39
+ messageSelector = ui5.authenticators.fioriForm.messageSelector;
40
+ return true;
41
+ }
42
+ catch (e) {
43
+ // continue
44
+ }
45
+ try {
46
+ const sapCloudFormId = ui5.authenticators.sapCloudForm.formId;
47
+ const elem = await nonUi5.element.getByCss(sapCloudFormId, 0, 7500);
48
+ await nonUi5.element.isVisible(elem);
49
+ authenticator = ui5.authenticators.sapCloudForm;
50
+ messageSelector = ui5.authenticators.sapCloudForm.messageSelector;
51
+ return true;
52
+ }
53
+ catch (e) {
54
+ return false;
55
+ }
56
+ }, timeout);
57
+ }
58
+ catch (error) {
59
+ throw new Error("login failed. Could not find the login page within the given time. \n" + error);
60
+ }
61
+ await this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
75
62
  }
76
63
  ;
77
64
  /**
@@ -83,20 +70,18 @@ class Session {
83
70
  * @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
84
71
  * @example await ui5.session.loginFiori("john", "abc123!");
85
72
  */
86
- loginFiori(username, password = "Welcome1!", verify = false) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- if (!username) {
89
- throw new Error("Please provide a valid username.");
90
- }
91
- try {
92
- const authenticator = ui5.authenticators.fioriForm;
93
- const messageSelector = ui5.authenticators.fioriForm.messageSelector;
94
- return yield this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
95
- }
96
- catch (error) {
97
- throw new Error(`Function 'loginFiori' failed: ${error}`);
98
- }
99
- });
73
+ async loginFiori(username, password = "Welcome1!", verify = false) {
74
+ if (!username) {
75
+ throw new Error("Please provide a valid username.");
76
+ }
77
+ try {
78
+ const authenticator = ui5.authenticators.fioriForm;
79
+ const messageSelector = ui5.authenticators.fioriForm.messageSelector;
80
+ return await this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
81
+ }
82
+ catch (error) {
83
+ throw new Error(`Function 'loginFiori' failed: ${error}`);
84
+ }
100
85
  }
101
86
  ;
102
87
  /**
@@ -108,20 +93,18 @@ class Session {
108
93
  * @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
109
94
  * @example await ui5.session.loginSapCloud("john", "abc123!");
110
95
  */
111
- loginSapCloud(username, password = "Welcome1!", verify = false) {
112
- return __awaiter(this, void 0, void 0, function* () {
113
- if (!username) {
114
- throw new Error("Please provide a valid username.");
115
- }
116
- try {
117
- const authenticator = yield ui5.authenticators.sapCloudForm;
118
- const messageSelector = ui5.authenticators.sapCloudForm.messageSelector;
119
- return yield this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
120
- }
121
- catch (error) {
122
- throw new Error(`Function 'loginSapCloud' failed: ${error}`);
123
- }
124
- });
96
+ async loginSapCloud(username, password = "Welcome1!", verify = false) {
97
+ if (!username) {
98
+ throw new Error("Please provide a valid username.");
99
+ }
100
+ try {
101
+ const authenticator = await ui5.authenticators.sapCloudForm;
102
+ const messageSelector = ui5.authenticators.sapCloudForm.messageSelector;
103
+ return await this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
104
+ }
105
+ catch (error) {
106
+ throw new Error(`Function 'loginSapCloud' failed: ${error}`);
107
+ }
125
108
  }
126
109
  ;
127
110
  /**
@@ -136,23 +119,21 @@ class Session {
136
119
  * @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
137
120
  * @example await ui5.session.loginCustom("JOHN_DOE", "abc123!", "#username", #password, "#logon");
138
121
  */
139
- loginCustom(username, password = "Welcome1!", usernameFieldSelector, passwordFieldSelector, logonButtonSelector, verify = false) {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- if (!username) {
142
- throw new Error("Please provide a valid username.");
143
- }
144
- try {
145
- const authenticator = {
146
- "usernameFieldSelector": usernameFieldSelector,
147
- "passwordFieldSelector": passwordFieldSelector,
148
- "logonButtonSelector": logonButtonSelector
149
- };
150
- return yield this._loginWithUsernameAndPassword(username, password, authenticator, verify);
151
- }
152
- catch (error) {
153
- throw new Error(`Function 'loginCustom' failed: ${error}`);
154
- }
155
- });
122
+ async loginCustom(username, password = "Welcome1!", usernameFieldSelector, passwordFieldSelector, logonButtonSelector, verify = false) {
123
+ if (!username) {
124
+ throw new Error("Please provide a valid username.");
125
+ }
126
+ try {
127
+ const authenticator = {
128
+ "usernameFieldSelector": usernameFieldSelector,
129
+ "passwordFieldSelector": passwordFieldSelector,
130
+ "logonButtonSelector": logonButtonSelector
131
+ };
132
+ return await this._loginWithUsernameAndPassword(username, password, authenticator, verify);
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Function 'loginCustom' failed: ${error}`);
136
+ }
156
137
  }
157
138
  ;
158
139
  /**
@@ -185,39 +166,37 @@ class Session {
185
166
  // spec
186
167
  await ui5.session.loginCustomViaConfig();
187
168
  */
188
- loginCustomViaConfig(username, password = "Welcome1!", verify = false) {
189
- return __awaiter(this, void 0, void 0, function* () {
190
- try {
191
- const baseUrl = browser.config.baseUrl;
192
- yield browser.navigateTo(baseUrl);
193
- if (browser.config.params &&
194
- browser.config.params.auth &&
195
- browser.config.params.auth.username &&
196
- browser.config.params.auth.password) {
197
- username = browser.config.params.auth.username;
198
- password = browser.config.params.auth.password;
199
- // @ts-ignore
200
- util.console.info("\x1b[33m%s\x1b[0m", "Login credentials will be taken from config.");
201
- }
202
- else if (!username && !password) {
203
- throw new Error("Username or password is missing. Check your parameters or config file.");
204
- }
205
- }
206
- catch (error) {
207
- throw new Error("Function 'loginCustomViaConfig' failed: Please maintain the credentials in your config or spec.: " + error);
208
- }
209
- try {
210
- const authenticator = {
211
- "usernameFieldSelector": browser.config.params.auth.usernameFieldSelector,
212
- "passwordFieldSelector": browser.config.params.auth.passwordFieldSelector,
213
- "logonButtonSelector": browser.config.params.auth.logonButtonSelector
214
- };
215
- return yield this._loginWithUsernameAndPassword(username, password, authenticator, verify);
169
+ async loginCustomViaConfig(username, password = "Welcome1!", verify = false) {
170
+ try {
171
+ const baseUrl = browser.config.baseUrl;
172
+ await browser.navigateTo(baseUrl);
173
+ if (browser.config.params &&
174
+ browser.config.params.auth &&
175
+ browser.config.params.auth.username &&
176
+ browser.config.params.auth.password) {
177
+ username = browser.config.params.auth.username;
178
+ password = browser.config.params.auth.password;
179
+ // @ts-ignore
180
+ util.console.info("\x1b[33m%s\x1b[0m", "Login credentials will be taken from config.");
216
181
  }
217
- catch (error) {
218
- throw new Error("Function 'loginCustomViaConfig' failed. Please maintain the auth values in your config.");
182
+ else if (!username && !password) {
183
+ throw new Error("Username or password is missing. Check your parameters or config file.");
219
184
  }
220
- });
185
+ }
186
+ catch (error) {
187
+ throw new Error("Function 'loginCustomViaConfig' failed: Please maintain the credentials in your config or spec.: " + error);
188
+ }
189
+ try {
190
+ const authenticator = {
191
+ "usernameFieldSelector": browser.config.params.auth.usernameFieldSelector,
192
+ "passwordFieldSelector": browser.config.params.auth.passwordFieldSelector,
193
+ "logonButtonSelector": browser.config.params.auth.logonButtonSelector
194
+ };
195
+ return await this._loginWithUsernameAndPassword(username, password, authenticator, verify);
196
+ }
197
+ catch (error) {
198
+ throw new Error("Function 'loginCustomViaConfig' failed. Please maintain the auth values in your config.");
199
+ }
221
200
  }
222
201
  ;
223
202
  // =================================== LOGOUT / SWITCH ===================================
@@ -229,21 +208,19 @@ class Session {
229
208
  * Set this to false if the system does not show the text after logging out.
230
209
  * @example await ui5.session.logout();
231
210
  */
232
- logout(verify = true) {
233
- return __awaiter(this, void 0, void 0, function* () {
234
- if (browser.config && browser.config.params &&
235
- browser.config.params.auth && browser.config.params.auth.formType === "skip") {
236
- console.warn("Logout is skipped.");
237
- yield browser.reloadSession(); // Clean cache
238
- return true;
239
- }
240
- yield ui5.navigationBar.clickUserIcon();
241
- yield this._clickSignOut();
242
- yield ui5.confirmationDialog.clickOk();
243
- if (verify) {
244
- yield ui5.session.expectLogoutText();
245
- }
246
- });
211
+ async logout(verify = true) {
212
+ if (browser.config && browser.config.params &&
213
+ browser.config.params.auth && browser.config.params.auth.formType === "skip") {
214
+ console.warn("Logout is skipped.");
215
+ await browser.reloadSession(); // Clean cache
216
+ return true;
217
+ }
218
+ await ui5.navigationBar.clickUserIcon();
219
+ await this._clickSignOut();
220
+ await ui5.confirmationDialog.clickOk();
221
+ if (verify) {
222
+ await ui5.session.expectLogoutText();
223
+ }
247
224
  }
248
225
  ;
249
226
  /**
@@ -258,18 +235,16 @@ class Session {
258
235
  * @example const authenticator = ui5.authenticators.fioriForm;
259
236
  * await ui5.session.switchUser("PURCHASER", "Welcome1!", authenticator, 30000);
260
237
  */
261
- switchUser(username, password = "Welcome1!", authenticator, wait = 10000) {
262
- return __awaiter(this, void 0, void 0, function* () {
263
- yield this.logout();
264
- yield util.browser.sleep(wait);
265
- yield browser.navigateTo(browser.config.baseUrl);
266
- if (!authenticator) {
267
- this.login(username, password);
268
- }
269
- else {
270
- yield this._loginWithUsernameAndPassword(username, password, authenticator);
271
- }
272
- });
238
+ async switchUser(username, password = "Welcome1!", authenticator, wait = 10000) {
239
+ await this.logout();
240
+ await util.browser.sleep(wait);
241
+ await browser.navigateTo(browser.config.baseUrl);
242
+ if (!authenticator) {
243
+ this.login(username, password);
244
+ }
245
+ else {
246
+ await this._loginWithUsernameAndPassword(username, password, authenticator);
247
+ }
273
248
  }
274
249
  ;
275
250
  // =================================== ASSERTION ===================================
@@ -280,92 +255,81 @@ class Session {
280
255
  * This is essential for chaining scripts, so that no static browser sleep in the spec itself is required anymore.
281
256
  * @example await ui5.session.expectLogoutText();
282
257
  */
283
- expectLogoutText() {
284
- return __awaiter(this, void 0, void 0, function* () {
285
- const elem = yield nonUi5.element.getById("msgText");
286
- yield nonUi5.assertion.expectToBeVisible(elem);
287
- });
258
+ async expectLogoutText() {
259
+ const elem = await nonUi5.element.getById("msgText");
260
+ await nonUi5.assertion.expectToBeVisible(elem);
288
261
  }
289
262
  ;
290
263
  // =================================== HELPER ===================================
291
- _loginWithUsernameAndPassword(username, password = "Welcome1!", authenticator = ui5.authenticators.fioriForm, verify = false, messageSelector) {
292
- return __awaiter(this, void 0, void 0, function* () {
293
- let usernameField = null;
294
- let passwordField = null;
295
- let logonField = null;
296
- try {
297
- yield browser.waitUntil(function () {
298
- return __awaiter(this, void 0, void 0, function* () {
299
- usernameField = yield $(authenticator.usernameFieldSelector);
300
- passwordField = yield $(authenticator.passwordFieldSelector);
301
- logonField = yield $(authenticator.logonButtonSelector);
302
- return (yield usernameField.isDisplayedInViewport()) &&
303
- (yield passwordField.isDisplayedInViewport()) &&
304
- (
305
- // eslint-disable-next-line no-return-await
306
- yield logonField.isDisplayedInViewport());
307
- });
308
- }, {
309
- timeout: 30000,
310
- timeoutMsg: "Login failed: Login page with the given authenticator not present."
311
- });
312
- // @ts-ignore
313
- yield usernameField.setValue(username);
314
- // @ts-ignore
315
- yield passwordField.setValue(password);
316
- // @ts-ignore
317
- yield logonField.click();
318
- }
319
- catch (error) {
320
- throw new Error(`Login failed: Please check if you are already logged in or if the system is down \n. ${error}`);
321
- }
322
- if (messageSelector) {
323
- yield this._checkForErrors(messageSelector);
264
+ async _loginWithUsernameAndPassword(username, password = "Welcome1!", authenticator = ui5.authenticators.fioriForm, verify = false, messageSelector) {
265
+ let usernameField = null;
266
+ let passwordField = null;
267
+ let logonField = null;
268
+ try {
269
+ await browser.waitUntil(async function () {
270
+ usernameField = await $(authenticator.usernameFieldSelector);
271
+ passwordField = await $(authenticator.passwordFieldSelector);
272
+ logonField = await $(authenticator.logonButtonSelector);
273
+ return await usernameField.isDisplayedInViewport() &&
274
+ await passwordField.isDisplayedInViewport() &&
275
+ // eslint-disable-next-line no-return-await
276
+ await logonField.isDisplayedInViewport();
277
+ }, {
278
+ timeout: 30000,
279
+ timeoutMsg: "Login failed: Login page with the given authenticator not present."
280
+ });
281
+ // @ts-ignore
282
+ await usernameField.setValue(username);
283
+ // @ts-ignore
284
+ await passwordField.setValue(password);
285
+ // @ts-ignore
286
+ await logonField.click();
287
+ }
288
+ catch (error) {
289
+ throw new Error(`Login failed: Please check if you are already logged in or if the system is down \n. ${error}`);
290
+ }
291
+ if (messageSelector) {
292
+ await this._checkForErrors(messageSelector);
293
+ }
294
+ if (verify) {
295
+ await ui5.navigationBar.expectShellHeader();
296
+ }
297
+ try {
298
+ await util.browser.logUI5Version();
299
+ }
300
+ catch (error) {
301
+ if (error instanceof Error) {
302
+ util.console.warn(error.toString());
324
303
  }
325
- if (verify) {
326
- yield ui5.navigationBar.expectShellHeader();
327
- }
328
- try {
329
- yield util.browser.logUI5Version();
330
- }
331
- catch (error) {
332
- if (error instanceof Error) {
333
- util.console.warn(error.toString());
334
- }
335
- }
336
- });
304
+ }
337
305
  }
338
- _clickSignOut() {
339
- return __awaiter(this, void 0, void 0, function* () {
340
- const selector = {
341
- "elementProperties": {
342
- "metadata": "sap.m.StandardListItem",
343
- "mProperties": {
344
- "id": "*logoutBtn"
345
- }
306
+ async _clickSignOut() {
307
+ const selector = {
308
+ "elementProperties": {
309
+ "metadata": "sap.m.StandardListItem",
310
+ "mProperties": {
311
+ "id": "*logoutBtn"
346
312
  }
347
- };
348
- yield ui5.userInteraction.scrollToElement(selector);
349
- return ui5.userInteraction.click(selector);
350
- });
351
- }
352
- _checkForErrors(messageSelector) {
353
- return __awaiter(this, void 0, void 0, function* () {
354
- let uiErrorMessagesFound = false;
355
- let messageText;
356
- try {
357
- const messageDiv = yield nonUi5.element.getByCss(messageSelector, 0, 3000);
358
- // @ts-ignore
359
- messageText = yield nonUi5.element.getValue(messageDiv, "text");
360
- uiErrorMessagesFound = true;
361
- }
362
- catch (e) {
363
- // no error messages found in login
364
313
  }
365
- if (uiErrorMessagesFound) {
366
- throw new Error(`Login failed: "${messageText}"`);
367
- }
368
- });
314
+ };
315
+ await ui5.userInteraction.scrollToElement(selector);
316
+ return ui5.userInteraction.click(selector);
317
+ }
318
+ async _checkForErrors(messageSelector) {
319
+ let uiErrorMessagesFound = false;
320
+ let messageText;
321
+ try {
322
+ const messageDiv = await nonUi5.element.getByCss(messageSelector, 0, 3000);
323
+ // @ts-ignore
324
+ messageText = await nonUi5.element.getValue(messageDiv, "text");
325
+ uiErrorMessagesFound = true;
326
+ }
327
+ catch (e) {
328
+ // no error messages found in login
329
+ }
330
+ if (uiErrorMessagesFound) {
331
+ throw new Error(`Login failed: "${messageText}"`);
332
+ }
369
333
  }
370
334
  }
371
335
  exports.Session = Session;
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/session.ts"],"names":[],"mappings":"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"}