@sap_oss/wdio-qmate-service 1.2.0 → 1.2.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.
|
@@ -8,7 +8,7 @@ export declare class Session {
|
|
|
8
8
|
* @memberOf ui5.session
|
|
9
9
|
* @description Login with specific username and password. This function works for both fiori and sap-cloud login.
|
|
10
10
|
* @param {String} username - The username.
|
|
11
|
-
* @param {String} [password
|
|
11
|
+
* @param {String} [password] - The password.
|
|
12
12
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
13
13
|
* @param {Number} [timeout=30000] - The timeout to wait (ms).
|
|
14
14
|
* @example await ui5.session.login("PURCHASER");
|
|
@@ -20,7 +20,7 @@ export declare class Session {
|
|
|
20
20
|
* @memberOf ui5.session
|
|
21
21
|
* @description Login with fioriForm and specific username and password.
|
|
22
22
|
* @param {String} username - The username.
|
|
23
|
-
* @param {String} [password
|
|
23
|
+
* @param {String} [password] - The password.
|
|
24
24
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
25
25
|
* @example await ui5.session.loginFiori("john", "abc123!");
|
|
26
26
|
*/
|
|
@@ -30,7 +30,7 @@ export declare class Session {
|
|
|
30
30
|
* @memberOf ui5.session
|
|
31
31
|
* @description Login with sapCloud form and specific username and password.
|
|
32
32
|
* @param {String} username - The username.
|
|
33
|
-
* @param {String} [password
|
|
33
|
+
* @param {String} [password] - The password.
|
|
34
34
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
35
35
|
* @example await ui5.session.loginSapCloud("john", "abc123!");
|
|
36
36
|
*/
|
|
@@ -53,7 +53,7 @@ export declare class Session {
|
|
|
53
53
|
* @memberOf ui5.session
|
|
54
54
|
* @description Login with specific username and password. The selectors will be taken from the config.
|
|
55
55
|
* @param {String} username - The username. Can be specified in spec or config. If specified in both credentials will be taken from config.
|
|
56
|
-
* @param {String} [password
|
|
56
|
+
* @param {String} [password] - The password. Can be specified in spec or config. If specified in both credentials will be taken from config.
|
|
57
57
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
58
58
|
* @example // config - SAMPLE 1
|
|
59
59
|
auth: {
|
|
@@ -93,7 +93,7 @@ export declare class Session {
|
|
|
93
93
|
* @memberOf ui5.session
|
|
94
94
|
* @description switches the user according to the passed username and password.
|
|
95
95
|
* @param {String} username - The username.
|
|
96
|
-
* @param {String} [password
|
|
96
|
+
* @param {String} [password] - The password.
|
|
97
97
|
* @param {Object} [authenticator] - The login form type. Set to null to use generic login.
|
|
98
98
|
* @param {Number} [wait=10000] - The waiting time between logout and login (ms).
|
|
99
99
|
* @example await ui5.session.switchUser("PURCHASER");
|
|
@@ -112,6 +112,7 @@ export declare class Session {
|
|
|
112
112
|
private _loginWithUsernameAndPassword;
|
|
113
113
|
private _clickSignOut;
|
|
114
114
|
private _checkForErrors;
|
|
115
|
+
private _getDefaultPassword;
|
|
115
116
|
}
|
|
116
117
|
declare const _default: Session;
|
|
117
118
|
export default _default;
|
|
@@ -12,21 +12,23 @@ class Session {
|
|
|
12
12
|
* @memberOf ui5.session
|
|
13
13
|
* @description Login with specific username and password. This function works for both fiori and sap-cloud login.
|
|
14
14
|
* @param {String} username - The username.
|
|
15
|
-
* @param {String} [password
|
|
15
|
+
* @param {String} [password] - The password.
|
|
16
16
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
17
17
|
* @param {Number} [timeout=30000] - The timeout to wait (ms).
|
|
18
18
|
* @example await ui5.session.login("PURCHASER");
|
|
19
19
|
* @example await ui5.session.login("JOHN_DOE", "abc123!", true);
|
|
20
20
|
*/
|
|
21
|
-
async login(username, password
|
|
22
|
-
if (browser.config && browser.config.params &&
|
|
23
|
-
browser.config.params.auth && browser.config.params.auth.formType === "skip") {
|
|
21
|
+
async login(username, password, verify = false, timeout = process.env.QMATE_CUSTOM_TIMEOUT || 30000) {
|
|
22
|
+
if (browser.config && browser.config.params && browser.config.params.auth && browser.config.params.auth.formType === "skip") {
|
|
24
23
|
util.console.warn("Login is skipped since 'formType' is set to 'skip'");
|
|
25
24
|
return true;
|
|
26
25
|
}
|
|
27
26
|
if (!username) {
|
|
28
27
|
throw new Error("Please provide a valid username.");
|
|
29
28
|
}
|
|
29
|
+
if (!password) {
|
|
30
|
+
password = this._getDefaultPassword();
|
|
31
|
+
}
|
|
30
32
|
let authenticator;
|
|
31
33
|
let messageSelector;
|
|
32
34
|
try {
|
|
@@ -60,20 +62,22 @@ class Session {
|
|
|
60
62
|
}
|
|
61
63
|
await this._loginWithUsernameAndPassword(username, password, authenticator, verify, messageSelector);
|
|
62
64
|
}
|
|
63
|
-
;
|
|
64
65
|
/**
|
|
65
66
|
* @function loginFiori
|
|
66
67
|
* @memberOf ui5.session
|
|
67
68
|
* @description Login with fioriForm and specific username and password.
|
|
68
69
|
* @param {String} username - The username.
|
|
69
|
-
* @param {String} [password
|
|
70
|
+
* @param {String} [password] - The password.
|
|
70
71
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
71
72
|
* @example await ui5.session.loginFiori("john", "abc123!");
|
|
72
73
|
*/
|
|
73
|
-
async loginFiori(username, password
|
|
74
|
+
async loginFiori(username, password, verify = false) {
|
|
74
75
|
if (!username) {
|
|
75
76
|
throw new Error("Please provide a valid username.");
|
|
76
77
|
}
|
|
78
|
+
if (!password) {
|
|
79
|
+
password = this._getDefaultPassword();
|
|
80
|
+
}
|
|
77
81
|
try {
|
|
78
82
|
const authenticator = ui5.authenticators.fioriForm;
|
|
79
83
|
const messageSelector = ui5.authenticators.fioriForm.messageSelector;
|
|
@@ -83,20 +87,22 @@ class Session {
|
|
|
83
87
|
throw new Error(`Function 'loginFiori' failed: ${error}`);
|
|
84
88
|
}
|
|
85
89
|
}
|
|
86
|
-
;
|
|
87
90
|
/**
|
|
88
91
|
* @function loginSapCloud
|
|
89
92
|
* @memberOf ui5.session
|
|
90
93
|
* @description Login with sapCloud form and specific username and password.
|
|
91
94
|
* @param {String} username - The username.
|
|
92
|
-
* @param {String} [password
|
|
95
|
+
* @param {String} [password] - The password.
|
|
93
96
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
94
97
|
* @example await ui5.session.loginSapCloud("john", "abc123!");
|
|
95
98
|
*/
|
|
96
|
-
async loginSapCloud(username, password
|
|
99
|
+
async loginSapCloud(username, password, verify = false) {
|
|
97
100
|
if (!username) {
|
|
98
101
|
throw new Error("Please provide a valid username.");
|
|
99
102
|
}
|
|
103
|
+
if (!password) {
|
|
104
|
+
password = this._getDefaultPassword();
|
|
105
|
+
}
|
|
100
106
|
try {
|
|
101
107
|
const authenticator = await ui5.authenticators.sapCloudForm;
|
|
102
108
|
const messageSelector = ui5.authenticators.sapCloudForm.messageSelector;
|
|
@@ -106,7 +112,6 @@ class Session {
|
|
|
106
112
|
throw new Error(`Function 'loginSapCloud' failed: ${error}`);
|
|
107
113
|
}
|
|
108
114
|
}
|
|
109
|
-
;
|
|
110
115
|
/**
|
|
111
116
|
* @function loginCustom
|
|
112
117
|
* @memberOf ui5.session
|
|
@@ -119,15 +124,18 @@ class Session {
|
|
|
119
124
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
120
125
|
* @example await ui5.session.loginCustom("JOHN_DOE", "abc123!", "#username", #password, "#logon");
|
|
121
126
|
*/
|
|
122
|
-
async loginCustom(username, password = "
|
|
127
|
+
async loginCustom(username, password = "", usernameFieldSelector, passwordFieldSelector, logonButtonSelector, verify = false) {
|
|
123
128
|
if (!username) {
|
|
124
129
|
throw new Error("Please provide a valid username.");
|
|
125
130
|
}
|
|
131
|
+
if (!password) {
|
|
132
|
+
password = this._getDefaultPassword();
|
|
133
|
+
}
|
|
126
134
|
try {
|
|
127
135
|
const authenticator = {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
136
|
+
usernameFieldSelector: usernameFieldSelector,
|
|
137
|
+
passwordFieldSelector: passwordFieldSelector,
|
|
138
|
+
logonButtonSelector: logonButtonSelector
|
|
131
139
|
};
|
|
132
140
|
return await this._loginWithUsernameAndPassword(username, password, authenticator, verify);
|
|
133
141
|
}
|
|
@@ -135,13 +143,12 @@ class Session {
|
|
|
135
143
|
throw new Error(`Function 'loginCustom' failed: ${error}`);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
|
-
;
|
|
139
146
|
/**
|
|
140
147
|
* @function loginCustomViaConfig
|
|
141
148
|
* @memberOf ui5.session
|
|
142
149
|
* @description Login with specific username and password. The selectors will be taken from the config.
|
|
143
150
|
* @param {String} username - The username. Can be specified in spec or config. If specified in both credentials will be taken from config.
|
|
144
|
-
* @param {String} [password
|
|
151
|
+
* @param {String} [password] - The password. Can be specified in spec or config. If specified in both credentials will be taken from config.
|
|
145
152
|
* @param {Boolean} [verify=false] - Specifies if the function will check the shell header after logging in.
|
|
146
153
|
* @example // config - SAMPLE 1
|
|
147
154
|
auth: {
|
|
@@ -166,14 +173,14 @@ class Session {
|
|
|
166
173
|
// spec
|
|
167
174
|
await ui5.session.loginCustomViaConfig();
|
|
168
175
|
*/
|
|
169
|
-
async loginCustomViaConfig(username, password
|
|
176
|
+
async loginCustomViaConfig(username, password, verify = false) {
|
|
177
|
+
if (!password) {
|
|
178
|
+
password = this._getDefaultPassword();
|
|
179
|
+
}
|
|
170
180
|
try {
|
|
171
181
|
const baseUrl = browser.config.baseUrl;
|
|
172
182
|
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) {
|
|
183
|
+
if (browser.config.params && browser.config.params.auth && browser.config.params.auth.username && browser.config.params.auth.password) {
|
|
177
184
|
username = browser.config.params.auth.username;
|
|
178
185
|
password = browser.config.params.auth.password;
|
|
179
186
|
// @ts-ignore
|
|
@@ -188,9 +195,9 @@ class Session {
|
|
|
188
195
|
}
|
|
189
196
|
try {
|
|
190
197
|
const authenticator = {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
198
|
+
usernameFieldSelector: browser.config.params.auth.usernameFieldSelector,
|
|
199
|
+
passwordFieldSelector: browser.config.params.auth.passwordFieldSelector,
|
|
200
|
+
logonButtonSelector: browser.config.params.auth.logonButtonSelector
|
|
194
201
|
};
|
|
195
202
|
return await this._loginWithUsernameAndPassword(username, password, authenticator, verify);
|
|
196
203
|
}
|
|
@@ -198,7 +205,6 @@ class Session {
|
|
|
198
205
|
throw new Error("Function 'loginCustomViaConfig' failed. Please maintain the auth values in your config.");
|
|
199
206
|
}
|
|
200
207
|
}
|
|
201
|
-
;
|
|
202
208
|
// =================================== LOGOUT / SWITCH ===================================
|
|
203
209
|
/**
|
|
204
210
|
* @function logout
|
|
@@ -209,8 +215,7 @@ class Session {
|
|
|
209
215
|
* @example await ui5.session.logout();
|
|
210
216
|
*/
|
|
211
217
|
async logout(verify = true) {
|
|
212
|
-
if (browser.config && browser.config.params &&
|
|
213
|
-
browser.config.params.auth && browser.config.params.auth.formType === "skip") {
|
|
218
|
+
if (browser.config && browser.config.params && browser.config.params.auth && browser.config.params.auth.formType === "skip") {
|
|
214
219
|
console.warn("Logout is skipped.");
|
|
215
220
|
await browser.reloadSession(); // Clean cache
|
|
216
221
|
return true;
|
|
@@ -222,20 +227,22 @@ class Session {
|
|
|
222
227
|
await ui5.session.expectLogoutText();
|
|
223
228
|
}
|
|
224
229
|
}
|
|
225
|
-
;
|
|
226
230
|
/**
|
|
227
231
|
* @function switchUser
|
|
228
232
|
* @memberOf ui5.session
|
|
229
233
|
* @description switches the user according to the passed username and password.
|
|
230
234
|
* @param {String} username - The username.
|
|
231
|
-
* @param {String} [password
|
|
235
|
+
* @param {String} [password] - The password.
|
|
232
236
|
* @param {Object} [authenticator] - The login form type. Set to null to use generic login.
|
|
233
237
|
* @param {Number} [wait=10000] - The waiting time between logout and login (ms).
|
|
234
238
|
* @example await ui5.session.switchUser("PURCHASER");
|
|
235
239
|
* @example const authenticator = ui5.authenticators.fioriForm;
|
|
236
240
|
* await ui5.session.switchUser("PURCHASER", "super-duper-sensitive-pw", authenticator, 30000);
|
|
237
241
|
*/
|
|
238
|
-
async switchUser(username, password = "
|
|
242
|
+
async switchUser(username, password = "", authenticator, wait = 10000) {
|
|
243
|
+
if (!password) {
|
|
244
|
+
password = this._getDefaultPassword();
|
|
245
|
+
}
|
|
239
246
|
await this.logout();
|
|
240
247
|
await util.browser.sleep(wait);
|
|
241
248
|
await browser.navigateTo(browser.config.baseUrl);
|
|
@@ -246,7 +253,6 @@ class Session {
|
|
|
246
253
|
await this._loginWithUsernameAndPassword(username, password, authenticator);
|
|
247
254
|
}
|
|
248
255
|
}
|
|
249
|
-
;
|
|
250
256
|
// =================================== ASSERTION ===================================
|
|
251
257
|
/**
|
|
252
258
|
* @function expectLogoutText
|
|
@@ -259,9 +265,11 @@ class Session {
|
|
|
259
265
|
const elem = await nonUi5.element.getById("msgText");
|
|
260
266
|
await nonUi5.assertion.expectToBeVisible(elem);
|
|
261
267
|
}
|
|
262
|
-
;
|
|
263
268
|
// =================================== HELPER ===================================
|
|
264
|
-
async _loginWithUsernameAndPassword(username, password
|
|
269
|
+
async _loginWithUsernameAndPassword(username, password, authenticator = ui5.authenticators.fioriForm, verify = false, messageSelector) {
|
|
270
|
+
if (!password) {
|
|
271
|
+
password = this._getDefaultPassword();
|
|
272
|
+
}
|
|
265
273
|
let usernameField = null;
|
|
266
274
|
let passwordField = null;
|
|
267
275
|
let logonField = null;
|
|
@@ -270,10 +278,10 @@ class Session {
|
|
|
270
278
|
usernameField = await $(authenticator.usernameFieldSelector);
|
|
271
279
|
passwordField = await $(authenticator.passwordFieldSelector);
|
|
272
280
|
logonField = await $(authenticator.logonButtonSelector);
|
|
273
|
-
return await usernameField.isDisplayedInViewport() &&
|
|
274
|
-
await passwordField.isDisplayedInViewport() &&
|
|
281
|
+
return ((await usernameField.isDisplayedInViewport()) &&
|
|
282
|
+
(await passwordField.isDisplayedInViewport()) &&
|
|
275
283
|
// eslint-disable-next-line no-return-await
|
|
276
|
-
await logonField.isDisplayedInViewport();
|
|
284
|
+
(await logonField.isDisplayedInViewport()));
|
|
277
285
|
}, {
|
|
278
286
|
timeout: 30000,
|
|
279
287
|
timeoutMsg: "Login failed: Login page with the given authenticator not present."
|
|
@@ -305,10 +313,10 @@ class Session {
|
|
|
305
313
|
}
|
|
306
314
|
async _clickSignOut() {
|
|
307
315
|
const selector = {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
316
|
+
elementProperties: {
|
|
317
|
+
metadata: "sap.m.StandardListItem",
|
|
318
|
+
mProperties: {
|
|
319
|
+
id: "*logoutBtn"
|
|
312
320
|
}
|
|
313
321
|
}
|
|
314
322
|
};
|
|
@@ -331,8 +339,15 @@ class Session {
|
|
|
331
339
|
throw new Error(`Login failed: "${messageText}"`);
|
|
332
340
|
}
|
|
333
341
|
}
|
|
342
|
+
_getDefaultPassword() {
|
|
343
|
+
if (process.env.QMATE_DEFAULT_PASSWORD) {
|
|
344
|
+
return process.env.QMATE_DEFAULT_PASSWORD;
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
throw new Error("Password was not provided neither in method nor in env variable.");
|
|
348
|
+
}
|
|
349
|
+
}
|
|
334
350
|
}
|
|
335
351
|
exports.Session = Session;
|
|
336
|
-
;
|
|
337
352
|
exports.default = new Session();
|
|
338
353
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/session.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AACb;;;GAGG;AACH,MAAa,OAAO;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/reuse/modules/ui5/session.ts"],"names":[],"mappings":"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"}
|