@wdio/browserstack-service 8.45.0 → 8.46.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 +3 -0
- package/build/accessibility-handler.d.ts.map +1 -1
- package/build/accessibility-handler.js +46 -8
- package/build/insights-handler.d.ts +6 -0
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +28 -0
- package/build/service.d.ts +2 -0
- package/build/service.d.ts.map +1 -1
- package/build/service.js +109 -12
- package/build/types.d.ts +7 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -16,6 +16,8 @@ declare class _AccessibilityHandler {
|
|
|
16
16
|
private _options;
|
|
17
17
|
private _config;
|
|
18
18
|
private _accessibilityOptions?;
|
|
19
|
+
private _autoScanning;
|
|
20
|
+
private _testIdentifier;
|
|
19
21
|
private _testMetadata;
|
|
20
22
|
private static _a11yScanSessionMap;
|
|
21
23
|
private _sessionId;
|
|
@@ -39,6 +41,7 @@ declare class _AccessibilityHandler {
|
|
|
39
41
|
private shouldRunTestHooks;
|
|
40
42
|
private checkIfPageOpened;
|
|
41
43
|
private static shouldPatchExecuteScript;
|
|
44
|
+
private _setAnnotation;
|
|
42
45
|
}
|
|
43
46
|
declare const AccessibilityHandler: typeof _AccessibilityHandler;
|
|
44
47
|
type AccessibilityHandler = _AccessibilityHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility-handler.d.ts","sourceRoot":"","sources":["../src/accessibility-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"accessibility-handler.d.ts","sourceRoot":"","sources":["../src/accessibility-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AA8BjE,cAAM,qBAAqB;IAiBnB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,wBAAwB,CAAC;IAEjC,OAAO,CAAC,kBAAkB,CAAC;IAxB/B,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,qBAAqB,CAAC,CAAyB;IACvD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA8B;IAChE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAyB;gBAG7B,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAC9D,aAAa,EAAE,YAAY,CAAC,gBAAgB,EACpD,QAAQ,EAAG,kBAAkB,GAAG,mBAAmB,EAC3C,aAAa,EAAE,OAAO,EAC9B,OAAO,EAAG,OAAO,CAAC,UAAU,EACpB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,wBAAwB,CAAC,GAAE,OAAO,GAAG,MAAM,aAAA,EACnD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,EACtB,kBAAkB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,YAAA;IAsBxD,YAAY,CAAC,QAAQ,EAAE,MAAM;IAI7B,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IA6BzF,MAAM,CAAE,SAAS,EAAE,MAAM;IA4EzB,UAAU,CAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAoCjE,SAAS,CAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAoCtE;;MAEE;IACI,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAmC7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;YAsCpC,cAAc;YAcd,iBAAiB;IAgB/B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;YAOZ,iBAAiB;IAkB/B,OAAO,CAAC,MAAM,CAAC,wBAAwB;YAWzB,cAAc;CAW/B;AAGD,QAAA,MAAM,oBAAoB,EAAE,OAAO,qBAAoE,CAAA;AACvG,KAAK,oBAAoB,GAAG,qBAAqB,CAAA;AAEjD,eAAe,oBAAoB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import util from 'node:util';
|
|
2
2
|
import Listener from './testOps/listener.js';
|
|
3
|
-
import { getA11yResultsSummary, getAppA11yResultsSummary, getA11yResults, performA11yScan, getUniqueIdentifier, getUniqueIdentifierForCucumber, isAccessibilityAutomationSession, isAppAccessibilityAutomationSession, isBrowserstackSession, o11yClassErrorHandler, shouldScanTestForAccessibility, validateCapsWithA11y, shouldAddServiceVersion, validateCapsWithNonBstackA11y, isTrue, validateCapsWithAppA11y, getAppA11yResults } from './util.js';
|
|
3
|
+
import { getA11yResultsSummary, getAppA11yResultsSummary, getA11yResults, performA11yScan, getUniqueIdentifier, getUniqueIdentifierForCucumber, isAccessibilityAutomationSession, isAppAccessibilityAutomationSession, isBrowserstackSession, o11yClassErrorHandler, shouldScanTestForAccessibility, validateCapsWithA11y, shouldAddServiceVersion, validateCapsWithNonBstackA11y, isTrue, validateCapsWithAppA11y, getAppA11yResults, isFalse } from './util.js';
|
|
4
4
|
import accessibilityScripts from './scripts/accessibility-scripts.js';
|
|
5
5
|
import PerformanceTester from './instrumentation/performance/performance-tester.js';
|
|
6
6
|
import * as PERFORMANCE_SDK_EVENTS from './instrumentation/performance/constants.js';
|
|
@@ -20,6 +20,8 @@ class _AccessibilityHandler {
|
|
|
20
20
|
_options;
|
|
21
21
|
_config;
|
|
22
22
|
_accessibilityOptions;
|
|
23
|
+
_autoScanning = true;
|
|
24
|
+
_testIdentifier = null;
|
|
23
25
|
_testMetadata = {};
|
|
24
26
|
static _a11yScanSessionMap = {};
|
|
25
27
|
_sessionId = null;
|
|
@@ -43,6 +45,7 @@ class _AccessibilityHandler {
|
|
|
43
45
|
this._caps = _capabilities;
|
|
44
46
|
this._accessibility = isTrue(_accessibilityAutomation);
|
|
45
47
|
this._accessibilityOptions = _accessibilityOpts;
|
|
48
|
+
this._autoScanning = !isFalse(this._accessibilityOptions?.autoScanning);
|
|
46
49
|
this._options = _options;
|
|
47
50
|
this._config = _config;
|
|
48
51
|
this._turboscale = isTrue(_turboscale);
|
|
@@ -117,7 +120,27 @@ class _AccessibilityHandler {
|
|
|
117
120
|
return await getA11yResults(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
|
|
118
121
|
};
|
|
119
122
|
this._browser.performScan = async () => {
|
|
120
|
-
|
|
123
|
+
const results = await performA11yScan(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
|
|
124
|
+
if (results) {
|
|
125
|
+
this._testMetadata[this._testIdentifier] = {
|
|
126
|
+
scanTestForAccessibility: true,
|
|
127
|
+
accessibilityScanStarted: true
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
await this._setAnnotation('Accessibility scanning was triggered manually');
|
|
131
|
+
return results;
|
|
132
|
+
};
|
|
133
|
+
this._browser.startA11yScanning = async () => {
|
|
134
|
+
AccessibilityHandler._a11yScanSessionMap[sessionId] = true;
|
|
135
|
+
this._testMetadata[this._testIdentifier] = {
|
|
136
|
+
scanTestForAccessibility: true,
|
|
137
|
+
accessibilityScanStarted: true
|
|
138
|
+
};
|
|
139
|
+
await this._setAnnotation('Accessibility scanning has started');
|
|
140
|
+
};
|
|
141
|
+
this._browser.stopA11yScanning = async () => {
|
|
142
|
+
AccessibilityHandler._a11yScanSessionMap[sessionId] = false;
|
|
143
|
+
await this._setAnnotation('Accessibility scanning has stopped');
|
|
121
144
|
};
|
|
122
145
|
if (!this._accessibility) {
|
|
123
146
|
return;
|
|
@@ -140,8 +163,9 @@ class _AccessibilityHandler {
|
|
|
140
163
|
Listener.setTestRunAccessibilityVar(false);
|
|
141
164
|
return;
|
|
142
165
|
}
|
|
143
|
-
const shouldScanTest = shouldScanTestForAccessibility(suiteTitle, test.title, this._accessibilityOptions);
|
|
166
|
+
const shouldScanTest = this._autoScanning && shouldScanTestForAccessibility(suiteTitle, test.title, this._accessibilityOptions);
|
|
144
167
|
const testIdentifier = this.getIdentifier(test);
|
|
168
|
+
this._testIdentifier = testIdentifier;
|
|
145
169
|
if (this._sessionId) {
|
|
146
170
|
/* For case with multiple tests under one browser, before hook of 2nd test should change this map value */
|
|
147
171
|
AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanTest;
|
|
@@ -197,13 +221,14 @@ class _AccessibilityHandler {
|
|
|
197
221
|
const gherkinDocument = world.gherkinDocument;
|
|
198
222
|
const featureData = gherkinDocument.feature;
|
|
199
223
|
const uniqueId = getUniqueIdentifierForCucumber(world);
|
|
224
|
+
this._testIdentifier = uniqueId;
|
|
200
225
|
if (!this.shouldRunTestHooks(this._browser, this._accessibility)) {
|
|
201
226
|
/* This is to be used when test events are sent */
|
|
202
227
|
Listener.setTestRunAccessibilityVar(false);
|
|
203
228
|
return;
|
|
204
229
|
}
|
|
205
230
|
try {
|
|
206
|
-
const shouldScanScenario = shouldScanTestForAccessibility(featureData?.name, pickleData.name, this._accessibilityOptions, world, true);
|
|
231
|
+
const shouldScanScenario = this._autoScanning && shouldScanTestForAccessibility(featureData?.name, pickleData.name, this._accessibilityOptions, world, true);
|
|
207
232
|
this._testMetadata[uniqueId] = {
|
|
208
233
|
scanTestForAccessibility: shouldScanScenario,
|
|
209
234
|
accessibilityScanStarted: true
|
|
@@ -264,10 +289,12 @@ class _AccessibilityHandler {
|
|
|
264
289
|
return origFunction(...args);
|
|
265
290
|
}
|
|
266
291
|
async sendTestStopEvent(browser, dataForExtension) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
await
|
|
270
|
-
|
|
292
|
+
if (AccessibilityHandler._a11yScanSessionMap[this._sessionId]) {
|
|
293
|
+
BStackLogger.debug('Performing scan before saving results');
|
|
294
|
+
await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.PERFORM_SCAN, async () => {
|
|
295
|
+
await performA11yScan(this.isAppAutomate, browser, true, true);
|
|
296
|
+
}, { command: 'afterTest' })();
|
|
297
|
+
}
|
|
271
298
|
if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
|
|
272
299
|
return;
|
|
273
300
|
}
|
|
@@ -311,6 +338,17 @@ class _AccessibilityHandler {
|
|
|
311
338
|
return (script.toLowerCase().indexOf('browserstack_executor') !== -1 ||
|
|
312
339
|
script.toLowerCase().indexOf('browserstack_accessibility_automation_script') !== -1);
|
|
313
340
|
}
|
|
341
|
+
async _setAnnotation(message) {
|
|
342
|
+
if (this._accessibility && isBrowserstackSession(this._browser)) {
|
|
343
|
+
await this._browser.execute(`browserstack_executor: ${JSON.stringify({
|
|
344
|
+
action: 'annotate',
|
|
345
|
+
arguments: {
|
|
346
|
+
data: message,
|
|
347
|
+
level: 'info'
|
|
348
|
+
}
|
|
349
|
+
})}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
314
352
|
}
|
|
315
353
|
// https://github.com/microsoft/TypeScript/issues/6543
|
|
316
354
|
const AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
|
|
@@ -17,6 +17,7 @@ declare class _InsightsHandler {
|
|
|
17
17
|
private _currentHook;
|
|
18
18
|
private _cucumberData;
|
|
19
19
|
private _userCaps?;
|
|
20
|
+
private _options?;
|
|
20
21
|
private listener;
|
|
21
22
|
currentTestId: string | undefined;
|
|
22
23
|
cbtQueue: Array<CBTData>;
|
|
@@ -50,6 +51,11 @@ declare class _InsightsHandler {
|
|
|
50
51
|
*/
|
|
51
52
|
appendTestItemLog: (stdLog: StdLog) => Promise<void>;
|
|
52
53
|
browserCommand(commandType: string, args: BeforeCommandArgs | AfterCommandArgs, test?: Frameworks.Test | ITestCaseHookParameter): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if any test steps failed (excluding hook failures)
|
|
56
|
+
* This is used when ignoreHooksStatus is true to determine test status based only on test steps
|
|
57
|
+
*/
|
|
58
|
+
hasTestStepFailures(world: ITestCaseHookParameter): boolean;
|
|
53
59
|
private attachHookData;
|
|
54
60
|
private setHooksFromSuite;
|
|
55
61
|
private getHierarchy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,KAAK,EAAiB,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAGjK,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAiBpD,OAAO,KAAK,EACR,QAAQ,EACR,QAAQ,EAER,cAAc,EACd,MAAM,EACN,OAAO,EACV,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,cAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ class _InsightsHandler {
|
|
|
22
22
|
steps: []
|
|
23
23
|
};
|
|
24
24
|
_userCaps = {};
|
|
25
|
+
_options;
|
|
25
26
|
listener = Listener.getInstance();
|
|
26
27
|
currentTestId;
|
|
27
28
|
cbtQueue = [];
|
|
@@ -31,6 +32,7 @@ class _InsightsHandler {
|
|
|
31
32
|
const caps = this._browser.capabilities;
|
|
32
33
|
const sessionId = this._browser.sessionId;
|
|
33
34
|
this._userCaps = _userCaps;
|
|
35
|
+
this._options = _options;
|
|
34
36
|
this._platformMeta = {
|
|
35
37
|
browserName: caps.browserName,
|
|
36
38
|
browserVersion: caps?.browserVersion,
|
|
@@ -483,6 +485,22 @@ class _InsightsHandler {
|
|
|
483
485
|
/*
|
|
484
486
|
* private methods
|
|
485
487
|
*/
|
|
488
|
+
/**
|
|
489
|
+
* Check if any test steps failed (excluding hook failures)
|
|
490
|
+
* This is used when ignoreHooksStatus is true to determine test status based only on test steps
|
|
491
|
+
*/
|
|
492
|
+
hasTestStepFailures(world) {
|
|
493
|
+
if (!world?.pickle) {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
const uniqueId = getUniqueIdentifierForCucumber(world);
|
|
497
|
+
const testMetaData = this._tests[uniqueId];
|
|
498
|
+
if (!testMetaData?.steps) {
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
// Check if any step failed
|
|
502
|
+
return testMetaData.steps.some(step => step.result === 'FAILED');
|
|
503
|
+
}
|
|
486
504
|
attachHookData(context, hookId) {
|
|
487
505
|
if (context.currentTest && context.currentTest.parent) {
|
|
488
506
|
const parentTest = `${context.currentTest.parent.title} - ${context.currentTest.title}`;
|
|
@@ -690,6 +708,16 @@ class _InsightsHandler {
|
|
|
690
708
|
if (result !== 'passed' && result !== 'failed') {
|
|
691
709
|
result = 'skipped'; // mark UNKNOWN/UNDEFINED/AMBIGUOUS/PENDING as skipped
|
|
692
710
|
}
|
|
711
|
+
// Handle ignoreHooksStatus: when enabled and scenario failed, check if it's due to hook failures only
|
|
712
|
+
const ignoreHooksStatus = this._options?.testObservabilityOptions?.ignoreHooksStatus === true;
|
|
713
|
+
if (ignoreHooksStatus && result === 'failed' && world) {
|
|
714
|
+
// Check if any test steps failed (excluding hook failures)
|
|
715
|
+
const hasTestStepFailures = this.hasTestStepFailures(world);
|
|
716
|
+
if (!hasTestStepFailures) {
|
|
717
|
+
// Only hooks failed, override result to passed for Test Observability
|
|
718
|
+
result = 'passed';
|
|
719
|
+
}
|
|
720
|
+
}
|
|
693
721
|
testData.finished_at = (new Date()).toISOString();
|
|
694
722
|
testData.result = result;
|
|
695
723
|
testData.duration_in_ms = world.result.duration.seconds * 1000 + world.result.duration.nanos / 1000000; // send duration in ms
|
package/build/service.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
6
6
|
private _config;
|
|
7
7
|
private _sessionBaseUrl;
|
|
8
8
|
private _failReasons;
|
|
9
|
+
private _hookFailReasons;
|
|
10
|
+
private _pureTestFailReasons;
|
|
9
11
|
private _scenariosThatRan;
|
|
10
12
|
private _failureStatuses;
|
|
11
13
|
private _browser?;
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAY9E,OAAO,KAAK,EAAE,kBAAkB,EAAuB,iBAAiB,EAA8C,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAgBhG,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,QAAQ,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAY9E,OAAO,KAAK,EAAE,kBAAkB,EAAuB,iBAAiB,EAA8C,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAgBhG,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,QAAQ,CAAC,eAAe;IAyBpE,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IAzBnB,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,gBAAgB,CAA4D;IACpF,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAA;IACtB,OAAO,CAAC,YAAY,CAAC,CAA0C;IAC/D,OAAO,CAAC,gBAAgB,CAAC,CAAiB;IAC1C,OAAO,CAAC,cAAc,CAAA;IACtB,OAAO,CAAC,qBAAqB,CAAC,CAAsB;IACpD,OAAO,CAAC,MAAM,CAAA;IACd,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,WAAW,CAAA;gBAGf,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EACxC,KAAK,EAAE,YAAY,CAAC,gBAAgB,EACpC,OAAO,EAAE,OAAO,CAAC,UAAU;IAiCvC,WAAW,CAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,GAAG,YAAY,CAAC,mBAAmB,KAAK,IAAI;IAW5F,aAAa,CAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC;IAiBzD,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO;IAoH/F;;;;;;OAMG;IAEG,WAAW,CAAE,KAAK,EAAE,UAAU,CAAC,KAAK;IAWpC,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,EAAE,OAAO,EAAE,GAAG;IAQ5D,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IAe/F,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAsBjC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU;IAgB/E,KAAK,CAAE,MAAM,EAAE,MAAM;IAsF3B;;OAEG;IAGG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAOjD;;;OAGG;IAEG,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAS7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;IAwC5C,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;IAMzD,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY;IAKzF,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAkDzD,cAAc,IAAI,OAAO;IAMzB,UAAU,CAAE,WAAW,EAAE,GAAG;IAU5B,kBAAkB,CAAE,MAAM,EAAE,iBAAiB;IAqB7C,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG;IAqBrC,gBAAgB;YAiCR,eAAe;IA4B7B,OAAO,CAAC,cAAc;YAIR,eAAe;IAsB7B,OAAO,CAAC,cAAc;CAKzB"}
|
package/build/service.js
CHANGED
|
@@ -25,6 +25,8 @@ export default class BrowserstackService {
|
|
|
25
25
|
_config;
|
|
26
26
|
_sessionBaseUrl = 'https://api.browserstack.com/automate/sessions';
|
|
27
27
|
_failReasons = [];
|
|
28
|
+
_hookFailReasons = [];
|
|
29
|
+
_pureTestFailReasons = [];
|
|
28
30
|
_scenariosThatRan = [];
|
|
29
31
|
_failureStatuses = ['failed', 'ambiguous', 'undefined', 'unknown'];
|
|
30
32
|
_browser;
|
|
@@ -186,6 +188,15 @@ export default class BrowserstackService {
|
|
|
186
188
|
await this._insightsHandler?.beforeHook(test, context);
|
|
187
189
|
}
|
|
188
190
|
async afterHook(test, context, result) {
|
|
191
|
+
// Track hook failures separately
|
|
192
|
+
if (result && !result.passed) {
|
|
193
|
+
const hookError = (result.error && result.error.message) || 'Hook failed';
|
|
194
|
+
this._hookFailReasons.push(hookError);
|
|
195
|
+
// Still add to main failReasons for backward compatibility if ignoreHooksStatus is not enabled
|
|
196
|
+
if (!this._options.testObservabilityOptions?.ignoreHooksStatus) {
|
|
197
|
+
this._failReasons.push(hookError);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
189
200
|
await this._insightsHandler?.afterHook(test, result);
|
|
190
201
|
}
|
|
191
202
|
async beforeTest(test) {
|
|
@@ -211,7 +222,10 @@ export default class BrowserstackService {
|
|
|
211
222
|
this._specsRan = true;
|
|
212
223
|
const { error, passed } = results;
|
|
213
224
|
if (!passed) {
|
|
214
|
-
|
|
225
|
+
const testError = (error && error.message) || 'Unknown Error';
|
|
226
|
+
this._failReasons.push(testError);
|
|
227
|
+
// Track this as a pure test failure (not hook-related)
|
|
228
|
+
this._pureTestFailReasons.push(testError);
|
|
215
229
|
}
|
|
216
230
|
await this._accessibilityHandler?.afterTest(this._suiteTitle, test);
|
|
217
231
|
await this._insightsHandler?.afterTest(test, results);
|
|
@@ -226,12 +240,57 @@ export default class BrowserstackService {
|
|
|
226
240
|
}
|
|
227
241
|
await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.AUTOMATE_EVENTS.SESSION_STATUS, async () => {
|
|
228
242
|
if (setSessionStatus) {
|
|
229
|
-
const
|
|
243
|
+
const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true;
|
|
244
|
+
let sessionStatus;
|
|
245
|
+
let failureReason;
|
|
246
|
+
if (result === 0 && this._specsRan) {
|
|
247
|
+
// Test runner reported success and tests ran
|
|
248
|
+
if (ignoreHooksStatus) {
|
|
249
|
+
// Only consider pure test failures, ignore hook failures
|
|
250
|
+
const hasPureTestFailures = this._pureTestFailReasons.length > 0;
|
|
251
|
+
sessionStatus = hasPureTestFailures ? 'failed' : 'passed';
|
|
252
|
+
failureReason = hasPureTestFailures ? this._pureTestFailReasons.join('\n') : undefined;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Default behavior: consider all failures including hooks
|
|
256
|
+
const hasReasons = this._failReasons.length > 0;
|
|
257
|
+
sessionStatus = hasReasons ? 'failed' : 'passed';
|
|
258
|
+
failureReason = hasReasons ? this._failReasons.join('\n') : undefined;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else if (ignoreHooksStatus && this._specsRan) {
|
|
262
|
+
// Test runner reported failure but ignoreHooksStatus is enabled
|
|
263
|
+
// Check if we only have hook failures and no pure test failures
|
|
264
|
+
const hasPureTestFailures = this._pureTestFailReasons.length > 0;
|
|
265
|
+
const hasOnlyHookFailures = this._failReasons.length === 0 && this._hookFailReasons.length > 0;
|
|
266
|
+
if (hasOnlyHookFailures && !hasPureTestFailures) {
|
|
267
|
+
// Only hook failures exist - mark as passed when ignoreHooksStatus is true
|
|
268
|
+
sessionStatus = 'passed';
|
|
269
|
+
failureReason = undefined;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
// Pure test failures exist - mark as failed
|
|
273
|
+
sessionStatus = 'failed';
|
|
274
|
+
failureReason = hasPureTestFailures ? this._pureTestFailReasons.join('\n') : undefined;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Default behavior: mark as failed (test runner reported failure or no tests ran)
|
|
279
|
+
sessionStatus = 'failed';
|
|
280
|
+
if (ignoreHooksStatus && this._pureTestFailReasons.length > 0) {
|
|
281
|
+
failureReason = this._pureTestFailReasons.join('\n');
|
|
282
|
+
}
|
|
283
|
+
else if (this._failReasons.length > 0) {
|
|
284
|
+
failureReason = this._failReasons.join('\n');
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
failureReason = undefined;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
230
290
|
await this._updateJob({
|
|
231
|
-
status:
|
|
291
|
+
status: sessionStatus,
|
|
232
292
|
...(setSessionName ? { name: this._fullTitle } : {}),
|
|
233
|
-
...(
|
|
234
|
-
{} : hasReasons ? { reason: this._failReasons.join('\n') } : {})
|
|
293
|
+
...(failureReason ? { reason: failureReason } : {})
|
|
235
294
|
});
|
|
236
295
|
}
|
|
237
296
|
})();
|
|
@@ -247,6 +306,13 @@ export default class BrowserstackService {
|
|
|
247
306
|
'uploadPending', 'teardown', 'browserCommand'
|
|
248
307
|
]);
|
|
249
308
|
}
|
|
309
|
+
// Override process exit when we have only hook failures and ignoreHooksStatus is true
|
|
310
|
+
const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true;
|
|
311
|
+
const hasOnlyHookFailures = this._failReasons.length === 0 && this._hookFailReasons.length > 0;
|
|
312
|
+
const shouldOverrideResult = ignoreHooksStatus && this._specsRan && hasOnlyHookFailures;
|
|
313
|
+
if (shouldOverrideResult && result !== 0) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
250
316
|
}
|
|
251
317
|
/**
|
|
252
318
|
* For CucumberJS
|
|
@@ -279,7 +345,23 @@ export default class BrowserstackService {
|
|
|
279
345
|
(status === 'pending'
|
|
280
346
|
? `Some steps/hooks are pending for scenario "${world.pickle.name}"`
|
|
281
347
|
: 'Unknown Error'));
|
|
282
|
-
|
|
348
|
+
// For Cucumber with ignoreHooksStatus, check if failure is due to test steps or hooks
|
|
349
|
+
const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true;
|
|
350
|
+
if (ignoreHooksStatus && this._insightsHandler) {
|
|
351
|
+
// Check if any test steps failed (excluding hook failures)
|
|
352
|
+
const hasTestStepFailures = this._insightsHandler.hasTestStepFailures(world);
|
|
353
|
+
if (hasTestStepFailures) {
|
|
354
|
+
// Test steps failed - this is a pure test failure, add to both arrays
|
|
355
|
+
this._failReasons.push(exception);
|
|
356
|
+
this._pureTestFailReasons.push(exception);
|
|
357
|
+
}
|
|
358
|
+
// If no test steps failed, this is likely a hook-only failure - don't add to main failure arrays
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
// Default behavior: treat all scenario failures as test failures
|
|
362
|
+
this._failReasons.push(exception);
|
|
363
|
+
this._pureTestFailReasons.push(exception);
|
|
364
|
+
}
|
|
283
365
|
}
|
|
284
366
|
await this._accessibilityHandler?.afterScenario(world);
|
|
285
367
|
await this._insightsHandler?.afterScenario(world);
|
|
@@ -297,20 +379,33 @@ export default class BrowserstackService {
|
|
|
297
379
|
return Promise.resolve();
|
|
298
380
|
}
|
|
299
381
|
const { setSessionName, setSessionStatus } = this._options;
|
|
300
|
-
const
|
|
301
|
-
|
|
382
|
+
const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true;
|
|
383
|
+
let sessionStatus;
|
|
384
|
+
let failureReason;
|
|
385
|
+
if (ignoreHooksStatus) {
|
|
386
|
+
// Only consider pure test failures, ignore hook failures
|
|
387
|
+
const hasPureTestFailures = this._pureTestFailReasons.length > 0;
|
|
388
|
+
sessionStatus = hasPureTestFailures ? 'failed' : 'passed';
|
|
389
|
+
failureReason = hasPureTestFailures ? this._pureTestFailReasons.join('\n') : undefined;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
// Default behavior: consider all failures including hooks
|
|
393
|
+
const hasReasons = this._failReasons.length > 0;
|
|
394
|
+
sessionStatus = hasReasons ? 'failed' : 'passed';
|
|
395
|
+
failureReason = hasReasons ? this._failReasons.join('\n') : undefined;
|
|
396
|
+
}
|
|
302
397
|
if (!this._browser.isMultiremote) {
|
|
303
|
-
BStackLogger.info(`Update (reloaded) job with sessionId ${oldSessionId}, ${
|
|
398
|
+
BStackLogger.info(`Update (reloaded) job with sessionId ${oldSessionId}, ${sessionStatus}`);
|
|
304
399
|
}
|
|
305
400
|
else {
|
|
306
401
|
const browserName = this._browser.instances.filter((browserName) => this._browser && this._browser.getInstance(browserName).sessionId === newSessionId)[0];
|
|
307
|
-
BStackLogger.info(`Update (reloaded) multiremote job for browser "${browserName}" and sessionId ${oldSessionId}, ${
|
|
402
|
+
BStackLogger.info(`Update (reloaded) multiremote job for browser "${browserName}" and sessionId ${oldSessionId}, ${sessionStatus}`);
|
|
308
403
|
}
|
|
309
404
|
if (setSessionStatus) {
|
|
310
405
|
await this._update(oldSessionId, {
|
|
311
|
-
status,
|
|
406
|
+
status: sessionStatus,
|
|
312
407
|
...(setSessionName ? { name: this._fullTitle } : {}),
|
|
313
|
-
...(
|
|
408
|
+
...(failureReason ? { reason: failureReason } : {})
|
|
314
409
|
});
|
|
315
410
|
}
|
|
316
411
|
BStackLogger.warn(`Session Reloaded: Old Session Id: ${oldSessionId}, New Session Id: ${newSessionId}`);
|
|
@@ -319,6 +414,8 @@ export default class BrowserstackService {
|
|
|
319
414
|
delete this._fullTitle;
|
|
320
415
|
delete this._suiteFile;
|
|
321
416
|
this._failReasons = [];
|
|
417
|
+
this._hookFailReasons = [];
|
|
418
|
+
this._pureTestFailReasons = [];
|
|
322
419
|
await this._printSessionURL();
|
|
323
420
|
}
|
|
324
421
|
_isAppAutomate() {
|
package/build/types.d.ts
CHANGED
|
@@ -30,6 +30,13 @@ export interface TestObservabilityOptions {
|
|
|
30
30
|
buildTag?: string[];
|
|
31
31
|
user?: string;
|
|
32
32
|
key?: string;
|
|
33
|
+
/**
|
|
34
|
+
* When set to true, hook failures will not influence the test status.
|
|
35
|
+
* Tests will be marked as "passed" if all test steps pass, even if hooks fail.
|
|
36
|
+
* When set to false or not set (default), hook failures will mark tests as "failed".
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
ignoreHooksStatus?: boolean;
|
|
33
40
|
}
|
|
34
41
|
export interface BrowserstackOptions extends Options.Testrunner {
|
|
35
42
|
selfHeal?: boolean;
|
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,UAAU,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9D,MAAM,WAAW,eAAe;IAE5B,kBAAkB,EAAE;QAEhB,WAAW,EAAE,MAAM,CAAA;KACtB,CAAA;CACJ;AAED,MAAM,WAAW,yBAAyB;IACtC,GAAG,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE1F,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/browserstack-service",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.46.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",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"gitconfiglocal": "^2.1.0",
|
|
46
46
|
"got": "^12.6.1",
|
|
47
47
|
"uuid": "^10.0.0",
|
|
48
|
-
"webdriverio": "8.
|
|
48
|
+
"webdriverio": "8.46.0",
|
|
49
49
|
"winston-transport": "^4.5.0",
|
|
50
50
|
"yauzl": "^3.0.0"
|
|
51
51
|
},
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^22.2.0",
|
|
57
|
-
"@wdio/globals": "8.
|
|
57
|
+
"@wdio/globals": "8.46.0"
|
|
58
58
|
},
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "8f557271fbf5579061cd4bb2151871b0832cf811"
|
|
63
63
|
}
|