@wdio/browserstack-service 7.32.4 → 7.33.0
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/build/accessibility-handler.d.ts +39 -0
- package/build/accessibility-handler.d.ts.map +1 -0
- package/build/accessibility-handler.js +258 -0
- package/build/constants.d.ts +3 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +6 -2
- package/build/cucumber-types.d.ts +17 -0
- package/build/cucumber-types.d.ts.map +1 -1
- package/build/index.d.ts +5 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -1
- package/build/insights-handler.d.ts +19 -3
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +274 -17
- package/build/launcher.d.ts +4 -0
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +152 -0
- package/build/log4jsAppender.d.ts +2 -0
- package/build/log4jsAppender.d.ts.map +1 -0
- package/build/log4jsAppender.js +26 -0
- package/build/logPatcher.d.ts +13 -0
- package/build/logPatcher.d.ts.map +1 -0
- package/build/logPatcher.js +43 -0
- package/build/logReportingAPI.d.ts +12 -0
- package/build/logReportingAPI.d.ts.map +1 -0
- package/build/logReportingAPI.js +61 -0
- package/build/reporter.d.ts +6 -1
- package/build/reporter.d.ts.map +1 -1
- package/build/reporter.js +42 -1
- package/build/scripts/test-event-scripts.d.ts +10 -0
- package/build/scripts/test-event-scripts.d.ts.map +1 -0
- package/build/scripts/test-event-scripts.js +73 -0
- package/build/service.d.ts +5 -3
- package/build/service.d.ts.map +1 -1
- package/build/service.js +24 -4
- package/build/types.d.ts +34 -1
- package/build/types.d.ts.map +1 -1
- package/build/util.d.ts +32 -0
- package/build/util.d.ts.map +1 -1
- package/build/util.js +313 -2
- package/package.json +6 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log4jsAppender.d.ts","sourceRoot":"","sources":["../src/log4jsAppender.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS,WAAY,GAAG,WAAW,GAAG,KAAG,QAMrD,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configure = void 0;
|
|
7
|
+
const logReportingAPI_js_1 = __importDefault(require("./logReportingAPI.js"));
|
|
8
|
+
const BSTestOpsLogger = new logReportingAPI_js_1.default({});
|
|
9
|
+
//Disabling eslint here as there params can be used later
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11
|
+
function BSTestOpsLog4JSAppender(layout, timezoneOffset) {
|
|
12
|
+
return (loggingEvent) => {
|
|
13
|
+
BSTestOpsLogger.log({
|
|
14
|
+
level: loggingEvent.level ? loggingEvent.level.levelStr : null,
|
|
15
|
+
message: loggingEvent.data ? loggingEvent.data.join(' ') : null
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const configure = (config, layouts) => {
|
|
20
|
+
let layout = layouts.colouredLayout;
|
|
21
|
+
if (config.layout) {
|
|
22
|
+
layout = layouts.layout(config.layout.type, config.layout);
|
|
23
|
+
}
|
|
24
|
+
return BSTestOpsLog4JSAppender(layout, config.timezoneOffset);
|
|
25
|
+
};
|
|
26
|
+
exports.configure = configure;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Transport from 'winston-transport';
|
|
2
|
+
declare class logPatcher extends Transport {
|
|
3
|
+
constructor(opts: any);
|
|
4
|
+
logToTestOps: (level?: string, message?: string[]) => void;
|
|
5
|
+
trace: (...message: any) => void;
|
|
6
|
+
debug: (...message: any) => void;
|
|
7
|
+
info: (...message: any) => void;
|
|
8
|
+
warn: (...message: any) => void;
|
|
9
|
+
error: (...message: any) => void;
|
|
10
|
+
log: (...message: any) => void;
|
|
11
|
+
}
|
|
12
|
+
export default logPatcher;
|
|
13
|
+
//# sourceMappingURL=logPatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logPatcher.d.ts","sourceRoot":"","sources":["../src/logPatcher.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAMzC,cAAM,UAAW,SAAQ,SAAS;gBAClB,IAAI,EAAE,GAAG;IAIrB,YAAY,+CAQX;IAGD,KAAK,eAAgB,GAAG,UAEvB;IAED,KAAK,eAAgB,GAAG,UAEvB;IAED,IAAI,eAAgB,GAAG,UAEtB;IAED,IAAI,eAAgB,GAAG,UAEtB;IAED,KAAK,eAAgB,GAAG,UAEvB;IAED,GAAG,eAAgB,GAAG,UAErB;CACJ;AACD,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const winston_transport_1 = __importDefault(require("winston-transport"));
|
|
7
|
+
const LOG_LEVELS = {
|
|
8
|
+
INFO: 'INFO', ERROR: 'ERROR', DEBUG: 'DEBUG', TRACE: 'TRACE', WARN: 'WARN',
|
|
9
|
+
};
|
|
10
|
+
class logPatcher extends winston_transport_1.default {
|
|
11
|
+
constructor(opts) {
|
|
12
|
+
super(opts);
|
|
13
|
+
this.logToTestOps = (level = LOG_LEVELS.INFO, message = ['']) => {
|
|
14
|
+
process.emit(`bs:addLog:${process.pid}`, {
|
|
15
|
+
timestamp: new Date().toISOString(),
|
|
16
|
+
level: level.toUpperCase(),
|
|
17
|
+
message: `"${message.join(', ')}"`,
|
|
18
|
+
kind: 'TEST_LOG',
|
|
19
|
+
http_response: {}
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
/* Patching this would show user an extended trace on their cli */
|
|
23
|
+
this.trace = (...message) => {
|
|
24
|
+
this.logToTestOps(LOG_LEVELS.TRACE, message);
|
|
25
|
+
};
|
|
26
|
+
this.debug = (...message) => {
|
|
27
|
+
this.logToTestOps(LOG_LEVELS.DEBUG, message);
|
|
28
|
+
};
|
|
29
|
+
this.info = (...message) => {
|
|
30
|
+
this.logToTestOps(LOG_LEVELS.INFO, message);
|
|
31
|
+
};
|
|
32
|
+
this.warn = (...message) => {
|
|
33
|
+
this.logToTestOps(LOG_LEVELS.WARN, message);
|
|
34
|
+
};
|
|
35
|
+
this.error = (...message) => {
|
|
36
|
+
this.logToTestOps(LOG_LEVELS.ERROR, message);
|
|
37
|
+
};
|
|
38
|
+
this.log = (...message) => {
|
|
39
|
+
this.logToTestOps(LOG_LEVELS.INFO, message);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.default = logPatcher;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Transport = require('winston-transport');
|
|
2
|
+
declare class logReportingAPI extends Transport {
|
|
3
|
+
log(info: any, callback?: undefined | Function): void;
|
|
4
|
+
logToTestOps: (level?: string, message?: string, consoleLog?: boolean) => void;
|
|
5
|
+
trace: (message: any) => void;
|
|
6
|
+
debug: (message: any) => void;
|
|
7
|
+
info: (message: any) => void;
|
|
8
|
+
warn: (message: any) => void;
|
|
9
|
+
error: (message: any) => void;
|
|
10
|
+
}
|
|
11
|
+
export default logReportingAPI;
|
|
12
|
+
//# sourceMappingURL=logReportingAPI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logReportingAPI.d.ts","sourceRoot":"","sources":["../src/logReportingAPI.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,GAAG,QAAQ,mBAAmB,CAAC,CAAC;AAWhD,cAAM,eAAgB,SAAQ,SAAS;IACnC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,SAAS,GAAC,QAAoB;IAkBvD,YAAY,mEAWX;IAGD,KAAK,YAAa,GAAG,UAEpB;IAED,KAAK,YAAa,GAAG,UAEpB;IAED,IAAI,YAAa,GAAG,UAEnB;IAED,IAAI,YAAa,GAAG,UAEnB;IAED,KAAK,YAAa,GAAG,UAEpB;CACJ;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Transport = require("winston-transport");
|
|
4
|
+
const constants_js_1 = require("./constants.js");
|
|
5
|
+
const LOG_LEVELS = {
|
|
6
|
+
INFO: 'INFO',
|
|
7
|
+
ERROR: 'ERROR',
|
|
8
|
+
DEBUG: 'DEBUG',
|
|
9
|
+
TRACE: 'TRACE',
|
|
10
|
+
WARN: 'WARN',
|
|
11
|
+
};
|
|
12
|
+
class logReportingAPI extends Transport {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.logToTestOps = (level = LOG_LEVELS.INFO, message = '', consoleLog = true) => {
|
|
16
|
+
if (consoleLog) {
|
|
17
|
+
constants_js_1.consoleHolder[level.toLowerCase()](message);
|
|
18
|
+
}
|
|
19
|
+
process.emit(`bs:addLog:${process.pid}`, {
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
level: level.toUpperCase(),
|
|
22
|
+
message: message,
|
|
23
|
+
kind: 'TEST_LOG',
|
|
24
|
+
http_response: {}
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
/* Patching this would show user an extended trace on their cli */
|
|
28
|
+
this.trace = (message) => {
|
|
29
|
+
this.logToTestOps(LOG_LEVELS.TRACE, message);
|
|
30
|
+
};
|
|
31
|
+
this.debug = (message) => {
|
|
32
|
+
this.logToTestOps(LOG_LEVELS.DEBUG, message);
|
|
33
|
+
};
|
|
34
|
+
this.info = (message) => {
|
|
35
|
+
this.logToTestOps(LOG_LEVELS.INFO, message);
|
|
36
|
+
};
|
|
37
|
+
this.warn = (message) => {
|
|
38
|
+
this.logToTestOps(LOG_LEVELS.WARN, message);
|
|
39
|
+
};
|
|
40
|
+
this.error = (message) => {
|
|
41
|
+
this.logToTestOps(LOG_LEVELS.ERROR, message);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
log(info, callback = undefined) {
|
|
45
|
+
setImmediate(() => {
|
|
46
|
+
this.emit('logged', info);
|
|
47
|
+
});
|
|
48
|
+
if (typeof (info) === 'object') {
|
|
49
|
+
/* From log appender */
|
|
50
|
+
this.logToTestOps(info.level || LOG_LEVELS.INFO, info.message, false);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
/* From default console */
|
|
54
|
+
this.logToTestOps(LOG_LEVELS.INFO, info);
|
|
55
|
+
}
|
|
56
|
+
if (callback && typeof callback === 'function') {
|
|
57
|
+
callback();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.default = logReportingAPI;
|
package/build/reporter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import WDIOReporter, { SuiteStats, TestStats, RunnerStats, HookStats } from '@wdio/reporter';
|
|
2
|
-
import { TestMeta } from './types';
|
|
2
|
+
import type { CurrentRunInfo, StdLog, TestMeta } from './types';
|
|
3
3
|
declare class _TestReporter extends WDIOReporter {
|
|
4
4
|
private _capabilities;
|
|
5
5
|
private _config?;
|
|
@@ -11,7 +11,12 @@ declare class _TestReporter extends WDIOReporter {
|
|
|
11
11
|
private static _tests;
|
|
12
12
|
private _gitConfigPath?;
|
|
13
13
|
private _gitConfigured;
|
|
14
|
+
private _currentHook;
|
|
15
|
+
private _currentTest;
|
|
14
16
|
onRunnerStart(runnerStats: RunnerStats): Promise<void>;
|
|
17
|
+
registerListeners(): void;
|
|
18
|
+
appendTestItemLog(stdLog: StdLog): Promise<void>;
|
|
19
|
+
setCurrentHook(hookDetails: CurrentRunInfo): void;
|
|
15
20
|
configureGit(): Promise<void>;
|
|
16
21
|
static getTests(): Record<string, TestMeta>;
|
|
17
22
|
onSuiteStart(suiteStats: SuiteStats): void;
|
package/build/reporter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAO5F,OAAO,
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAO5F,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,EAAY,QAAQ,EAAc,MAAM,SAAS,CAAA;AAczG,cAAM,aAAc,SAAQ,YAAY;IACpC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAC,CAAyC;IACzD,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAA+B;IACpD,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IAEnC,aAAa,CAAE,WAAW,EAAE,WAAW;IAS7C,iBAAiB;IAQJ,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAc7C,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,YAAY;IAWlB,MAAM,CAAC,QAAQ;IAIf,YAAY,CAAE,UAAU,EAAE,UAAU;IAoBpC,UAAU;IAIV,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAe1C,SAAS,CAAC,SAAS,EAAE,SAAS;IAQ9B,WAAW,CAAC,SAAS,EAAE,SAAS;IAahC,WAAW,CAAC,SAAS,EAAE,SAAS;IAehC,SAAS,CAAC,SAAS,EAAE,SAAS;IAqBpC,iBAAiB,CAAC,SAAS,EAAE,SAAS;IAIhC,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAC,SAAS,EAAE,SAAS,EAAE,MAAM;IAkFlE,UAAU,CAAE,SAAS,EAAE,SAAS;CAQzC;AAED,QAAA,MAAM,YAAY,EAAE,OAAO,aAAoD,CAAA;AAC/E,KAAK,YAAY,GAAG,aAAa,CAAA;AACjC,eAAe,YAAY,CAAA"}
|
package/build/reporter.js
CHANGED
|
@@ -19,6 +19,8 @@ class _TestReporter extends reporter_1.default {
|
|
|
19
19
|
this._requestQueueHandler = request_handler_1.default.getInstance();
|
|
20
20
|
this._suites = [];
|
|
21
21
|
this._gitConfigured = false;
|
|
22
|
+
this._currentHook = {};
|
|
23
|
+
this._currentTest = {};
|
|
22
24
|
}
|
|
23
25
|
async onRunnerStart(runnerStats) {
|
|
24
26
|
this._capabilities = runnerStats.capabilities;
|
|
@@ -27,6 +29,41 @@ class _TestReporter extends reporter_1.default {
|
|
|
27
29
|
if (typeof this._config.testObservability !== 'undefined')
|
|
28
30
|
this._observability = this._config.testObservability;
|
|
29
31
|
await this.configureGit();
|
|
32
|
+
this.registerListeners();
|
|
33
|
+
}
|
|
34
|
+
registerListeners() {
|
|
35
|
+
var _a;
|
|
36
|
+
if (((_a = this._config) === null || _a === void 0 ? void 0 : _a.framework) !== 'jasmine') {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
process.removeAllListeners(`bs:addLog:${process.pid}`);
|
|
40
|
+
process.on(`bs:addLog:${process.pid}`, this.appendTestItemLog.bind(this));
|
|
41
|
+
}
|
|
42
|
+
async appendTestItemLog(stdLog) {
|
|
43
|
+
if (this._currentHook.uuid && !this._currentHook.finished) {
|
|
44
|
+
stdLog.hook_run_uuid = this._currentHook.uuid;
|
|
45
|
+
}
|
|
46
|
+
else if (this._currentTest.uuid) {
|
|
47
|
+
stdLog.test_run_uuid = this._currentTest.uuid;
|
|
48
|
+
}
|
|
49
|
+
if (stdLog.hook_run_uuid || stdLog.test_run_uuid) {
|
|
50
|
+
await (0, util_1.pushDataToQueue)({
|
|
51
|
+
event_type: 'LogCreated',
|
|
52
|
+
logs: [stdLog]
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
setCurrentHook(hookDetails) {
|
|
57
|
+
if (hookDetails.finished) {
|
|
58
|
+
if (this._currentHook.uuid === hookDetails.uuid) {
|
|
59
|
+
this._currentHook.finished = true;
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this._currentHook = {
|
|
64
|
+
uuid: hookDetails.uuid,
|
|
65
|
+
finished: false
|
|
66
|
+
};
|
|
30
67
|
}
|
|
31
68
|
async configureGit() {
|
|
32
69
|
if (this._gitConfigured) {
|
|
@@ -92,8 +129,10 @@ class _TestReporter extends reporter_1.default {
|
|
|
92
129
|
return;
|
|
93
130
|
if (testStats.fullTitle === '<unknown test>')
|
|
94
131
|
return;
|
|
132
|
+
const uuid = (0, uuid_1.v4)();
|
|
133
|
+
this._currentTest.uuid = uuid;
|
|
95
134
|
_TestReporter._tests[testStats.fullTitle] = {
|
|
96
|
-
uuid:
|
|
135
|
+
uuid: uuid,
|
|
97
136
|
};
|
|
98
137
|
await this.sendTestRunEvent(testStats, 'TestRunStarted');
|
|
99
138
|
}
|
|
@@ -103,6 +142,7 @@ class _TestReporter extends reporter_1.default {
|
|
|
103
142
|
}
|
|
104
143
|
const identifier = this.getHookIdentifier(hookStats);
|
|
105
144
|
const hookId = (0, uuid_1.v4)();
|
|
145
|
+
this.setCurrentHook({ uuid: hookId });
|
|
106
146
|
_TestReporter._tests[identifier] = {
|
|
107
147
|
uuid: hookId,
|
|
108
148
|
startedAt: (new Date()).toISOString()
|
|
@@ -122,6 +162,7 @@ class _TestReporter extends reporter_1.default {
|
|
|
122
162
|
finishedAt: (new Date()).toISOString()
|
|
123
163
|
};
|
|
124
164
|
}
|
|
165
|
+
this.setCurrentHook({ uuid: _TestReporter._tests[identifier].uuid, finished: true });
|
|
125
166
|
if (!hookStats.state && !hookStats.error) {
|
|
126
167
|
hookStats.state = 'passed';
|
|
127
168
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function testStartEvent(): void;
|
|
2
|
+
export declare function testForceStop(): void;
|
|
3
|
+
export declare function testStop(this: any): void;
|
|
4
|
+
export declare function accessibilityResults(): Promise<Array<{
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}>>;
|
|
7
|
+
export declare function accessibilityResultsSummary(): Promise<{
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=test-event-scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-event-scripts.d.ts","sourceRoot":"","sources":["../../src/scripts/test-event-scripts.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,SAY7B;AAED,wBAAgB,aAAa,SAG5B;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,QAgBjC;AAED,wBAAgB,oBAAoB,IAAK,OAAO,CAAC,KAAK,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAAE,CAAC,CAAC,CAc/E;AAED,wBAAgB,2BAA2B,IAAK,OAAO,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAAE,CAAC,CAc/E"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accessibilityResultsSummary = exports.accessibilityResults = exports.testStop = exports.testForceStop = exports.testStartEvent = void 0;
|
|
4
|
+
function testStartEvent() {
|
|
5
|
+
const callback = arguments[arguments.length - 1];
|
|
6
|
+
const fn = () => {
|
|
7
|
+
window.addEventListener('A11Y_TAP_STARTED', fn2);
|
|
8
|
+
const e = new CustomEvent('A11Y_FORCE_START');
|
|
9
|
+
window.dispatchEvent(e);
|
|
10
|
+
};
|
|
11
|
+
const fn2 = () => {
|
|
12
|
+
window.removeEventListener('A11Y_TAP_STARTED', fn);
|
|
13
|
+
callback();
|
|
14
|
+
};
|
|
15
|
+
fn();
|
|
16
|
+
}
|
|
17
|
+
exports.testStartEvent = testStartEvent;
|
|
18
|
+
function testForceStop() {
|
|
19
|
+
const e = new CustomEvent('A11Y_FORCE_STOP');
|
|
20
|
+
window.dispatchEvent(e);
|
|
21
|
+
}
|
|
22
|
+
exports.testForceStop = testForceStop;
|
|
23
|
+
function testStop() {
|
|
24
|
+
const callback = arguments[arguments.length - 1];
|
|
25
|
+
this.res = null;
|
|
26
|
+
if (arguments[0].saveResults) {
|
|
27
|
+
window.addEventListener('A11Y_TAP_TRANSPORTER', (event) => {
|
|
28
|
+
window.tapTransporterData = event.detail;
|
|
29
|
+
this.res = window.tapTransporterData;
|
|
30
|
+
callback(this.res);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const e = new CustomEvent('A11Y_TEST_END', { detail: arguments[0] });
|
|
34
|
+
window.dispatchEvent(e);
|
|
35
|
+
if (arguments[0].saveResults !== true) {
|
|
36
|
+
callback();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.testStop = testStop;
|
|
40
|
+
function accessibilityResults() {
|
|
41
|
+
return new Promise(function (resolve, reject) {
|
|
42
|
+
try {
|
|
43
|
+
const event = new CustomEvent('A11Y_TAP_GET_RESULTS');
|
|
44
|
+
const fn = function (event) {
|
|
45
|
+
window.removeEventListener('A11Y_RESULTS_RESPONSE', fn);
|
|
46
|
+
resolve(event.detail.data);
|
|
47
|
+
};
|
|
48
|
+
window.addEventListener('A11Y_RESULTS_RESPONSE', fn);
|
|
49
|
+
window.dispatchEvent(event);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
reject();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
exports.accessibilityResults = accessibilityResults;
|
|
57
|
+
function accessibilityResultsSummary() {
|
|
58
|
+
return new Promise(function (resolve, reject) {
|
|
59
|
+
try {
|
|
60
|
+
const event = new CustomEvent('A11Y_TAP_GET_RESULTS_SUMMARY');
|
|
61
|
+
const fn = function (event) {
|
|
62
|
+
window.removeEventListener('A11Y_RESULTS_SUMMARY_RESPONSE', fn);
|
|
63
|
+
resolve(event.detail.summary);
|
|
64
|
+
};
|
|
65
|
+
window.addEventListener('A11Y_RESULTS_SUMMARY_RESPONSE', fn);
|
|
66
|
+
window.dispatchEvent(event);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
reject();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
exports.accessibilityResultsSummary = accessibilityResultsSummary;
|
package/build/service.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Services, Capabilities, Options, Frameworks } from '@wdio/types';
|
|
2
2
|
import type { Browser, MultiRemoteBrowser } from 'webdriverio';
|
|
3
3
|
import type { BrowserstackConfig, MultiRemoteAction } from './types';
|
|
4
|
-
import type { Pickle, Feature, ITestCaseHookParameter } from './cucumber-types';
|
|
4
|
+
import type { Pickle, Feature, ITestCaseHookParameter, CucumberHook } from './cucumber-types';
|
|
5
5
|
export default class BrowserstackService implements Services.ServiceInstance {
|
|
6
6
|
private _caps;
|
|
7
7
|
private _config;
|
|
@@ -17,6 +17,8 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
17
17
|
private _observability;
|
|
18
18
|
private _currentTest?;
|
|
19
19
|
private _insightsHandler?;
|
|
20
|
+
private _accessibility;
|
|
21
|
+
private _accessibilityHandler?;
|
|
20
22
|
constructor(options: BrowserstackConfig & Options.Testrunner, _caps: Capabilities.RemoteCapability, _config: Options.Testrunner);
|
|
21
23
|
_updateCaps(fn: (caps: Capabilities.Capabilities | Capabilities.DesiredCapabilities) => void): void;
|
|
22
24
|
beforeSession(config: Omit<Options.Testrunner, 'capabilities'>): void;
|
|
@@ -29,8 +31,8 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
29
31
|
* and `suite.fullTitle` is `undefined`, so no alternative to use for the job name.
|
|
30
32
|
*/
|
|
31
33
|
beforeSuite(suite: Frameworks.Suite): Promise<void>;
|
|
32
|
-
beforeHook(test: Frameworks.Test, context: any): Promise<void>;
|
|
33
|
-
afterHook(test: Frameworks.Test, context: unknown, result: Frameworks.TestResult): Promise<void>;
|
|
34
|
+
beforeHook(test: Frameworks.Test | CucumberHook, context: any): Promise<void>;
|
|
35
|
+
afterHook(test: Frameworks.Test | CucumberHook, context: unknown, result: Frameworks.TestResult): Promise<void>;
|
|
34
36
|
beforeTest(test: Frameworks.Test): Promise<void>;
|
|
35
37
|
afterTest(test: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
|
|
36
38
|
after(result: number): Promise<void>;
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAmB,MAAM,SAAS,CAAA;AAIrF,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/build/service.js
CHANGED
|
@@ -11,6 +11,7 @@ const insights_handler_1 = __importDefault(require("./insights-handler"));
|
|
|
11
11
|
const util_1 = require("./util");
|
|
12
12
|
const reporter_1 = __importDefault(require("./reporter"));
|
|
13
13
|
const performance_tester_1 = __importDefault(require("./performance-tester"));
|
|
14
|
+
const accessibility_handler_1 = __importDefault(require("./accessibility-handler"));
|
|
14
15
|
const log = (0, logger_1.default)('@wdio/browserstack-service');
|
|
15
16
|
class BrowserstackService {
|
|
16
17
|
constructor(options, _caps, _config) {
|
|
@@ -26,6 +27,7 @@ class BrowserstackService {
|
|
|
26
27
|
// added to maintain backward compatibility with webdriverIO v5
|
|
27
28
|
this._config || (this._config = this._options);
|
|
28
29
|
this._observability = this._options.testObservability;
|
|
30
|
+
this._accessibility = this._options.accessibility;
|
|
29
31
|
if (this._observability) {
|
|
30
32
|
(_a = this._config.reporters) === null || _a === void 0 ? void 0 : _a.push(reporter_1.default);
|
|
31
33
|
if (process.env.BROWSERSTACK_O11Y_PERF_MEASUREMENT) {
|
|
@@ -70,6 +72,7 @@ class BrowserstackService {
|
|
|
70
72
|
this._scenariosThatRan = [];
|
|
71
73
|
if (this._observability && this._browser) {
|
|
72
74
|
try {
|
|
75
|
+
(0, util_1.patchConsoleLogs)();
|
|
73
76
|
this._insightsHandler = new insights_handler_1.default(this._browser, this._browser.capabilities, this._isAppAutomate(), this._browser.sessionId, this._config.framework);
|
|
74
77
|
await this._insightsHandler.before();
|
|
75
78
|
/**
|
|
@@ -92,6 +95,15 @@ class BrowserstackService {
|
|
|
92
95
|
crash_reporter_1.default.uploadCrashReport(`Error in service class before function: ${err}`, err && err.stack);
|
|
93
96
|
}
|
|
94
97
|
}
|
|
98
|
+
if (this._browser && (0, util_1.isBrowserstackSession)(this._browser)) {
|
|
99
|
+
try {
|
|
100
|
+
this._accessibilityHandler = new accessibility_handler_1.default(this._browser, this._caps, this._isAppAutomate(), this._config.framework, this._accessibility, this._options.accessibilityOptions);
|
|
101
|
+
await this._accessibilityHandler.before();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
log.error(`[Accessibility Test Run] Error in service class before function: ${err}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
95
107
|
return await this._printSessionURL();
|
|
96
108
|
}
|
|
97
109
|
/**
|
|
@@ -102,7 +114,9 @@ class BrowserstackService {
|
|
|
102
114
|
* and `suite.fullTitle` is `undefined`, so no alternative to use for the job name.
|
|
103
115
|
*/
|
|
104
116
|
async beforeSuite(suite) {
|
|
117
|
+
var _a;
|
|
105
118
|
this._suiteTitle = suite.title;
|
|
119
|
+
(_a = this._accessibilityHandler) === null || _a === void 0 ? void 0 : _a.setSuiteFile(suite.file);
|
|
106
120
|
if (suite.title && suite.title !== 'Jasmine__TopLevel__Suite') {
|
|
107
121
|
await this._setSessionName(suite.title);
|
|
108
122
|
}
|
|
@@ -118,7 +132,7 @@ class BrowserstackService {
|
|
|
118
132
|
await ((_a = this._insightsHandler) === null || _a === void 0 ? void 0 : _a.afterHook(test, result));
|
|
119
133
|
}
|
|
120
134
|
async beforeTest(test) {
|
|
121
|
-
var _a, _b;
|
|
135
|
+
var _a, _b, _c;
|
|
122
136
|
this._currentTest = test;
|
|
123
137
|
let suiteTitle = this._suiteTitle;
|
|
124
138
|
if (test.fullName) {
|
|
@@ -135,15 +149,17 @@ class BrowserstackService {
|
|
|
135
149
|
await this._setSessionName(suiteTitle, test);
|
|
136
150
|
await this._setAnnotation(`Test: ${(_a = test.fullName) !== null && _a !== void 0 ? _a : test.title}`);
|
|
137
151
|
await ((_b = this._insightsHandler) === null || _b === void 0 ? void 0 : _b.beforeTest(test));
|
|
152
|
+
await ((_c = this._accessibilityHandler) === null || _c === void 0 ? void 0 : _c.beforeTest(suiteTitle, test));
|
|
138
153
|
}
|
|
139
154
|
async afterTest(test, context, results) {
|
|
140
|
-
var _a;
|
|
155
|
+
var _a, _b;
|
|
141
156
|
this._specsRan = true;
|
|
142
157
|
const { error, passed } = results;
|
|
143
158
|
if (!passed) {
|
|
144
159
|
this._failReasons.push((error && error.message) || 'Unknown Error');
|
|
145
160
|
}
|
|
146
161
|
await ((_a = this._insightsHandler) === null || _a === void 0 ? void 0 : _a.afterTest(test, results));
|
|
162
|
+
await ((_b = this._accessibilityHandler) === null || _b === void 0 ? void 0 : _b.afterTest(this._suiteTitle, test));
|
|
147
163
|
}
|
|
148
164
|
async after(result) {
|
|
149
165
|
var _a, _b;
|
|
@@ -177,23 +193,26 @@ class BrowserstackService {
|
|
|
177
193
|
* For CucumberJS
|
|
178
194
|
*/
|
|
179
195
|
async beforeFeature(uri, feature) {
|
|
196
|
+
var _a;
|
|
180
197
|
this._suiteTitle = feature.name;
|
|
181
198
|
await this._setSessionName(feature.name);
|
|
182
199
|
await this._setAnnotation(`Feature: ${feature.name}`);
|
|
200
|
+
await ((_a = this._insightsHandler) === null || _a === void 0 ? void 0 : _a.beforeFeature(uri, feature));
|
|
183
201
|
}
|
|
184
202
|
/**
|
|
185
203
|
* Runs before a Cucumber Scenario.
|
|
186
204
|
* @param world world object containing information on pickle and test step
|
|
187
205
|
*/
|
|
188
206
|
async beforeScenario(world) {
|
|
189
|
-
var _a;
|
|
207
|
+
var _a, _b;
|
|
190
208
|
this._currentTest = world;
|
|
191
209
|
await ((_a = this._insightsHandler) === null || _a === void 0 ? void 0 : _a.beforeScenario(world));
|
|
210
|
+
await ((_b = this._accessibilityHandler) === null || _b === void 0 ? void 0 : _b.beforeScenario(world));
|
|
192
211
|
const scenarioName = world.pickle.name || 'unknown scenario';
|
|
193
212
|
await this._setAnnotation(`Scenario: ${scenarioName}`);
|
|
194
213
|
}
|
|
195
214
|
async afterScenario(world) {
|
|
196
|
-
var _a, _b;
|
|
215
|
+
var _a, _b, _c;
|
|
197
216
|
this._specsRan = true;
|
|
198
217
|
const status = (_a = world.result) === null || _a === void 0 ? void 0 : _a.status.toLowerCase();
|
|
199
218
|
if (status !== 'skipped') {
|
|
@@ -207,6 +226,7 @@ class BrowserstackService {
|
|
|
207
226
|
this._failReasons.push(exception);
|
|
208
227
|
}
|
|
209
228
|
await ((_b = this._insightsHandler) === null || _b === void 0 ? void 0 : _b.afterScenario(world));
|
|
229
|
+
await ((_c = this._accessibilityHandler) === null || _c === void 0 ? void 0 : _c.afterScenario(world));
|
|
210
230
|
}
|
|
211
231
|
async beforeStep(step, scenario) {
|
|
212
232
|
var _a;
|
package/build/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Capabilities, Options } from '@wdio/types';
|
|
1
|
+
import type { Capabilities, Options, Frameworks } from '@wdio/types';
|
|
2
2
|
export interface SessionResponse {
|
|
3
3
|
automation_session: {
|
|
4
4
|
browser_url: string;
|
|
@@ -47,6 +47,20 @@ export interface BrowserstackConfig {
|
|
|
47
47
|
* For e.g. buildName, projectName, BrowserStack access credentials, etc.
|
|
48
48
|
*/
|
|
49
49
|
testObservabilityOptions?: TestObservabilityOptions;
|
|
50
|
+
/**
|
|
51
|
+
* Set this to true to enable BrowserStack Accessibility Automation which will
|
|
52
|
+
* automically conduct accessibility testing on your pre-existing test builds
|
|
53
|
+
* and generate health reports which can be viewed in the Accessibility dashboard.
|
|
54
|
+
* @default false
|
|
55
|
+
*/
|
|
56
|
+
accessibility?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Customise the Accessibility-related config options under this key.
|
|
59
|
+
* For e.g. wcagVersion, bestPractice issues, needsReview issues etc.
|
|
60
|
+
*/
|
|
61
|
+
accessibilityOptions?: {
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
};
|
|
50
64
|
/**
|
|
51
65
|
* Set this with app file path present locally on your device or
|
|
52
66
|
* app hashed id returned after uploading app to BrowserStack or
|
|
@@ -135,6 +149,13 @@ export interface TestMeta {
|
|
|
135
149
|
name: string;
|
|
136
150
|
};
|
|
137
151
|
examples?: string[];
|
|
152
|
+
hookType?: string;
|
|
153
|
+
testRunId?: string;
|
|
154
|
+
}
|
|
155
|
+
export interface CurrentRunInfo {
|
|
156
|
+
uuid?: string;
|
|
157
|
+
test?: Frameworks.Test;
|
|
158
|
+
finished?: boolean;
|
|
138
159
|
}
|
|
139
160
|
export interface TestData {
|
|
140
161
|
uuid?: string;
|
|
@@ -174,6 +195,9 @@ export interface UserConfig {
|
|
|
174
195
|
buildTag?: string;
|
|
175
196
|
bstackServiceVersion?: string;
|
|
176
197
|
buildIdentifier?: string;
|
|
198
|
+
accessibilityOptions?: {
|
|
199
|
+
[key: string]: any;
|
|
200
|
+
};
|
|
177
201
|
}
|
|
178
202
|
export interface UploadType {
|
|
179
203
|
event_type: string;
|
|
@@ -181,6 +205,15 @@ export interface UploadType {
|
|
|
181
205
|
test_run?: TestData;
|
|
182
206
|
logs?: any[];
|
|
183
207
|
}
|
|
208
|
+
export interface StdLog {
|
|
209
|
+
timestamp: string;
|
|
210
|
+
kind: string;
|
|
211
|
+
level?: string;
|
|
212
|
+
message?: string;
|
|
213
|
+
http_response?: any;
|
|
214
|
+
test_run_uuid?: string;
|
|
215
|
+
hook_run_uuid?: string;
|
|
216
|
+
}
|
|
184
217
|
export interface LaunchResponse {
|
|
185
218
|
jwt: string;
|
|
186
219
|
build_hashed_id: string;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|