@testring/plugin-selenium-driver 0.7.1 → 0.7.3
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/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/index.js +199 -37
- package/dist/plugin/index.js.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/package.json +6 -6
- package/src/plugin/index.ts +228 -52
- package/src/types.ts +2 -1
package/dist/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAIA,iCAQC;AAZD,6BAA6B;AAI7B,SAAwB,cAAc,CAClC,SAAoB,EACpB,UAAgC;IAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;IAEjD,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/plugin/index.js
CHANGED
|
@@ -8,6 +8,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
+
var t = {};
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
+
t[p[i]] = s[p[i]];
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
};
|
|
11
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
23
|
exports.SeleniumPlugin = void 0;
|
|
13
24
|
exports.default = seleniumProxy;
|
|
@@ -30,7 +41,7 @@ const DEFAULT_CONFIG = {
|
|
|
30
41
|
// for local ChromeDriver
|
|
31
42
|
args: [],
|
|
32
43
|
},
|
|
33
|
-
'wdio:enforceWebDriverClassic': true
|
|
44
|
+
'wdio:enforceWebDriverClassic': true,
|
|
34
45
|
},
|
|
35
46
|
cdpCoverage: false,
|
|
36
47
|
};
|
|
@@ -85,15 +96,17 @@ class SeleniumPlugin {
|
|
|
85
96
|
return mergedConfig;
|
|
86
97
|
}
|
|
87
98
|
initIntervals() {
|
|
88
|
-
if (this.config.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.
|
|
99
|
+
if (this.config.workerLimit !== 'local') {
|
|
100
|
+
if (this.config.clientCheckInterval > 0) {
|
|
101
|
+
this.clientCheckInterval = setInterval(() => this.checkClientsTimeout(), this.config.clientCheckInterval);
|
|
102
|
+
}
|
|
103
|
+
process.on('exit', () => {
|
|
104
|
+
clearInterval(this.clientCheckInterval);
|
|
105
|
+
this.stopAllSessions().catch((err) => {
|
|
106
|
+
this.logger.error('Clean process exit failed', err);
|
|
107
|
+
});
|
|
95
108
|
});
|
|
96
|
-
}
|
|
109
|
+
}
|
|
97
110
|
}
|
|
98
111
|
stopAllSessions() {
|
|
99
112
|
const clientsRequests = [];
|
|
@@ -121,7 +134,7 @@ class SeleniumPlugin {
|
|
|
121
134
|
const seleniumJarPath = seleniumServer.path;
|
|
122
135
|
this.logger.debug('Init local selenium server');
|
|
123
136
|
try {
|
|
124
|
-
this.localSelenium = (0, child_process_1.
|
|
137
|
+
this.localSelenium = (0, child_process_1.spawnWithPipes)('java', [
|
|
125
138
|
...this.getChromeDriverArgs(),
|
|
126
139
|
'-jar',
|
|
127
140
|
seleniumJarPath,
|
|
@@ -329,7 +342,9 @@ class SeleniumPlugin {
|
|
|
329
342
|
}
|
|
330
343
|
kill() {
|
|
331
344
|
return __awaiter(this, void 0, void 0, function* () {
|
|
345
|
+
var _a, _b, _c, _d;
|
|
332
346
|
this.logger.debug('Kill command is called');
|
|
347
|
+
// Close all browser sessions
|
|
333
348
|
for (const applicant of this.browserClients.keys()) {
|
|
334
349
|
try {
|
|
335
350
|
yield this.end(applicant);
|
|
@@ -338,8 +353,44 @@ class SeleniumPlugin {
|
|
|
338
353
|
this.logger.error(e);
|
|
339
354
|
}
|
|
340
355
|
}
|
|
356
|
+
// If using 'local' mode, stop all active sessions
|
|
357
|
+
if (this.config.workerLimit === 'local') {
|
|
358
|
+
yield this.stopAllSessions();
|
|
359
|
+
}
|
|
341
360
|
if (this.localSelenium) {
|
|
342
|
-
|
|
361
|
+
// remove listener
|
|
362
|
+
if (this.localSelenium.stderr) {
|
|
363
|
+
this.localSelenium.stderr.removeAllListeners('data');
|
|
364
|
+
(_a = this.localSelenium.stdout) === null || _a === void 0 ? void 0 : _a.removeAllListeners();
|
|
365
|
+
}
|
|
366
|
+
// Ensure all pipes are closed
|
|
367
|
+
(_b = this.localSelenium.stdout) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
368
|
+
(_c = this.localSelenium.stderr) === null || _c === void 0 ? void 0 : _c.destroy();
|
|
369
|
+
(_d = this.localSelenium.stdin) === null || _d === void 0 ? void 0 : _d.destroy();
|
|
370
|
+
this.logger.debug(`Stopping local Selenium server (PID: ${this.localSelenium.pid})`);
|
|
371
|
+
// Try SIGTERM first
|
|
372
|
+
this.localSelenium.kill('SIGTERM');
|
|
373
|
+
// Wait for exit event with a timeout (ensures it does not hang forever)
|
|
374
|
+
const waitForExit = new Promise((resolve) => {
|
|
375
|
+
this.localSelenium.once('exit', () => {
|
|
376
|
+
this.logger.debug('Selenium process exited.');
|
|
377
|
+
resolve();
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
// Force kill if not exiting within 3 seconds
|
|
381
|
+
const forceKill = new Promise((resolve) => {
|
|
382
|
+
setTimeout(() => {
|
|
383
|
+
if (!this.localSelenium.killed) {
|
|
384
|
+
this.logger.warn(`Selenium did not exit in time. Sending SIGKILL.`);
|
|
385
|
+
this.localSelenium.kill('SIGKILL');
|
|
386
|
+
}
|
|
387
|
+
resolve();
|
|
388
|
+
}, 3000);
|
|
389
|
+
});
|
|
390
|
+
// Wait for either normal exit or force kill
|
|
391
|
+
yield Promise.race([waitForExit, forceKill]);
|
|
392
|
+
this.localSelenium.removeAllListeners();
|
|
393
|
+
this.logger.debug('Selenium process and all associated pipes closed.');
|
|
343
394
|
}
|
|
344
395
|
});
|
|
345
396
|
}
|
|
@@ -355,7 +406,9 @@ class SeleniumPlugin {
|
|
|
355
406
|
yield this.createClient(applicant);
|
|
356
407
|
const client = this.getBrowserClient(applicant);
|
|
357
408
|
const element = yield client.$(selector);
|
|
358
|
-
return options && Object.keys(options).length > 0
|
|
409
|
+
return options && Object.keys(options).length > 0
|
|
410
|
+
? element.click(options)
|
|
411
|
+
: element.click();
|
|
359
412
|
});
|
|
360
413
|
}
|
|
361
414
|
getSize(applicant, selector) {
|
|
@@ -445,7 +498,7 @@ class SeleniumPlugin {
|
|
|
445
498
|
return client.getTitle();
|
|
446
499
|
});
|
|
447
500
|
}
|
|
448
|
-
|
|
501
|
+
clearValue(applicant, xpath) {
|
|
449
502
|
return __awaiter(this, void 0, void 0, function* () {
|
|
450
503
|
yield this.createClient(applicant);
|
|
451
504
|
const client = this.getBrowserClient(applicant);
|
|
@@ -813,48 +866,34 @@ class SeleniumPlugin {
|
|
|
813
866
|
return selector.selectByAttribute(attribute, value);
|
|
814
867
|
});
|
|
815
868
|
}
|
|
816
|
-
|
|
817
|
-
gridProxyDetails(applicant) {
|
|
869
|
+
gridTestSession(applicant) {
|
|
818
870
|
return __awaiter(this, void 0, void 0, function* () {
|
|
819
871
|
yield this.createClient(applicant);
|
|
820
872
|
const client = this.getBrowserClient(applicant);
|
|
821
873
|
if (this.localSelenium) {
|
|
822
874
|
return {
|
|
875
|
+
sessionId: client.sessionId,
|
|
876
|
+
host: this.config.host,
|
|
877
|
+
port: this.config.port,
|
|
823
878
|
localSelenium: true,
|
|
824
879
|
};
|
|
825
880
|
}
|
|
826
|
-
return client.
|
|
881
|
+
return client.gridTestSession(client.sessionId);
|
|
827
882
|
});
|
|
828
883
|
}
|
|
829
|
-
|
|
830
|
-
gridTestSession(applicant) {
|
|
884
|
+
getHubConfig(applicant) {
|
|
831
885
|
return __awaiter(this, void 0, void 0, function* () {
|
|
832
886
|
yield this.createClient(applicant);
|
|
833
887
|
const client = this.getBrowserClient(applicant);
|
|
834
888
|
if (this.localSelenium) {
|
|
835
889
|
return {
|
|
890
|
+
sessionId: client.sessionId,
|
|
891
|
+
host: this.config.host,
|
|
892
|
+
port: this.config.port,
|
|
836
893
|
localSelenium: true,
|
|
837
894
|
};
|
|
838
895
|
}
|
|
839
|
-
return client.
|
|
840
|
-
});
|
|
841
|
-
}
|
|
842
|
-
// @deprecated WAT-1872
|
|
843
|
-
getGridNodeDetails(applicant) {
|
|
844
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
845
|
-
yield this.createClient(applicant);
|
|
846
|
-
const client = this.getBrowserClient(applicant);
|
|
847
|
-
const testSession = yield this.gridTestSession(applicant);
|
|
848
|
-
if (testSession && !testSession.localSelenium) {
|
|
849
|
-
const proxyDetails = yield client.gridProxyDetails(applicant);
|
|
850
|
-
delete testSession.msg;
|
|
851
|
-
delete testSession.success;
|
|
852
|
-
delete proxyDetails.msg;
|
|
853
|
-
delete proxyDetails.success;
|
|
854
|
-
delete proxyDetails.id;
|
|
855
|
-
return Object.assign(Object.assign({}, testSession), proxyDetails);
|
|
856
|
-
}
|
|
857
|
-
return testSession;
|
|
896
|
+
return client.getHubConfig();
|
|
858
897
|
});
|
|
859
898
|
}
|
|
860
899
|
/**
|
|
@@ -885,8 +924,131 @@ class SeleniumPlugin {
|
|
|
885
924
|
});
|
|
886
925
|
});
|
|
887
926
|
}
|
|
927
|
+
status(applicant) {
|
|
928
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
929
|
+
yield this.createClient(applicant);
|
|
930
|
+
const client = this.getBrowserClient(applicant);
|
|
931
|
+
return client.status();
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
back(applicant) {
|
|
935
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
936
|
+
yield this.createClient(applicant);
|
|
937
|
+
const client = this.getBrowserClient(applicant);
|
|
938
|
+
return client.back();
|
|
939
|
+
});
|
|
940
|
+
}
|
|
941
|
+
forward(applicant) {
|
|
942
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
943
|
+
yield this.createClient(applicant);
|
|
944
|
+
const client = this.getBrowserClient(applicant);
|
|
945
|
+
return client.forward();
|
|
946
|
+
});
|
|
947
|
+
}
|
|
948
|
+
getActiveElement(applicant) {
|
|
949
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
950
|
+
yield this.createClient(applicant);
|
|
951
|
+
const client = this.getBrowserClient(applicant);
|
|
952
|
+
return client.getActiveElement();
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
getLocation(applicant, xpath) {
|
|
956
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
957
|
+
yield this.createClient(applicant);
|
|
958
|
+
const client = this.getBrowserClient(applicant);
|
|
959
|
+
const element = client.$(xpath);
|
|
960
|
+
return element.getLocation();
|
|
961
|
+
});
|
|
962
|
+
}
|
|
963
|
+
setTimeZone(applicant, timeZone) {
|
|
964
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
965
|
+
yield this.createClient(applicant);
|
|
966
|
+
const client = this.getBrowserClient(applicant);
|
|
967
|
+
return client.setTimeZone(timeZone);
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
getWindowSize(applicant) {
|
|
971
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
972
|
+
yield this.createClient(applicant);
|
|
973
|
+
const client = this.getBrowserClient(applicant);
|
|
974
|
+
return client.getWindowSize();
|
|
975
|
+
});
|
|
976
|
+
}
|
|
977
|
+
savePDF(applicant, options) {
|
|
978
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
979
|
+
yield this.createClient(applicant);
|
|
980
|
+
const client = this.getBrowserClient(applicant);
|
|
981
|
+
const { filepath } = options, restOptions = __rest(options, ["filepath"]);
|
|
982
|
+
return client.savePDF(filepath, restOptions);
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
addValue(applicant, xpath, value) {
|
|
986
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
987
|
+
yield this.createClient(applicant);
|
|
988
|
+
const client = this.getBrowserClient(applicant);
|
|
989
|
+
const selector = yield client.$(xpath);
|
|
990
|
+
return selector.addValue(value);
|
|
991
|
+
});
|
|
992
|
+
}
|
|
993
|
+
doubleClick(applicant, xpath) {
|
|
994
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
995
|
+
yield this.createClient(applicant);
|
|
996
|
+
const client = this.getBrowserClient(applicant);
|
|
997
|
+
const selector = yield client.$(xpath);
|
|
998
|
+
return selector.doubleClick();
|
|
999
|
+
});
|
|
1000
|
+
}
|
|
1001
|
+
isClickable(applicant, xpath) {
|
|
1002
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1003
|
+
yield this.createClient(applicant);
|
|
1004
|
+
const client = this.getBrowserClient(applicant);
|
|
1005
|
+
const selector = yield client.$(xpath);
|
|
1006
|
+
return selector.isClickable();
|
|
1007
|
+
});
|
|
1008
|
+
}
|
|
1009
|
+
waitForClickable(applicant, xpath, timeout) {
|
|
1010
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1011
|
+
yield this.createClient(applicant);
|
|
1012
|
+
const client = this.getBrowserClient(applicant);
|
|
1013
|
+
const selector = yield client.$(xpath);
|
|
1014
|
+
return selector.waitForClickable({ timeout });
|
|
1015
|
+
});
|
|
1016
|
+
}
|
|
1017
|
+
isFocused(applicant, xpath) {
|
|
1018
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1019
|
+
yield this.createClient(applicant);
|
|
1020
|
+
const client = this.getBrowserClient(applicant);
|
|
1021
|
+
const selector = yield client.$(xpath);
|
|
1022
|
+
return selector.isFocused();
|
|
1023
|
+
});
|
|
1024
|
+
}
|
|
1025
|
+
isStable(applicant, xpath) {
|
|
1026
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1027
|
+
yield this.createClient(applicant);
|
|
1028
|
+
const client = this.getBrowserClient(applicant);
|
|
1029
|
+
const selector = yield client.$(xpath);
|
|
1030
|
+
return selector.isStable();
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
waitForEnabled(applicant, xpath, timeout) {
|
|
1034
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1035
|
+
yield this.createClient(applicant);
|
|
1036
|
+
const client = this.getBrowserClient(applicant);
|
|
1037
|
+
const selector = yield client.$(xpath);
|
|
1038
|
+
return selector.waitForEnabled({ timeout });
|
|
1039
|
+
});
|
|
1040
|
+
}
|
|
1041
|
+
waitForStable(applicant, xpath, timeout) {
|
|
1042
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1043
|
+
yield this.createClient(applicant);
|
|
1044
|
+
const client = this.getBrowserClient(applicant);
|
|
1045
|
+
const selector = yield client.$(xpath);
|
|
1046
|
+
return selector.waitForStable({ timeout });
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
888
1049
|
}
|
|
889
1050
|
exports.SeleniumPlugin = SeleniumPlugin;
|
|
890
1051
|
function seleniumProxy(config) {
|
|
891
1052
|
return new SeleniumPlugin(config);
|
|
892
1053
|
}
|
|
1054
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testring/plugin-selenium-driver",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"typings": "./src/index.ts",
|
|
6
6
|
"repository": {
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@nullcc/code-coverage-client": "1.4.2",
|
|
14
|
-
"@testring/child-process": "0.7.
|
|
15
|
-
"@testring/dwnld-collector-crx": "0.7.
|
|
16
|
-
"@testring/logger": "0.7.
|
|
17
|
-
"@testring/plugin-api": "0.7.
|
|
18
|
-
"@testring/types": "0.7.
|
|
14
|
+
"@testring/child-process": "0.7.3",
|
|
15
|
+
"@testring/dwnld-collector-crx": "0.7.3",
|
|
16
|
+
"@testring/logger": "0.7.3",
|
|
17
|
+
"@testring/plugin-api": "0.7.3",
|
|
18
|
+
"@testring/types": "0.7.3",
|
|
19
19
|
"@types/deepmerge": "2.2.3",
|
|
20
20
|
"@types/node": "22.8.5",
|
|
21
21
|
"@wdio/types": "9.2.2",
|
package/src/plugin/index.ts
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import {SeleniumPluginConfig} from '../types';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
IBrowserProxyPlugin,
|
|
4
|
+
SavePdfOptions,
|
|
5
|
+
WindowFeaturesConfig,
|
|
6
|
+
} from '@testring/types';
|
|
3
7
|
|
|
4
8
|
import {ChildProcess} from 'child_process';
|
|
5
9
|
|
|
6
10
|
import {remote} from 'webdriverio';
|
|
7
11
|
import * as deepmerge from 'deepmerge';
|
|
8
12
|
|
|
9
|
-
import {
|
|
13
|
+
import {spawnWithPipes} from '@testring/child-process';
|
|
10
14
|
import {loggerClient} from '@testring/logger';
|
|
11
15
|
import {getCrxBase64} from '@testring/dwnld-collector-crx';
|
|
12
16
|
import {CDPCoverageCollector} from '@nullcc/code-coverage-client';
|
|
13
17
|
|
|
14
18
|
import type {Cookie} from '@wdio/protocols';
|
|
15
|
-
import type {
|
|
16
|
-
ClickOptions,
|
|
17
|
-
MockFilterOptions,
|
|
18
|
-
} from 'webdriverio';
|
|
19
|
+
import type {ClickOptions, MockFilterOptions} from 'webdriverio';
|
|
19
20
|
import type {JsonCompatible} from '@wdio/types';
|
|
20
21
|
import type {RespondWithOptions} from 'webdriverio/build/utils/interception/types';
|
|
21
22
|
import webdriver from 'webdriver';
|
|
@@ -43,7 +44,7 @@ const DEFAULT_CONFIG: SeleniumPluginConfig = {
|
|
|
43
44
|
// for local ChromeDriver
|
|
44
45
|
args: [] as string[],
|
|
45
46
|
},
|
|
46
|
-
'wdio:enforceWebDriverClassic': true
|
|
47
|
+
'wdio:enforceWebDriverClassic': true,
|
|
47
48
|
},
|
|
48
49
|
cdpCoverage: false,
|
|
49
50
|
};
|
|
@@ -106,7 +107,8 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
106
107
|
mergedConfig.hostname = mergedConfig.host;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
const googleChromeOptions =
|
|
110
|
+
const googleChromeOptions =
|
|
111
|
+
mergedConfig.capabilities?.['goog:chromeOptions'];
|
|
110
112
|
if (googleChromeOptions?.args?.includes('--headless=new')) {
|
|
111
113
|
const extensions = googleChromeOptions.extensions;
|
|
112
114
|
const dowldMonitorCrx = getCrxBase64();
|
|
@@ -121,19 +123,21 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
121
123
|
}
|
|
122
124
|
|
|
123
125
|
private initIntervals() {
|
|
124
|
-
if (this.config.
|
|
125
|
-
this.clientCheckInterval
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
if (this.config.workerLimit !== 'local') {
|
|
127
|
+
if (this.config.clientCheckInterval > 0) {
|
|
128
|
+
this.clientCheckInterval = setInterval(
|
|
129
|
+
() => this.checkClientsTimeout(),
|
|
130
|
+
this.config.clientCheckInterval,
|
|
131
|
+
);
|
|
132
|
+
}
|
|
130
133
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
process.on('exit', () => {
|
|
135
|
+
clearInterval(this.clientCheckInterval as NodeJS.Timeout);
|
|
136
|
+
this.stopAllSessions().catch((err) => {
|
|
137
|
+
this.logger.error('Clean process exit failed', err);
|
|
138
|
+
});
|
|
135
139
|
});
|
|
136
|
-
}
|
|
140
|
+
}
|
|
137
141
|
}
|
|
138
142
|
|
|
139
143
|
private stopAllSessions() {
|
|
@@ -174,7 +178,7 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
174
178
|
this.logger.debug('Init local selenium server');
|
|
175
179
|
|
|
176
180
|
try {
|
|
177
|
-
this.localSelenium =
|
|
181
|
+
this.localSelenium = spawnWithPipes('java', [
|
|
178
182
|
...this.getChromeDriverArgs(),
|
|
179
183
|
'-jar',
|
|
180
184
|
seleniumJarPath,
|
|
@@ -421,6 +425,8 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
421
425
|
|
|
422
426
|
public async kill() {
|
|
423
427
|
this.logger.debug('Kill command is called');
|
|
428
|
+
|
|
429
|
+
// Close all browser sessions
|
|
424
430
|
for (const applicant of this.browserClients.keys()) {
|
|
425
431
|
try {
|
|
426
432
|
await this.end(applicant);
|
|
@@ -429,8 +435,59 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
429
435
|
}
|
|
430
436
|
}
|
|
431
437
|
|
|
438
|
+
// If using 'local' mode, stop all active sessions
|
|
439
|
+
if (this.config.workerLimit === 'local') {
|
|
440
|
+
await this.stopAllSessions();
|
|
441
|
+
}
|
|
442
|
+
|
|
432
443
|
if (this.localSelenium) {
|
|
433
|
-
|
|
444
|
+
// remove listener
|
|
445
|
+
if (this.localSelenium.stderr) {
|
|
446
|
+
this.localSelenium.stderr.removeAllListeners('data');
|
|
447
|
+
this.localSelenium.stdout?.removeAllListeners();
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Ensure all pipes are closed
|
|
451
|
+
this.localSelenium.stdout?.destroy();
|
|
452
|
+
this.localSelenium.stderr?.destroy();
|
|
453
|
+
this.localSelenium.stdin?.destroy();
|
|
454
|
+
|
|
455
|
+
this.logger.debug(
|
|
456
|
+
`Stopping local Selenium server (PID: ${this.localSelenium.pid})`,
|
|
457
|
+
);
|
|
458
|
+
|
|
459
|
+
// Try SIGTERM first
|
|
460
|
+
this.localSelenium.kill('SIGTERM');
|
|
461
|
+
|
|
462
|
+
// Wait for exit event with a timeout (ensures it does not hang forever)
|
|
463
|
+
const waitForExit = new Promise<void>((resolve) => {
|
|
464
|
+
this.localSelenium.once('exit', () => {
|
|
465
|
+
this.logger.debug('Selenium process exited.');
|
|
466
|
+
resolve();
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// Force kill if not exiting within 3 seconds
|
|
471
|
+
const forceKill = new Promise<void>((resolve) => {
|
|
472
|
+
setTimeout(() => {
|
|
473
|
+
if (!this.localSelenium.killed) {
|
|
474
|
+
this.logger.warn(
|
|
475
|
+
`Selenium did not exit in time. Sending SIGKILL.`,
|
|
476
|
+
);
|
|
477
|
+
this.localSelenium.kill('SIGKILL');
|
|
478
|
+
}
|
|
479
|
+
resolve();
|
|
480
|
+
}, 3000);
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
// Wait for either normal exit or force kill
|
|
484
|
+
await Promise.race([waitForExit, forceKill]);
|
|
485
|
+
|
|
486
|
+
this.localSelenium.removeAllListeners();
|
|
487
|
+
|
|
488
|
+
this.logger.debug(
|
|
489
|
+
'Selenium process and all associated pipes closed.',
|
|
490
|
+
);
|
|
434
491
|
}
|
|
435
492
|
}
|
|
436
493
|
|
|
@@ -450,7 +507,9 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
450
507
|
const client = this.getBrowserClient(applicant);
|
|
451
508
|
|
|
452
509
|
const element = await client.$(selector);
|
|
453
|
-
return options && Object.keys(options).length > 0
|
|
510
|
+
return options && Object.keys(options).length > 0
|
|
511
|
+
? element.click(options)
|
|
512
|
+
: element.click();
|
|
454
513
|
}
|
|
455
514
|
|
|
456
515
|
public async getSize(applicant: string, selector: string) {
|
|
@@ -562,7 +621,7 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
562
621
|
return client.getTitle();
|
|
563
622
|
}
|
|
564
623
|
|
|
565
|
-
public async
|
|
624
|
+
public async clearValue(applicant: string, xpath: string) {
|
|
566
625
|
await this.createClient(applicant);
|
|
567
626
|
const client = this.getBrowserClient(applicant);
|
|
568
627
|
|
|
@@ -991,55 +1050,36 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
991
1050
|
return selector.selectByAttribute(attribute, value);
|
|
992
1051
|
}
|
|
993
1052
|
|
|
994
|
-
|
|
995
|
-
public async gridProxyDetails(applicant: string) {
|
|
1053
|
+
public async gridTestSession(applicant: string) {
|
|
996
1054
|
await this.createClient(applicant);
|
|
997
1055
|
const client = this.getBrowserClient(applicant);
|
|
998
1056
|
|
|
999
1057
|
if (this.localSelenium) {
|
|
1000
1058
|
return {
|
|
1059
|
+
sessionId: client.sessionId,
|
|
1060
|
+
host: this.config.host,
|
|
1061
|
+
port: this.config.port,
|
|
1001
1062
|
localSelenium: true,
|
|
1002
1063
|
};
|
|
1003
1064
|
}
|
|
1004
1065
|
|
|
1005
|
-
return client.
|
|
1066
|
+
return client.gridTestSession(client.sessionId);
|
|
1006
1067
|
}
|
|
1007
1068
|
|
|
1008
|
-
|
|
1009
|
-
public async gridTestSession(applicant: string) {
|
|
1069
|
+
public async getHubConfig(applicant: string) {
|
|
1010
1070
|
await this.createClient(applicant);
|
|
1011
1071
|
const client = this.getBrowserClient(applicant);
|
|
1012
1072
|
|
|
1013
1073
|
if (this.localSelenium) {
|
|
1014
1074
|
return {
|
|
1075
|
+
sessionId: client.sessionId,
|
|
1076
|
+
host: this.config.host,
|
|
1077
|
+
port: this.config.port,
|
|
1015
1078
|
localSelenium: true,
|
|
1016
1079
|
};
|
|
1017
1080
|
}
|
|
1018
1081
|
|
|
1019
|
-
return client.
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
// @deprecated WAT-1872
|
|
1023
|
-
public async getGridNodeDetails(applicant: string) {
|
|
1024
|
-
await this.createClient(applicant);
|
|
1025
|
-
const client = this.getBrowserClient(applicant);
|
|
1026
|
-
|
|
1027
|
-
const testSession = await this.gridTestSession(applicant);
|
|
1028
|
-
|
|
1029
|
-
if (testSession && !testSession.localSelenium) {
|
|
1030
|
-
const proxyDetails = await client.gridProxyDetails(applicant);
|
|
1031
|
-
|
|
1032
|
-
delete testSession.msg;
|
|
1033
|
-
delete testSession.success;
|
|
1034
|
-
|
|
1035
|
-
delete proxyDetails.msg;
|
|
1036
|
-
delete proxyDetails.success;
|
|
1037
|
-
delete proxyDetails.id;
|
|
1038
|
-
|
|
1039
|
-
return {...testSession, ...proxyDetails};
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
|
-
return testSession;
|
|
1082
|
+
return client.getHubConfig();
|
|
1043
1083
|
}
|
|
1044
1084
|
|
|
1045
1085
|
/**
|
|
@@ -1075,6 +1115,142 @@ export class SeleniumPlugin implements IBrowserProxyPlugin {
|
|
|
1075
1115
|
},
|
|
1076
1116
|
} as any);
|
|
1077
1117
|
}
|
|
1118
|
+
|
|
1119
|
+
public async status(applicant: string) {
|
|
1120
|
+
await this.createClient(applicant);
|
|
1121
|
+
const client = this.getBrowserClient(applicant);
|
|
1122
|
+
|
|
1123
|
+
return client.status();
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
public async back(applicant: string) {
|
|
1127
|
+
await this.createClient(applicant);
|
|
1128
|
+
const client = this.getBrowserClient(applicant);
|
|
1129
|
+
|
|
1130
|
+
return client.back();
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
public async forward(applicant: string) {
|
|
1134
|
+
await this.createClient(applicant);
|
|
1135
|
+
const client = this.getBrowserClient(applicant);
|
|
1136
|
+
|
|
1137
|
+
return client.forward();
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
public async getActiveElement(applicant: string) {
|
|
1141
|
+
await this.createClient(applicant);
|
|
1142
|
+
const client = this.getBrowserClient(applicant);
|
|
1143
|
+
|
|
1144
|
+
return client.getActiveElement();
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
public async getLocation(applicant: string, xpath: string) {
|
|
1148
|
+
await this.createClient(applicant);
|
|
1149
|
+
const client = this.getBrowserClient(applicant);
|
|
1150
|
+
const element = client.$(xpath);
|
|
1151
|
+
return element.getLocation();
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
public async setTimeZone(applicant: string, timeZone: string) {
|
|
1155
|
+
await this.createClient(applicant);
|
|
1156
|
+
const client = this.getBrowserClient(applicant);
|
|
1157
|
+
return client.setTimeZone(timeZone);
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
public async getWindowSize(applicant: string) {
|
|
1161
|
+
await this.createClient(applicant);
|
|
1162
|
+
const client = this.getBrowserClient(applicant);
|
|
1163
|
+
return client.getWindowSize();
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
public async savePDF(applicant: string, options: SavePdfOptions) {
|
|
1167
|
+
await this.createClient(applicant);
|
|
1168
|
+
const client = this.getBrowserClient(applicant);
|
|
1169
|
+
|
|
1170
|
+
const {filepath, ...restOptions} = options;
|
|
1171
|
+
|
|
1172
|
+
return client.savePDF(filepath, restOptions);
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
public async addValue(
|
|
1176
|
+
applicant: string,
|
|
1177
|
+
xpath: string,
|
|
1178
|
+
value: string | number,
|
|
1179
|
+
) {
|
|
1180
|
+
await this.createClient(applicant);
|
|
1181
|
+
const client = this.getBrowserClient(applicant);
|
|
1182
|
+
|
|
1183
|
+
const selector = await client.$(xpath);
|
|
1184
|
+
return selector.addValue(value);
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
public async doubleClick(applicant: string, xpath: string) {
|
|
1188
|
+
await this.createClient(applicant);
|
|
1189
|
+
const client = this.getBrowserClient(applicant);
|
|
1190
|
+
|
|
1191
|
+
const selector = await client.$(xpath);
|
|
1192
|
+
return selector.doubleClick();
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
public async isClickable(applicant: string, xpath: string) {
|
|
1196
|
+
await this.createClient(applicant);
|
|
1197
|
+
const client = this.getBrowserClient(applicant);
|
|
1198
|
+
|
|
1199
|
+
const selector = await client.$(xpath);
|
|
1200
|
+
return selector.isClickable();
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
public async waitForClickable(
|
|
1204
|
+
applicant: string,
|
|
1205
|
+
xpath: string,
|
|
1206
|
+
timeout: number,
|
|
1207
|
+
) {
|
|
1208
|
+
await this.createClient(applicant);
|
|
1209
|
+
const client = this.getBrowserClient(applicant);
|
|
1210
|
+
|
|
1211
|
+
const selector = await client.$(xpath);
|
|
1212
|
+
return selector.waitForClickable({timeout});
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
public async isFocused(applicant: string, xpath: string) {
|
|
1216
|
+
await this.createClient(applicant);
|
|
1217
|
+
const client = this.getBrowserClient(applicant);
|
|
1218
|
+
|
|
1219
|
+
const selector = await client.$(xpath);
|
|
1220
|
+
return selector.isFocused();
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
public async isStable(applicant: string, xpath: string) {
|
|
1224
|
+
await this.createClient(applicant);
|
|
1225
|
+
const client = this.getBrowserClient(applicant);
|
|
1226
|
+
|
|
1227
|
+
const selector = await client.$(xpath);
|
|
1228
|
+
return selector.isStable();
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
public async waitForEnabled(
|
|
1232
|
+
applicant: string,
|
|
1233
|
+
xpath: string,
|
|
1234
|
+
timeout: number,
|
|
1235
|
+
) {
|
|
1236
|
+
await this.createClient(applicant);
|
|
1237
|
+
const client = this.getBrowserClient(applicant);
|
|
1238
|
+
|
|
1239
|
+
const selector = await client.$(xpath);
|
|
1240
|
+
return selector.waitForEnabled({timeout});
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
public async waitForStable(
|
|
1244
|
+
applicant: string,
|
|
1245
|
+
xpath: string,
|
|
1246
|
+
timeout: number,
|
|
1247
|
+
) {
|
|
1248
|
+
await this.createClient(applicant);
|
|
1249
|
+
const client = this.getBrowserClient(applicant);
|
|
1250
|
+
|
|
1251
|
+
const selector = await client.$(xpath);
|
|
1252
|
+
return selector.waitForStable({timeout});
|
|
1253
|
+
}
|
|
1078
1254
|
}
|
|
1079
1255
|
|
|
1080
1256
|
export default function seleniumProxy(config: SeleniumPluginConfig) {
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {Capabilities} from '@wdio/types';
|
|
2
2
|
|
|
3
3
|
export type SeleniumPluginConfig = Capabilities.WebdriverIOConfig & {
|
|
4
4
|
chromeDriverPath?: string;
|
|
@@ -8,4 +8,5 @@ export type SeleniumPluginConfig = Capabilities.WebdriverIOConfig & {
|
|
|
8
8
|
host?: string; // fallback for configuration. In WebdriverIO 5 field host renamed to hostname
|
|
9
9
|
desiredCapabilities?: Capabilities.RequestedStandaloneCapabilities[]; // fallback for configuration. In WebdriverIO 5 field renamed
|
|
10
10
|
cdpCoverage: boolean;
|
|
11
|
+
workerLimit?: number | 'local';
|
|
11
12
|
};
|