@wdio/browserstack-service 7.35.0 → 7.37.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 +5 -3
- package/build/accessibility-handler.d.ts.map +1 -1
- package/build/accessibility-handler.js +61 -30
- package/build/bstackLogger.d.ts +14 -0
- package/build/bstackLogger.d.ts.map +1 -0
- package/build/bstackLogger.js +52 -0
- package/build/cleanup.d.ts +6 -2
- package/build/cleanup.d.ts.map +1 -1
- package/build/cleanup.js +104 -12
- package/build/config.d.ts +23 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +32 -0
- package/build/constants.d.ts +17 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +34 -1
- package/build/crash-reporter.js +1 -1
- package/build/data-store.d.ts +3 -0
- package/build/data-store.d.ts.map +1 -0
- package/build/data-store.js +49 -0
- package/build/exitHandler.d.ts +4 -0
- package/build/exitHandler.d.ts.map +1 -0
- package/build/exitHandler.js +37 -0
- package/build/insights-handler.d.ts +7 -12
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +49 -107
- package/build/instrumentation/funnelInstrumentation.d.ts +6 -0
- package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -0
- package/build/instrumentation/funnelInstrumentation.js +127 -0
- package/build/launcher.d.ts +1 -2
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +21 -20
- package/build/reporter.d.ts +5 -3
- package/build/reporter.d.ts.map +1 -1
- package/build/reporter.js +17 -23
- package/build/request-handler.d.ts +5 -13
- package/build/request-handler.d.ts.map +1 -1
- package/build/request-handler.js +27 -48
- package/build/scripts/accessibility-scripts.d.ts +26 -0
- package/build/scripts/accessibility-scripts.d.ts.map +1 -0
- package/build/scripts/accessibility-scripts.js +67 -0
- package/build/service.d.ts +1 -0
- package/build/service.d.ts.map +1 -1
- package/build/service.js +24 -16
- package/build/testOps/featureStats.d.ts +45 -0
- package/build/testOps/featureStats.d.ts.map +1 -0
- package/build/testOps/featureStats.js +120 -0
- package/build/testOps/featureUsage.d.ts +22 -0
- package/build/testOps/featureUsage.d.ts.map +1 -0
- package/build/testOps/featureUsage.js +46 -0
- package/build/testOps/listener.d.ts +33 -0
- package/build/testOps/listener.d.ts.map +1 -0
- package/build/testOps/listener.js +228 -0
- package/build/testOps/requestUtils.d.ts +4 -0
- package/build/testOps/requestUtils.d.ts.map +1 -0
- package/build/testOps/requestUtils.js +47 -0
- package/build/testOps/testOpsConfig.d.ts +11 -0
- package/build/testOps/testOpsConfig.d.ts.map +1 -0
- package/build/testOps/testOpsConfig.js +17 -0
- package/build/testOps/usageStats.d.ts +404 -0
- package/build/testOps/usageStats.d.ts.map +1 -0
- package/build/testOps/usageStats.js +110 -0
- package/build/types.d.ts +34 -7
- package/build/types.d.ts.map +1 -1
- package/build/util.d.ts +6 -6
- package/build/util.d.ts.map +1 -1
- package/build/util.js +114 -71
- package/package.json +3 -3
package/build/util.js
CHANGED
|
@@ -26,7 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.ObjectsAreEqual = exports.isObject = exports.isTrue = exports.isUndefined = exports.getBrowserStackKey = exports.getBrowserStackUser = exports.stopAccessibilityTestRun = exports.getA11yResultsSummary = exports.getA11yResults = exports.
|
|
29
|
+
exports.getPlatformVersion = exports.ObjectsAreEqual = exports.isObject = exports.isTrue = exports.isUndefined = exports.getBrowserStackKey = exports.getBrowserStackUser = exports.stopAccessibilityTestRun = exports.getA11yResultsSummary = exports.getA11yResults = exports.performA11yScan = exports.createAccessibilityTestRun = exports.isAccessibilityAutomationSession = exports.shouldScanTestForAccessibility = exports.validateCapsWithA11y = exports.sleep = exports.patchConsoleLogs = exports.getFailureObject = exports.frameworkSupportsHook = exports.getObservabilityBuildTags = exports.getObservabilityBuild = exports.getObservabilityProject = exports.getObservabilityKey = exports.getObservabilityUser = exports.batchAndPostEvents = exports.shouldAddServiceVersion = exports.isBStackSession = exports.isScreenshotCommand = exports.getHookType = exports.getHierarchy = exports.getLogTag = exports.removeAnsiColors = exports.getScenarioExamples = exports.isBrowserstackSession = exports.getCloudProvider = exports.getUniqueIdentifierForCucumber = exports.getUniqueIdentifier = exports.getGitMetaData = exports.nodeRequest = exports.getCiInfo = exports.stopBuildUpstream = exports.launchTestSession = exports.o11yClassErrorHandler = exports.o11yErrorHandler = exports.errorHandler = exports.getParentSuiteName = exports.isBrowserstackCapability = exports.getBrowserCapabilities = exports.getBrowserDescription = exports.DEFAULT_REQUEST_CONFIG = void 0;
|
|
30
|
+
exports.getErrorString = exports.isObjectEmpty = void 0;
|
|
30
31
|
const os_1 = require("os");
|
|
31
32
|
const util_1 = require("util");
|
|
32
33
|
const http_1 = __importDefault(require("http"));
|
|
@@ -40,9 +41,10 @@ const gitconfiglocal_1 = __importDefault(require("gitconfiglocal"));
|
|
|
40
41
|
const crash_reporter_1 = __importDefault(require("./crash-reporter"));
|
|
41
42
|
const logPatcher_1 = __importDefault(require("./logPatcher"));
|
|
42
43
|
const constants_1 = require("./constants");
|
|
43
|
-
const request_handler_1 = __importDefault(require("./request-handler"));
|
|
44
44
|
const performance_tester_1 = __importDefault(require("./performance-tester"));
|
|
45
|
-
const
|
|
45
|
+
const accessibility_scripts_1 = __importDefault(require("./scripts/accessibility-scripts"));
|
|
46
|
+
const usageStats_1 = __importDefault(require("./testOps/usageStats"));
|
|
47
|
+
const testOpsConfig_1 = __importDefault(require("./testOps/testOpsConfig"));
|
|
46
48
|
const pGitconfig = (0, util_1.promisify)(gitconfiglocal_1.default);
|
|
47
49
|
const log = (0, logger_1.default)('@wdio/browserstack-service');
|
|
48
50
|
exports.DEFAULT_REQUEST_CONFIG = {
|
|
@@ -145,7 +147,7 @@ function o11yErrorHandler(fn) {
|
|
|
145
147
|
return function (...args) {
|
|
146
148
|
try {
|
|
147
149
|
let functionToHandle = fn;
|
|
148
|
-
if (process.env.
|
|
150
|
+
if (process.env[constants_1.PERF_MEASUREMENT_ENV]) {
|
|
149
151
|
functionToHandle = performance_tester_1.default.getPerformance().timerify(functionToHandle);
|
|
150
152
|
}
|
|
151
153
|
const result = functionToHandle(...args);
|
|
@@ -173,7 +175,7 @@ function o11yClassErrorHandler(errorClass) {
|
|
|
173
175
|
writable: true,
|
|
174
176
|
value: function (...args) {
|
|
175
177
|
try {
|
|
176
|
-
const result = (process.env.
|
|
178
|
+
const result = (process.env[constants_1.PERF_MEASUREMENT_ENV] ? performance_tester_1.default.getPerformance().timerify(method) : method).call(this, ...args);
|
|
177
179
|
if (result instanceof Promise) {
|
|
178
180
|
return result.catch(error => processError(error, method, args));
|
|
179
181
|
}
|
|
@@ -190,6 +192,8 @@ function o11yClassErrorHandler(errorClass) {
|
|
|
190
192
|
}
|
|
191
193
|
exports.o11yClassErrorHandler = o11yClassErrorHandler;
|
|
192
194
|
exports.launchTestSession = o11yErrorHandler(async function launchTestSession(options, config, bsConfig) {
|
|
195
|
+
const launchBuildUsage = usageStats_1.default.getInstance().launchBuildUsage;
|
|
196
|
+
launchBuildUsage.triggered();
|
|
193
197
|
const data = {
|
|
194
198
|
format: 'json',
|
|
195
199
|
project_name: getObservabilityProject(options, bsConfig.projectName),
|
|
@@ -206,7 +210,7 @@ exports.launchTestSession = o11yErrorHandler(async function launchTestSession(op
|
|
|
206
210
|
},
|
|
207
211
|
ci_info: getCiInfo(),
|
|
208
212
|
build_run_identifier: process.env.BROWSERSTACK_BUILD_RUN_IDENTIFIER,
|
|
209
|
-
failed_tests_rerun: process.env.
|
|
213
|
+
failed_tests_rerun: process.env[constants_1.RERUN_ENV] || false,
|
|
210
214
|
version_control: await getGitMetaData(),
|
|
211
215
|
observability_version: {
|
|
212
216
|
frameworkName: 'WebdriverIO-' + config.framework,
|
|
@@ -232,13 +236,17 @@ exports.launchTestSession = o11yErrorHandler(async function launchTestSession(op
|
|
|
232
236
|
json: data
|
|
233
237
|
}).json();
|
|
234
238
|
log.debug(`[Start_Build] Success response: ${JSON.stringify(response)}`);
|
|
235
|
-
process.env.
|
|
236
|
-
if (response.jwt)
|
|
237
|
-
process.env.
|
|
238
|
-
|
|
239
|
-
|
|
239
|
+
process.env[constants_1.TESTOPS_BUILD_COMPLETED_ENV] = 'true';
|
|
240
|
+
if (response.jwt) {
|
|
241
|
+
process.env[constants_1.TESTOPS_JWT_ENV] = response.jwt;
|
|
242
|
+
launchBuildUsage.success();
|
|
243
|
+
}
|
|
244
|
+
if (response.build_hashed_id) {
|
|
245
|
+
process.env[constants_1.TESTOPS_BUILD_ID_ENV] = response.build_hashed_id;
|
|
246
|
+
testOpsConfig_1.default.getInstance().buildHashedId = response.build_hashed_id;
|
|
247
|
+
}
|
|
240
248
|
if (response.allow_screenshots)
|
|
241
|
-
process.env.
|
|
249
|
+
process.env[constants_1.TESTOPS_SCREENSHOT_ENV] = response.allow_screenshots.toString();
|
|
242
250
|
}
|
|
243
251
|
catch (error) {
|
|
244
252
|
if (error instanceof got_1.HTTPError && error.response) {
|
|
@@ -257,18 +265,27 @@ exports.launchTestSession = o11yErrorHandler(async function launchTestSession(op
|
|
|
257
265
|
default:
|
|
258
266
|
log.error(errorMessage);
|
|
259
267
|
}
|
|
268
|
+
launchBuildUsage.failed(errorMessage || error);
|
|
260
269
|
}
|
|
261
270
|
else {
|
|
262
271
|
log.error(`Data upload to BrowserStack Test Observability failed due to ${error}`);
|
|
272
|
+
launchBuildUsage.failed(error);
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
275
|
});
|
|
266
276
|
exports.stopBuildUpstream = o11yErrorHandler(async function stopBuildUpstream() {
|
|
267
|
-
|
|
268
|
-
|
|
277
|
+
const stopBuildUsage = usageStats_1.default.getInstance().stopBuildUsage;
|
|
278
|
+
stopBuildUsage.triggered();
|
|
279
|
+
if (!process.env[constants_1.TESTOPS_BUILD_COMPLETED_ENV]) {
|
|
280
|
+
stopBuildUsage.failed('Build is not completed yet');
|
|
281
|
+
return {
|
|
282
|
+
status: 'error',
|
|
283
|
+
message: 'Build is not completed yet'
|
|
284
|
+
};
|
|
269
285
|
}
|
|
270
|
-
if (!process.env.
|
|
286
|
+
if (!process.env[constants_1.TESTOPS_JWT_ENV]) {
|
|
271
287
|
log.debug('[STOP_BUILD] Missing Authentication Token/ Build ID');
|
|
288
|
+
stopBuildUsage.failed('Token/buildID is undefined, build creation might have failed');
|
|
272
289
|
return {
|
|
273
290
|
status: 'error',
|
|
274
291
|
message: 'Token/buildID is undefined, build creation might have failed'
|
|
@@ -278,22 +295,24 @@ exports.stopBuildUpstream = o11yErrorHandler(async function stopBuildUpstream()
|
|
|
278
295
|
'stop_time': (new Date()).toISOString()
|
|
279
296
|
};
|
|
280
297
|
try {
|
|
281
|
-
const url = `${constants_1.DATA_ENDPOINT}/api/v1/builds/${process.env.
|
|
298
|
+
const url = `${constants_1.DATA_ENDPOINT}/api/v1/builds/${process.env[constants_1.TESTOPS_BUILD_ID_ENV]}/stop`;
|
|
282
299
|
const response = await got_1.default.put(url, {
|
|
283
300
|
agent: exports.DEFAULT_REQUEST_CONFIG.agent,
|
|
284
301
|
headers: {
|
|
285
302
|
...exports.DEFAULT_REQUEST_CONFIG.headers,
|
|
286
|
-
'Authorization': `Bearer ${process.env.
|
|
303
|
+
'Authorization': `Bearer ${process.env[constants_1.TESTOPS_JWT_ENV]}`
|
|
287
304
|
},
|
|
288
305
|
json: data
|
|
289
306
|
}).json();
|
|
290
307
|
log.debug(`[STOP_BUILD] Success response: ${JSON.stringify(response)}`);
|
|
308
|
+
stopBuildUsage.success();
|
|
291
309
|
return {
|
|
292
310
|
status: 'success',
|
|
293
311
|
message: ''
|
|
294
312
|
};
|
|
295
313
|
}
|
|
296
314
|
catch (error) {
|
|
315
|
+
stopBuildUsage.failed(error);
|
|
297
316
|
log.debug(`[STOP_BUILD] Failed. Error: ${error}`);
|
|
298
317
|
return {
|
|
299
318
|
status: 'error',
|
|
@@ -667,43 +686,6 @@ function getLogTag(eventType) {
|
|
|
667
686
|
return 'undefined';
|
|
668
687
|
}
|
|
669
688
|
exports.getLogTag = getLogTag;
|
|
670
|
-
async function uploadEventData(eventData, eventUrl = constants_1.DATA_EVENT_ENDPOINT) {
|
|
671
|
-
let logTag = 'BATCH_UPLOAD';
|
|
672
|
-
if (!Array.isArray(eventData)) {
|
|
673
|
-
logTag = getLogTag(eventData.event_type);
|
|
674
|
-
}
|
|
675
|
-
if (eventUrl == constants_1.DATA_SCREENSHOT_ENDPOINT)
|
|
676
|
-
logTag = 'screenshot_upload';
|
|
677
|
-
if (!process.env.BS_TESTOPS_BUILD_COMPLETED) {
|
|
678
|
-
return;
|
|
679
|
-
}
|
|
680
|
-
if (!process.env.BS_TESTOPS_JWT) {
|
|
681
|
-
log.debug(`[${logTag}] Missing Authentication Token/ Build ID`);
|
|
682
|
-
return {
|
|
683
|
-
status: 'error',
|
|
684
|
-
message: 'Token/buildID is undefined, build creation might have failed'
|
|
685
|
-
};
|
|
686
|
-
}
|
|
687
|
-
try {
|
|
688
|
-
const url = `${constants_1.DATA_ENDPOINT}/${eventUrl}`;
|
|
689
|
-
request_handler_1.default.getInstance().pendingUploads += 1;
|
|
690
|
-
const data = await got_1.default.post(url, {
|
|
691
|
-
agent: exports.DEFAULT_REQUEST_CONFIG.agent,
|
|
692
|
-
headers: {
|
|
693
|
-
...exports.DEFAULT_REQUEST_CONFIG.headers,
|
|
694
|
-
'Authorization': `Bearer ${process.env.BS_TESTOPS_JWT}`
|
|
695
|
-
},
|
|
696
|
-
json: eventData
|
|
697
|
-
}).json();
|
|
698
|
-
log.debug(`[${logTag}] Success response: ${JSON.stringify(data)}`);
|
|
699
|
-
request_handler_1.default.getInstance().pendingUploads -= 1;
|
|
700
|
-
}
|
|
701
|
-
catch (error) {
|
|
702
|
-
log.debug(`[${logTag}] Failed. Error: ${error}`);
|
|
703
|
-
request_handler_1.default.getInstance().pendingUploads -= 1;
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
exports.uploadEventData = uploadEventData;
|
|
707
689
|
// get hierarchy for a particular test (called by reporter for skipped tests)
|
|
708
690
|
function getHierarchy(fullTitle) {
|
|
709
691
|
if (!fullTitle)
|
|
@@ -746,8 +728,12 @@ function shouldAddServiceVersion(config, testObservability) {
|
|
|
746
728
|
}
|
|
747
729
|
exports.shouldAddServiceVersion = shouldAddServiceVersion;
|
|
748
730
|
async function batchAndPostEvents(eventUrl, kind, data) {
|
|
749
|
-
if (!process.env.
|
|
750
|
-
|
|
731
|
+
if (!process.env[constants_1.TESTOPS_BUILD_COMPLETED_ENV]) {
|
|
732
|
+
throw new Error('Build not completed yet');
|
|
733
|
+
}
|
|
734
|
+
const jwtToken = process.env[constants_1.TESTOPS_JWT_ENV];
|
|
735
|
+
if (!jwtToken) {
|
|
736
|
+
throw new Error('Missing authentication Token');
|
|
751
737
|
}
|
|
752
738
|
try {
|
|
753
739
|
const url = `${constants_1.DATA_ENDPOINT}/${eventUrl}`;
|
|
@@ -755,7 +741,7 @@ async function batchAndPostEvents(eventUrl, kind, data) {
|
|
|
755
741
|
agent: exports.DEFAULT_REQUEST_CONFIG.agent,
|
|
756
742
|
headers: {
|
|
757
743
|
...exports.DEFAULT_REQUEST_CONFIG.headers,
|
|
758
|
-
'Authorization': `Bearer ${
|
|
744
|
+
'Authorization': `Bearer ${jwtToken}`
|
|
759
745
|
},
|
|
760
746
|
json: data
|
|
761
747
|
}).json();
|
|
@@ -763,6 +749,7 @@ async function batchAndPostEvents(eventUrl, kind, data) {
|
|
|
763
749
|
}
|
|
764
750
|
catch (error) {
|
|
765
751
|
log.debug(`[${kind}] EXCEPTION IN ${kind} REQUEST TO TEST OBSERVABILITY : ${error}`);
|
|
752
|
+
throw new Error('Exception in request ' + error);
|
|
766
753
|
}
|
|
767
754
|
}
|
|
768
755
|
exports.batchAndPostEvents = batchAndPostEvents;
|
|
@@ -858,16 +845,6 @@ function patchConsoleLogs() {
|
|
|
858
845
|
exports.patchConsoleLogs = patchConsoleLogs;
|
|
859
846
|
const sleep = (ms = 100) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
860
847
|
exports.sleep = sleep;
|
|
861
|
-
async function pushDataToQueue(data, requestQueueHandler = undefined) {
|
|
862
|
-
if (!requestQueueHandler) {
|
|
863
|
-
requestQueueHandler = request_handler_1.default.getInstance();
|
|
864
|
-
}
|
|
865
|
-
const req = requestQueueHandler.add(data);
|
|
866
|
-
if (req.proceed && req.data) {
|
|
867
|
-
await uploadEventData(req.data, req.url);
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
|
-
exports.pushDataToQueue = pushDataToQueue;
|
|
871
848
|
const validateCapsWithA11y = (deviceName, platformMeta, chromeOptions) => {
|
|
872
849
|
var _a, _b;
|
|
873
850
|
try {
|
|
@@ -938,7 +915,10 @@ exports.createAccessibilityTestRun = errorHandler(async function createAccessibi
|
|
|
938
915
|
'source': {
|
|
939
916
|
frameworkName: 'WebdriverIO-' + config.framework,
|
|
940
917
|
frameworkVersion: bsConfig.bstackServiceVersion,
|
|
941
|
-
sdkVersion: bsConfig.bstackServiceVersion
|
|
918
|
+
sdkVersion: bsConfig.bstackServiceVersion,
|
|
919
|
+
language: 'ECMAScript',
|
|
920
|
+
testFramework: 'webdriverIO',
|
|
921
|
+
testFrameworkVersion: bsConfig.bstackServiceVersion
|
|
942
922
|
},
|
|
943
923
|
'settings': bsConfig.accessibilityOptions || {},
|
|
944
924
|
'versionControl': await getGitMetaData(),
|
|
@@ -958,7 +938,7 @@ exports.createAccessibilityTestRun = errorHandler(async function createAccessibi
|
|
|
958
938
|
password: getBrowserStackKey(config),
|
|
959
939
|
};
|
|
960
940
|
try {
|
|
961
|
-
const response = await nodeRequest('POST', 'test_runs', requestOptions, constants_1.ACCESSIBILITY_API_URL);
|
|
941
|
+
const response = await nodeRequest('POST', 'v2/test_runs', requestOptions, constants_1.ACCESSIBILITY_API_URL);
|
|
962
942
|
log.debug(`[Create Accessibility Test Run] Success response: ${JSON.stringify(response)}`);
|
|
963
943
|
if (response.data.accessibilityToken) {
|
|
964
944
|
process.env.BSTACK_A11Y_JWT = response.data.accessibilityToken;
|
|
@@ -967,6 +947,10 @@ exports.createAccessibilityTestRun = errorHandler(async function createAccessibi
|
|
|
967
947
|
process.env.BS_A11Y_TEST_RUN_ID = response.data.id;
|
|
968
948
|
}
|
|
969
949
|
log.debug(`BrowserStack Accessibility Automation Test Run ID: ${response.data.id}`);
|
|
950
|
+
if (response.data) {
|
|
951
|
+
accessibility_scripts_1.default.update(response.data);
|
|
952
|
+
accessibility_scripts_1.default.store();
|
|
953
|
+
}
|
|
970
954
|
return response.data.scannerVersion;
|
|
971
955
|
}
|
|
972
956
|
catch (error) {
|
|
@@ -988,6 +972,26 @@ exports.createAccessibilityTestRun = errorHandler(async function createAccessibi
|
|
|
988
972
|
return null;
|
|
989
973
|
}
|
|
990
974
|
});
|
|
975
|
+
const performA11yScan = async (browser, isBrowserStackSession, isAccessibility, commandName) => {
|
|
976
|
+
if (!isBrowserStackSession) {
|
|
977
|
+
log.warn('Not a BrowserStack Automate session, cannot perform Accessibility scan.');
|
|
978
|
+
return; // since we are running only on Automate as of now
|
|
979
|
+
}
|
|
980
|
+
if (!(0, exports.isAccessibilityAutomationSession)(isAccessibility)) {
|
|
981
|
+
log.warn('Not an Accessibility Automation session, cannot perform Accessibility scan.');
|
|
982
|
+
return;
|
|
983
|
+
}
|
|
984
|
+
try {
|
|
985
|
+
const results = await browser.executeAsync(accessibility_scripts_1.default.performScan, { 'method': commandName || '' });
|
|
986
|
+
log.debug(util_2.default.format(results));
|
|
987
|
+
return results;
|
|
988
|
+
}
|
|
989
|
+
catch (err) {
|
|
990
|
+
log.error('Accessibility Scan could not be performed : ' + err);
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
};
|
|
994
|
+
exports.performA11yScan = performA11yScan;
|
|
991
995
|
const getA11yResults = async (browser, isBrowserStackSession, isAccessibility) => {
|
|
992
996
|
if (!isBrowserStackSession) {
|
|
993
997
|
log.warn('Not a BrowserStack Automate session, cannot retrieve Accessibility results.');
|
|
@@ -998,7 +1002,9 @@ const getA11yResults = async (browser, isBrowserStackSession, isAccessibility) =
|
|
|
998
1002
|
return [];
|
|
999
1003
|
}
|
|
1000
1004
|
try {
|
|
1001
|
-
|
|
1005
|
+
log.debug('Performing scan before getting results');
|
|
1006
|
+
await (0, exports.performA11yScan)(browser, isBrowserStackSession, isAccessibility);
|
|
1007
|
+
const results = await browser.executeAsync(accessibility_scripts_1.default.getResults);
|
|
1002
1008
|
return results;
|
|
1003
1009
|
}
|
|
1004
1010
|
catch {
|
|
@@ -1016,7 +1022,9 @@ const getA11yResultsSummary = async (browser, isBrowserStackSession, isAccessibi
|
|
|
1016
1022
|
return {};
|
|
1017
1023
|
}
|
|
1018
1024
|
try {
|
|
1019
|
-
|
|
1025
|
+
log.debug('Performing scan before getting results summary');
|
|
1026
|
+
await (0, exports.performA11yScan)(browser, isBrowserStackSession, isAccessibility);
|
|
1027
|
+
const summaryResults = await browser.executeAsync(accessibility_scripts_1.default.getResultsSummary);
|
|
1020
1028
|
return summaryResults;
|
|
1021
1029
|
}
|
|
1022
1030
|
catch {
|
|
@@ -1112,3 +1120,38 @@ const ObjectsAreEqual = (object1, object2) => {
|
|
|
1112
1120
|
return true;
|
|
1113
1121
|
};
|
|
1114
1122
|
exports.ObjectsAreEqual = ObjectsAreEqual;
|
|
1123
|
+
exports.getPlatformVersion = o11yErrorHandler(function getPlatformVersion(caps) {
|
|
1124
|
+
var _a;
|
|
1125
|
+
if (!caps) {
|
|
1126
|
+
return undefined;
|
|
1127
|
+
}
|
|
1128
|
+
const bstackOptions = (_a = (caps)) === null || _a === void 0 ? void 0 : _a['bstack:options'];
|
|
1129
|
+
const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version', 'appium:platformVersion'];
|
|
1130
|
+
for (const key of keys) {
|
|
1131
|
+
if (bstackOptions && (bstackOptions === null || bstackOptions === void 0 ? void 0 : bstackOptions[key])) {
|
|
1132
|
+
return String(bstackOptions === null || bstackOptions === void 0 ? void 0 : bstackOptions[key]);
|
|
1133
|
+
}
|
|
1134
|
+
else if (caps[key]) {
|
|
1135
|
+
return String(caps[key]);
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
return undefined;
|
|
1139
|
+
});
|
|
1140
|
+
const isObjectEmpty = (objectName) => {
|
|
1141
|
+
return (objectName &&
|
|
1142
|
+
Object.keys(objectName).length === 0 &&
|
|
1143
|
+
objectName.constructor === Object);
|
|
1144
|
+
};
|
|
1145
|
+
exports.isObjectEmpty = isObjectEmpty;
|
|
1146
|
+
const getErrorString = (err) => {
|
|
1147
|
+
if (!err) {
|
|
1148
|
+
return undefined;
|
|
1149
|
+
}
|
|
1150
|
+
if (typeof err === 'string') {
|
|
1151
|
+
return err; // works, `e` narrowed to string
|
|
1152
|
+
}
|
|
1153
|
+
else if (err instanceof Error) {
|
|
1154
|
+
return err.message; // works, `e` narrowed to Error
|
|
1155
|
+
}
|
|
1156
|
+
};
|
|
1157
|
+
exports.getErrorString = getErrorString;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/browserstack-service",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.37.0",
|
|
4
4
|
"description": "WebdriverIO service for better Browserstack integration",
|
|
5
5
|
"author": "Adam Bjerstedt <abjerstedt@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"gitconfiglocal": "^2.1.0",
|
|
37
37
|
"got": "^11.0.2",
|
|
38
38
|
"uuid": "^9.0.1",
|
|
39
|
-
"webdriverio": "7.
|
|
39
|
+
"webdriverio": "7.36.0",
|
|
40
40
|
"winston-transport": "^4.5.0",
|
|
41
41
|
"yauzl": "^2.10.0"
|
|
42
42
|
},
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
49
|
"types": "./build/index.d.ts",
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "50c68b3ddd553afffe6d8379c4fbe9c6e90646bf"
|
|
51
51
|
}
|