@wdio/browserstack-service 8.44.1 → 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.
@@ -1,4 +1,5 @@
1
- import type { Capabilities, Frameworks } from '@wdio/types';
1
+ import type { Capabilities, Frameworks, Options } from '@wdio/types';
2
+ import type { BrowserstackConfig, BrowserstackOptions } from './types.js';
2
3
  import type { ITestCaseHookParameter } from './cucumber-types.js';
3
4
  declare class _AccessibilityHandler {
4
5
  private _browser;
@@ -11,12 +12,17 @@ declare class _AccessibilityHandler {
11
12
  private _caps;
12
13
  private _suiteFile?;
13
14
  private _accessibility?;
15
+ private _turboscale?;
16
+ private _options;
17
+ private _config;
14
18
  private _accessibilityOptions?;
19
+ private _autoScanning;
20
+ private _testIdentifier;
15
21
  private _testMetadata;
16
22
  private static _a11yScanSessionMap;
17
23
  private _sessionId;
18
24
  private listener;
19
- constructor(_browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, _capabilities: Capabilities.RemoteCapability, isAppAutomate: boolean, _framework?: string | undefined, _accessibilityAutomation?: (boolean | string) | undefined, _accessibilityOpts?: {
25
+ constructor(_browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, _capabilities: Capabilities.RemoteCapability, _options: BrowserstackConfig & BrowserstackOptions, isAppAutomate: boolean, _config: Options.Testrunner, _framework?: string | undefined, _accessibilityAutomation?: (boolean | string) | undefined, _turboscale?: boolean | string, _accessibilityOpts?: {
20
26
  [key: string]: any;
21
27
  } | undefined);
22
28
  setSuiteFile(filename: string): void;
@@ -35,6 +41,7 @@ declare class _AccessibilityHandler {
35
41
  private shouldRunTestHooks;
36
42
  private checkIfPageOpened;
37
43
  private static shouldPatchExecuteScript;
44
+ private _setAnnotation;
38
45
  }
39
46
  declare const AccessibilityHandler: typeof _AccessibilityHandler;
40
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,MAAM,aAAa,CAAA;AAE3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AA2BjE,cAAM,qBAAqB;IAYnB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,wBAAwB,CAAC;IACjC,OAAO,CAAC,kBAAkB,CAAC;IAhB/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,qBAAqB,CAAC,CAAyB;IACvD,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,EAC5C,aAAa,EAAE,OAAO,EACtB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,wBAAwB,CAAC,GAAE,OAAO,GAAG,MAAM,aAAA,EAC3C,kBAAkB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,YAAA;IAkBxD,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;IAiDzB,UAAU,CAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAmCjE,SAAS,CAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAoCtE;;MAEE;IACI,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAkC7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;YAsCpC,cAAc;YAcd,iBAAiB;IAc/B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;YAOZ,iBAAiB;IAkB/B,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAU1C;AAGD,QAAA,MAAM,oBAAoB,EAAE,OAAO,qBAAoE,CAAA;AACvG,KAAK,oBAAoB,GAAG,qBAAqB,CAAA;AAEjD,eAAe,oBAAoB,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, 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';
@@ -16,12 +16,17 @@ class _AccessibilityHandler {
16
16
  _caps;
17
17
  _suiteFile;
18
18
  _accessibility;
19
+ _turboscale;
20
+ _options;
21
+ _config;
19
22
  _accessibilityOptions;
23
+ _autoScanning = true;
24
+ _testIdentifier = null;
20
25
  _testMetadata = {};
21
26
  static _a11yScanSessionMap = {};
22
27
  _sessionId = null;
23
28
  listener = Listener.getInstance();
24
- constructor(_browser, _capabilities, isAppAutomate, _framework, _accessibilityAutomation, _accessibilityOpts) {
29
+ constructor(_browser, _capabilities, _options, isAppAutomate, _config, _framework, _accessibilityAutomation, _turboscale, _accessibilityOpts) {
25
30
  this._browser = _browser;
26
31
  this._capabilities = _capabilities;
27
32
  this.isAppAutomate = isAppAutomate;
@@ -40,6 +45,10 @@ class _AccessibilityHandler {
40
45
  this._caps = _capabilities;
41
46
  this._accessibility = isTrue(_accessibilityAutomation);
42
47
  this._accessibilityOptions = _accessibilityOpts;
48
+ this._autoScanning = !isFalse(this._accessibilityOptions?.autoScanning);
49
+ this._options = _options;
50
+ this._config = _config;
51
+ this._turboscale = isTrue(_turboscale);
43
52
  }
44
53
  setSuiteFile(filename) {
45
54
  this._suiteFile = filename;
@@ -82,7 +91,13 @@ class _AccessibilityHandler {
82
91
  async before(sessionId) {
83
92
  this._sessionId = sessionId;
84
93
  this._accessibility = isTrue(this._getCapabilityValue(this._caps, 'accessibility', 'browserstack.accessibility'));
85
- if (isBrowserstackSession(this._browser)) {
94
+ //checks for running ALLY on non-bstack infra
95
+ if (isAccessibilityAutomationSession(this._accessibility) && (this._turboscale || !shouldAddServiceVersion(this._config, this._options.testObservability))) {
96
+ if (validateCapsWithNonBstackA11y(this._platformA11yMeta.browser_name, this._platformA11yMeta?.browser_version)) {
97
+ this._accessibility = true;
98
+ }
99
+ }
100
+ else {
86
101
  if (isAccessibilityAutomationSession(this._accessibility) && !this.isAppAutomate) {
87
102
  const deviceName = this._getCapabilityValue(this._caps, 'deviceName', 'device');
88
103
  const chromeOptions = this._getCapabilityValue(this._caps, 'goog:chromeOptions', '');
@@ -105,7 +120,27 @@ class _AccessibilityHandler {
105
120
  return await getA11yResults(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
106
121
  };
107
122
  this._browser.performScan = async () => {
108
- return await performA11yScan(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
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');
109
144
  };
110
145
  if (!this._accessibility) {
111
146
  return;
@@ -128,8 +163,9 @@ class _AccessibilityHandler {
128
163
  Listener.setTestRunAccessibilityVar(false);
129
164
  return;
130
165
  }
131
- const shouldScanTest = shouldScanTestForAccessibility(suiteTitle, test.title, this._accessibilityOptions);
166
+ const shouldScanTest = this._autoScanning && shouldScanTestForAccessibility(suiteTitle, test.title, this._accessibilityOptions);
132
167
  const testIdentifier = this.getIdentifier(test);
168
+ this._testIdentifier = testIdentifier;
133
169
  if (this._sessionId) {
134
170
  /* For case with multiple tests under one browser, before hook of 2nd test should change this map value */
135
171
  AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanTest;
@@ -185,13 +221,14 @@ class _AccessibilityHandler {
185
221
  const gherkinDocument = world.gherkinDocument;
186
222
  const featureData = gherkinDocument.feature;
187
223
  const uniqueId = getUniqueIdentifierForCucumber(world);
224
+ this._testIdentifier = uniqueId;
188
225
  if (!this.shouldRunTestHooks(this._browser, this._accessibility)) {
189
226
  /* This is to be used when test events are sent */
190
227
  Listener.setTestRunAccessibilityVar(false);
191
228
  return;
192
229
  }
193
230
  try {
194
- 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);
195
232
  this._testMetadata[uniqueId] = {
196
233
  scanTestForAccessibility: shouldScanScenario,
197
234
  accessibilityScanStarted: true
@@ -252,10 +289,12 @@ class _AccessibilityHandler {
252
289
  return origFunction(...args);
253
290
  }
254
291
  async sendTestStopEvent(browser, dataForExtension) {
255
- BStackLogger.debug('Performing scan before saving results');
256
- await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.PERFORM_SCAN, async () => {
257
- await performA11yScan(this.isAppAutomate, browser, true, true);
258
- }, { command: 'afterTest' })();
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
+ }
259
298
  if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
260
299
  return;
261
300
  }
@@ -274,7 +313,7 @@ class _AccessibilityHandler {
274
313
  if (!browser) {
275
314
  return false;
276
315
  }
277
- return isBrowserstackSession(browser) && isAccessibilityAutomationSession(isAccessibility);
316
+ return isAccessibilityAutomationSession(isAccessibility);
278
317
  }
279
318
  async checkIfPageOpened(browser, testIdentifier, shouldScanTest) {
280
319
  let pageOpen = false;
@@ -299,6 +338,17 @@ class _AccessibilityHandler {
299
338
  return (script.toLowerCase().indexOf('browserstack_executor') !== -1 ||
300
339
  script.toLowerCase().indexOf('browserstack_accessibility_automation_script') !== -1);
301
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
+ }
302
352
  }
303
353
  // https://github.com/microsoft/TypeScript/issues/6543
304
354
  const AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
package/build/config.d.ts CHANGED
@@ -11,7 +11,7 @@ declare class BrowserStackConfig {
11
11
  testObservability: TestOpsConfig;
12
12
  percy: boolean;
13
13
  percyCaptureMode?: string;
14
- accessibility: boolean;
14
+ accessibility: boolean | null;
15
15
  app?: string | AppConfig;
16
16
  private static _instance;
17
17
  appAutomate: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAKtD,cAAM,kBAAkB;IACpB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,GAAG,kBAAkB;IAO/G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,aAAa,CAAA;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,OAAO,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,GAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAQ;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,kBAAkB,UAAQ;IAEjC,OAAO;IAeP,cAAc;IAId,aAAa,CAAC,GAAG,EAAE,MAAM;CAI5B;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAKtD,cAAM,kBAAkB;IACpB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,GAAG,kBAAkB;IAO/G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,aAAa,CAAA;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAQ;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,kBAAkB,UAAQ;IAEjC,OAAO;IAeP,cAAc;IAId,aAAa,CAAC,GAAG,EAAE,MAAM;CAI5B;AAED,eAAe,kBAAkB,CAAA"}
package/build/config.js CHANGED
@@ -33,7 +33,7 @@ class BrowserStackConfig {
33
33
  this.accessKey = config.key;
34
34
  this.testObservability = new TestOpsConfig(options.testObservability !== false, !isUndefined(options.testObservability));
35
35
  this.percy = options.percy || false;
36
- this.accessibility = options.accessibility || false;
36
+ this.accessibility = options.accessibility !== undefined ? options.accessibility : null;
37
37
  this.app = options.app;
38
38
  this.appAutomate = !isUndefined(options.app);
39
39
  this.automate = !this.appAutomate;
@@ -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":"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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAsCxH,KAAK,iBAAiB,GAAG,yBAAyB,CAAC,KAAK,GAAG;IACvD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,2BAA4B,YAAW,QAAQ,CAAC,eAAe;IAY5E,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,OAAO;IAbnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IAgHjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAclC,SAAS,CAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB;IAgLpF,UAAU;IAyEV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IA0B7G,SAAS;IAaT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IAOxB,qBAAqB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAiFtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAmH5F,8BAA8B;IAgB9B,sBAAsB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB;IAyCrE;;;OAGG;IACH,oBAAoB;IA6BpB,sBAAsB,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,eAAe,CAAC,EAAC,MAAM;IASnF,mBAAmB;CAQtB"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AA0CxH,KAAK,iBAAiB,GAAG,yBAAyB,CAAC,KAAK,GAAG;IACvD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,2BAA4B,YAAW,QAAQ,CAAC,eAAe;IAY5E,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,OAAO;IAbnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAuB;IACxD,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IAiHjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAclC,SAAS,CAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB;IAmMpF,UAAU;IAyEV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IA0B7G,SAAS;IAaT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IAOxB,qBAAqB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IA8GtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA+H5F,8BAA8B;IAgB9B,sBAAsB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB;IAyCrE;;;OAGG;IACH,oBAAoB;IA6BpB,sBAAsB,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,eAAe,CAAC,EAAC,MAAM;IASnF,mBAAmB;CAStB"}
package/build/launcher.js CHANGED
@@ -16,7 +16,7 @@ import { SevereServiceError } from 'webdriverio';
16
16
  import * as BrowserstackLocalLauncher from 'browserstack-local';
17
17
  import { startPercy, stopPercy, getBestPlatformForPercySnapshot } from './Percy/PercyHelper.js';
18
18
  import { BSTACK_SERVICE_VERSION, NOT_ALLOWED_KEYS_IN_CAPS, PERF_MEASUREMENT_ENV, RERUN_ENV, RERUN_TESTS_ENV, BROWSERSTACK_TESTHUB_UUID, VALID_APP_EXTENSION, BROWSERSTACK_PERCY, BROWSERSTACK_OBSERVABILITY } from './constants.js';
19
- import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing } from './util.js';
19
+ import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing, getBooleanValueFromString, validateCapsWithNonBstackA11y, mergeChromeOptions } from './util.js';
20
20
  import { getProductMap } from './testHub/utils.js';
21
21
  import CrashReporter from './crash-reporter.js';
22
22
  import { BStackLogger } from './bstackLogger.js';
@@ -29,6 +29,7 @@ import AiHandler from './ai-handler.js';
29
29
  import TestOpsConfig from './testOps/testOpsConfig.js';
30
30
  import PerformanceTester from './instrumentation/performance/performance-tester.js';
31
31
  import * as PERFORMANCE_SDK_EVENTS from './instrumentation/performance/constants.js';
32
+ import accessibilityScripts from './scripts/accessibility-scripts.js';
32
33
  export default class BrowserstackLauncherService {
33
34
  _options;
34
35
  _config;
@@ -37,7 +38,7 @@ export default class BrowserstackLauncherService {
37
38
  _projectName;
38
39
  _buildTag;
39
40
  _buildIdentifier;
40
- _accessibilityAutomation;
41
+ _accessibilityAutomation = null;
41
42
  _percy;
42
43
  _percyBestPlatformCaps;
43
44
  browserStackConfig;
@@ -104,7 +105,6 @@ export default class BrowserstackLauncherService {
104
105
  caps.capabilities['bstack:options'] = { wdioService: BSTACK_SERVICE_VERSION };
105
106
  if (!isUndefined(caps.capabilities['browserstack.accessibility'])) {
106
107
  this._accessibilityAutomation ||= isTrue(caps.capabilities['browserstack.accessibility']);
107
- this.browserStackConfig.accessibility = this._accessibilityAutomation;
108
108
  }
109
109
  else if (isTrue(this._options.accessibility)) {
110
110
  caps.capabilities['bstack:options'] = { wdioService: BSTACK_SERVICE_VERSION, accessibility: (isTrue(this._options.accessibility)) };
@@ -135,7 +135,9 @@ export default class BrowserstackLauncherService {
135
135
  this.browserStackConfig.buildIdentifier = this._buildIdentifier;
136
136
  this.browserStackConfig.buildName = this._buildName;
137
137
  PerformanceTester.startMonitoring('performance-report-launcher.csv');
138
- this._accessibilityAutomation ||= isTrue(this._options.accessibility);
138
+ if (!isUndefined(this._options.accessibility)) {
139
+ this._accessibilityAutomation ||= isTrue(this._options.accessibility);
140
+ }
139
141
  this._options.accessibility = this._accessibilityAutomation;
140
142
  // by default observability will be true unless specified as false
141
143
  this._options.testObservability = this._options.testObservability !== false;
@@ -239,16 +241,32 @@ export default class BrowserstackLauncherService {
239
241
  // remove accessibilityOptions from the capabilities if present
240
242
  this._updateObjectTypeCaps(capabilities, 'accessibilityOptions');
241
243
  const shouldSetupPercy = this._options.percy || (isUndefined(this._options.percy) && this._options.app);
242
- this.browserStackConfig.accessibility = this._accessibilityAutomation;
244
+ let buildStartResponse = null;
243
245
  if (this._options.testObservability || this._accessibilityAutomation || shouldSetupPercy) {
244
246
  BStackLogger.debug('Sending launch start event');
245
- await launchTestSession(this._options, this._config, {
247
+ buildStartResponse = await launchTestSession(this._options, this._config, {
246
248
  projectName: this._projectName,
247
249
  buildName: this._buildName,
248
250
  buildTag: this._buildTag,
249
251
  bstackServiceVersion: BSTACK_SERVICE_VERSION,
250
252
  buildIdentifier: this._buildIdentifier
251
- }, this.browserStackConfig);
253
+ }, this.browserStackConfig, this._accessibilityAutomation);
254
+ //added checks for Accessibility running on non-bstack infra
255
+ if (isAccessibilityAutomationSession(this._accessibilityAutomation) && (process.env.BROWSERSTACK_TURBOSCALE || !shouldAddServiceVersion(this._config, this._options.testObservability))) {
256
+ const overrideOptions = accessibilityScripts.ChromeExtension;
257
+ this._updateObjectTypeCaps(capabilities, 'goog:chromeOptions', overrideOptions);
258
+ }
259
+ if (buildStartResponse?.accessibility) {
260
+ if (this._accessibilityAutomation === null) {
261
+ this.browserStackConfig.accessibility = buildStartResponse.accessibility.success;
262
+ this._accessibilityAutomation = buildStartResponse.accessibility.success;
263
+ this._options.accessibility = buildStartResponse.accessibility.success;
264
+ if (buildStartResponse.accessibility.success === true) {
265
+ this._updateCaps(capabilities, 'accessibility', 'true');
266
+ }
267
+ }
268
+ }
269
+ this.browserStackConfig.accessibility = this._accessibilityAutomation;
252
270
  if (this._accessibilityAutomation && this._options.accessibilityOptions) {
253
271
  const filteredOpts = Object.keys(this._options.accessibilityOptions)
254
272
  .filter(key => !NOT_ALLOWED_KEYS_IN_CAPS.includes(key))
@@ -484,6 +502,19 @@ export default class BrowserstackLauncherService {
484
502
  return c;
485
503
  })
486
504
  .forEach((capability) => {
505
+ if (validateCapsWithNonBstackA11y(capability.browserName, capability.browserVersion)) {
506
+ if (capType === 'goog:chromeOptions' && value) {
507
+ const chromeOptions = capability['goog:chromeOptions'];
508
+ if (chromeOptions) {
509
+ const finalChromeOptions = mergeChromeOptions(chromeOptions, value);
510
+ capability['goog:chromeOptions'] = finalChromeOptions;
511
+ }
512
+ else {
513
+ capability['goog:chromeOptions'] = value;
514
+ }
515
+ return;
516
+ }
517
+ }
487
518
  if (!capability['bstack:options']) {
488
519
  const extensionCaps = Object.keys(capability).filter((cap) => cap.includes(':'));
489
520
  if (extensionCaps.length) {
@@ -522,6 +553,19 @@ export default class BrowserstackLauncherService {
522
553
  }
523
554
  else if (typeof capabilities === 'object') {
524
555
  Object.entries(capabilities).forEach(([, caps]) => {
556
+ if (validateCapsWithNonBstackA11y(caps.capabilities.browserName, caps.capabilities.browserVersion)) {
557
+ if (capType === 'goog:chromeOptions' && value) {
558
+ const chromeOptions = caps.capabilities['goog:chromeOptions'];
559
+ if (chromeOptions) {
560
+ const finalChromeOptions = mergeChromeOptions(chromeOptions, value);
561
+ caps.capabilities['goog:chromeOptions'] = finalChromeOptions;
562
+ }
563
+ else {
564
+ caps.capabilities['goog:chromeOptions'] = value;
565
+ }
566
+ return;
567
+ }
568
+ }
525
569
  if (!caps.capabilities['bstack:options']) {
526
570
  const extensionCaps = Object.keys(caps.capabilities).filter((cap) => cap.includes(':'));
527
571
  if (extensionCaps.length) {
@@ -591,6 +635,9 @@ export default class BrowserstackLauncherService {
591
635
  else if (capType === 'buildProductMap' && getProductMap(this.browserStackConfig)) {
592
636
  capability['bstack:options'] = { buildProductMap: getProductMap(this.browserStackConfig) };
593
637
  }
638
+ else if (capType === 'accessibility') {
639
+ capability['bstack:options'] = { accessibility: getBooleanValueFromString(value) };
640
+ }
594
641
  }
595
642
  else if (capType === 'local') {
596
643
  capability['browserstack.local'] = true;
@@ -615,6 +662,9 @@ export default class BrowserstackLauncherService {
615
662
  else if (capType === 'buildProductMap') {
616
663
  capability['browserstack.buildProductMap'] = getProductMap(this.browserStackConfig);
617
664
  }
665
+ else if (capType === 'accessibility') {
666
+ capability['browserstack.accessibility'] = getBooleanValueFromString(value);
667
+ }
618
668
  }
619
669
  else if (capType === 'local') {
620
670
  capability['bstack:options'].local = true;
@@ -639,6 +689,9 @@ export default class BrowserstackLauncherService {
639
689
  else if (capType === 'buildProductMap') {
640
690
  capability['bstack:options'].buildProductMap = getProductMap(this.browserStackConfig);
641
691
  }
692
+ else if (capType === 'accessibility') {
693
+ capability['bstack:options'].accessibility = getBooleanValueFromString(value);
694
+ }
642
695
  });
643
696
  }
644
697
  else if (typeof capabilities === 'object') {
@@ -661,6 +714,9 @@ export default class BrowserstackLauncherService {
661
714
  else if (capType === 'buildProductMap') {
662
715
  caps.capabilities['bstack:options'] = { buildProductMap: getProductMap(this.browserStackConfig) };
663
716
  }
717
+ else if (capType === 'accessibility') {
718
+ caps.capabilities['bstack:options'] = { accessibility: getBooleanValueFromString(value) };
719
+ }
664
720
  }
665
721
  else if (capType === 'local') {
666
722
  caps.capabilities['browserstack.local'] = true;
@@ -685,6 +741,9 @@ export default class BrowserstackLauncherService {
685
741
  else if (capType === 'buildProductMap') {
686
742
  caps.capabilities['browserstack.buildProductMap'] = getProductMap(this.browserStackConfig);
687
743
  }
744
+ else if (capType === 'accessibility') {
745
+ caps.capabilities['browserstack.accessibility'] = getBooleanValueFromString(value);
746
+ }
688
747
  }
689
748
  else if (capType === 'local') {
690
749
  caps.capabilities['bstack:options'].local = true;
@@ -709,6 +768,9 @@ export default class BrowserstackLauncherService {
709
768
  else if (capType === 'buildProductMap') {
710
769
  caps.capabilities['bstack:options'].buildProductMap = getProductMap(this.browserStackConfig);
711
770
  }
771
+ else if (capType === 'accessibility') {
772
+ caps.capabilities['bstack:options'].accessibility = getBooleanValueFromString(value);
773
+ }
712
774
  });
713
775
  }
714
776
  else {
@@ -5,6 +5,9 @@ declare class AccessibilityScripts {
5
5
  getResultsSummary: string | null;
6
6
  saveTestResults: string | null;
7
7
  commandsToWrap: Array<any> | null;
8
+ ChromeExtension: {
9
+ [key: string]: unknown;
10
+ };
8
11
  browserstackFolderPath: string;
9
12
  commandsPath: string;
10
13
  private constructor();
@@ -14,6 +17,7 @@ declare class AccessibilityScripts {
14
17
  update(data: {
15
18
  commands: any[];
16
19
  scripts: Record<string, any>;
20
+ nonBStackInfraA11yChromeOptions: {};
17
21
  }): void;
18
22
  store(): void;
19
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility-scripts.d.ts","sourceRoot":"","sources":["../../src/scripts/accessibility-scripts.ts"],"names":[],"mappings":"AAIA,cAAM,oBAAoB;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoC;IAEpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAO;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAO;IACvC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAO;IACrC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAO;IAExC,sBAAsB,SAAK;IAC3B,YAAY,SAAK;IAGxB,OAAO;WAKO,mBAAmB;IAQ1B,cAAc,IAAI,MAAM;IAuBxB,oBAAoB;IAapB,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE;IAY9D,KAAK;CAef;;AAED,wBAAyD"}
1
+ {"version":3,"file":"accessibility-scripts.d.ts","sourceRoot":"","sources":["../../src/scripts/accessibility-scripts.ts"],"names":[],"mappings":"AAIA,cAAM,oBAAoB;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoC;IAEpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAO;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAO;IACvC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAO;IACrC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAO;IACxC,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAK;IAEhD,sBAAsB,SAAK;IAC3B,YAAY,SAAK;IAGxB,OAAO;WAKO,mBAAmB;IAQ1B,cAAc,IAAI,MAAM;IAuBxB,oBAAoB;IAapB,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,+BAA+B,EAAE,EAAE,CAAA;KAAE;IAenG,KAAK;CAgBf;;AAED,wBAAyD"}
@@ -8,6 +8,7 @@ class AccessibilityScripts {
8
8
  getResultsSummary = null;
9
9
  saveTestResults = null;
10
10
  commandsToWrap = null;
11
+ ChromeExtension = {};
11
12
  browserstackFolderPath = '';
12
13
  commandsPath = '';
13
14
  // don't allow to create instances from it other than through `checkAndGetInstance`
@@ -66,6 +67,9 @@ class AccessibilityScripts {
66
67
  if (data.commands && data.commands.length) {
67
68
  this.commandsToWrap = data.commands;
68
69
  }
70
+ if (data.nonBStackInfraA11yChromeOptions) {
71
+ this.ChromeExtension = data.nonBStackInfraA11yChromeOptions;
72
+ }
69
73
  }
70
74
  store() {
71
75
  if (!fs.existsSync(this.browserstackFolderPath)) {
@@ -78,7 +82,8 @@ class AccessibilityScripts {
78
82
  getResults: this.getResults,
79
83
  getResultsSummary: this.getResultsSummary,
80
84
  saveResults: this.saveTestResults,
81
- }
85
+ },
86
+ nonBStackInfraA11yChromeOptions: this.ChromeExtension,
82
87
  }));
83
88
  }
84
89
  }
@@ -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?;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
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;
@@ -119,15 +121,13 @@ export default class BrowserstackService {
119
121
  if (this._browser) {
120
122
  try {
121
123
  const sessionId = this._browser.sessionId;
122
- if (isBrowserstackSession(this._browser)) {
123
- try {
124
- this._accessibilityHandler = new AccessibilityHandler(this._browser, this._caps, this._isAppAutomate(), this._config.framework, this._accessibility, this._options.accessibilityOptions);
125
- await this._accessibilityHandler.before(sessionId);
126
- Listener.setAccessibilityOptions(this._options.accessibilityOptions);
127
- }
128
- catch (err) {
129
- BStackLogger.error(`[Accessibility Test Run] Error in service class before function: ${err}`);
130
- }
124
+ try {
125
+ this._accessibilityHandler = new AccessibilityHandler(this._browser, this._caps, this._options, this._isAppAutomate(), this._config, this._config.framework, this._accessibility, this._turboScale, this._options.accessibilityOptions);
126
+ await this._accessibilityHandler.before(sessionId);
127
+ Listener.setAccessibilityOptions(this._options.accessibilityOptions);
128
+ }
129
+ catch (err) {
130
+ BStackLogger.error(`[Accessibility Test Run] Error in service class before function: ${err}`);
131
131
  }
132
132
  if (shouldProcessEventForTesthub('')) {
133
133
  patchConsoleLogs();
@@ -188,6 +188,15 @@ export default class BrowserstackService {
188
188
  await this._insightsHandler?.beforeHook(test, context);
189
189
  }
190
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
+ }
191
200
  await this._insightsHandler?.afterHook(test, result);
192
201
  }
193
202
  async beforeTest(test) {
@@ -213,7 +222,10 @@ export default class BrowserstackService {
213
222
  this._specsRan = true;
214
223
  const { error, passed } = results;
215
224
  if (!passed) {
216
- this._failReasons.push((error && error.message) || 'Unknown Error');
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);
217
229
  }
218
230
  await this._accessibilityHandler?.afterTest(this._suiteTitle, test);
219
231
  await this._insightsHandler?.afterTest(test, results);
@@ -228,12 +240,57 @@ export default class BrowserstackService {
228
240
  }
229
241
  await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.AUTOMATE_EVENTS.SESSION_STATUS, async () => {
230
242
  if (setSessionStatus) {
231
- const hasReasons = this._failReasons.length > 0;
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
+ }
232
290
  await this._updateJob({
233
- status: result === 0 && this._specsRan ? 'passed' : 'failed',
291
+ status: sessionStatus,
234
292
  ...(setSessionName ? { name: this._fullTitle } : {}),
235
- ...(result === 0 && this._specsRan ?
236
- {} : hasReasons ? { reason: this._failReasons.join('\n') } : {})
293
+ ...(failureReason ? { reason: failureReason } : {})
237
294
  });
238
295
  }
239
296
  })();
@@ -249,6 +306,13 @@ export default class BrowserstackService {
249
306
  'uploadPending', 'teardown', 'browserCommand'
250
307
  ]);
251
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
+ }
252
316
  }
253
317
  /**
254
318
  * For CucumberJS
@@ -281,7 +345,23 @@ export default class BrowserstackService {
281
345
  (status === 'pending'
282
346
  ? `Some steps/hooks are pending for scenario "${world.pickle.name}"`
283
347
  : 'Unknown Error'));
284
- this._failReasons.push(exception);
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
+ }
285
365
  }
286
366
  await this._accessibilityHandler?.afterScenario(world);
287
367
  await this._insightsHandler?.afterScenario(world);
@@ -299,20 +379,33 @@ export default class BrowserstackService {
299
379
  return Promise.resolve();
300
380
  }
301
381
  const { setSessionName, setSessionStatus } = this._options;
302
- const hasReasons = this._failReasons.length > 0;
303
- const status = hasReasons ? 'failed' : 'passed';
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
+ }
304
397
  if (!this._browser.isMultiremote) {
305
- BStackLogger.info(`Update (reloaded) job with sessionId ${oldSessionId}, ${status}`);
398
+ BStackLogger.info(`Update (reloaded) job with sessionId ${oldSessionId}, ${sessionStatus}`);
306
399
  }
307
400
  else {
308
401
  const browserName = this._browser.instances.filter((browserName) => this._browser && this._browser.getInstance(browserName).sessionId === newSessionId)[0];
309
- BStackLogger.info(`Update (reloaded) multiremote job for browser "${browserName}" and sessionId ${oldSessionId}, ${status}`);
402
+ BStackLogger.info(`Update (reloaded) multiremote job for browser "${browserName}" and sessionId ${oldSessionId}, ${sessionStatus}`);
310
403
  }
311
404
  if (setSessionStatus) {
312
405
  await this._update(oldSessionId, {
313
- status,
406
+ status: sessionStatus,
314
407
  ...(setSessionName ? { name: this._fullTitle } : {}),
315
- ...(hasReasons ? { reason: this._failReasons.join('\n') } : {})
408
+ ...(failureReason ? { reason: failureReason } : {})
316
409
  });
317
410
  }
318
411
  BStackLogger.warn(`Session Reloaded: Old Session Id: ${oldSessionId}, New Session Id: ${newSessionId}`);
@@ -321,6 +414,8 @@ export default class BrowserstackService {
321
414
  delete this._fullTitle;
322
415
  delete this._suiteFile;
323
416
  this._failReasons = [];
417
+ this._hookFailReasons = [];
418
+ this._pureTestFailReasons = [];
324
419
  await this._printSessionURL();
325
420
  }
326
421
  _isAppAutomate() {
@@ -4,4 +4,7 @@ export declare const shouldProcessEventForTesthub: (eventType: string) => boolea
4
4
  export declare const handleErrorForObservability: (error: any) => void;
5
5
  export declare const handleErrorForAccessibility: (error: any) => void;
6
6
  export declare const logBuildError: (error: any, product?: string) => void;
7
+ export declare const getProductMapForBuildStartCall: (config: BrowserStackConfig, accessibilityAutomation: boolean | null) => {
8
+ [key: string]: boolean | null;
9
+ };
7
10
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/testHub/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAA;AAIlD,eAAO,MAAM,aAAa,WAAY,kBAAkB,KAAG,GAQ1D,CAAA;AAED,eAAO,MAAM,4BAA4B,cAAe,MAAM,KAAG,OAWhE,CAAA;AAED,eAAO,MAAM,2BAA2B,UAAW,GAAG,KAAG,IAGxD,CAAA;AAED,eAAO,MAAM,2BAA2B,UAAW,GAAG,KAAG,IAGxD,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,GAAG,YAAW,MAAM,KAAQ,IAyBhE,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/testHub/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAA;AAIlD,eAAO,MAAM,aAAa,WAAY,kBAAkB,KAAG,GAQ1D,CAAA;AAED,eAAO,MAAM,4BAA4B,cAAe,MAAM,KAAG,OAWhE,CAAA;AAED,eAAO,MAAM,2BAA2B,UAAW,GAAG,KAAG,IAGxD,CAAA;AAED,eAAO,MAAM,2BAA2B,UAAW,GAAG,KAAG,IAGxD,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,GAAG,YAAW,MAAM,KAAQ,IAyBhE,CAAA;AAED,eAAO,MAAM,8BAA8B,WAAY,kBAAkB,2BAA2B,OAAO,GAAG,IAAI,KAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAQnJ,CAAA"}
@@ -55,3 +55,12 @@ export const logBuildError = (error, product = '') => {
55
55
  }
56
56
  }
57
57
  };
58
+ export const getProductMapForBuildStartCall = (config, accessibilityAutomation) => {
59
+ return {
60
+ observability: config.testObservability.enabled,
61
+ accessibility: accessibilityAutomation,
62
+ percy: config.percy,
63
+ automate: config.automate,
64
+ app_automate: config.appAutomate
65
+ };
66
+ };
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;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/build/util.d.ts CHANGED
@@ -68,7 +68,7 @@ interface DataElement {
68
68
  [key: string]: any;
69
69
  }
70
70
  export declare const jsonifyAccessibilityArray: (dataArray: DataElement[], keyName: keyof DataElement, valueName: keyof DataElement) => Record<string, any>;
71
- export declare const processAccessibilityResponse: (response: LaunchResponse) => void;
71
+ export declare const processAccessibilityResponse: (response: LaunchResponse, options: BrowserstackConfig & Options.Testrunner) => void;
72
72
  export declare const processLaunchBuildResponse: (response: LaunchResponse, options: BrowserstackConfig & Options.Testrunner) => void;
73
73
  export declare const launchTestSession: (...args: any[]) => any;
74
74
  export declare const validateCapsWithAppA11y: (platformMeta?: {
@@ -77,13 +77,14 @@ export declare const validateCapsWithAppA11y: (platformMeta?: {
77
77
  export declare const validateCapsWithA11y: (deviceName?: any, platformMeta?: {
78
78
  [key: string]: any;
79
79
  }, chromeOptions?: any) => boolean;
80
+ export declare const validateCapsWithNonBstackA11y: (browserName?: string | undefined, browserVersion?: string | undefined) => boolean;
80
81
  export declare const shouldScanTestForAccessibility: (suiteTitle: string | undefined, testTitle: string, accessibilityOptions?: {
81
82
  [key: string]: any;
82
83
  }, world?: {
83
84
  [key: string]: any;
84
85
  }, isCucumber?: boolean) => boolean;
85
- export declare const isAccessibilityAutomationSession: (accessibilityFlag?: boolean | string) => boolean | "" | undefined;
86
- export declare const isAppAccessibilityAutomationSession: (accessibilityFlag?: boolean | string, isAppAutomate?: boolean) => boolean | "" | undefined;
86
+ export declare const isAccessibilityAutomationSession: (accessibilityFlag?: boolean | string | null) => boolean | "" | null | undefined;
87
+ export declare const isAppAccessibilityAutomationSession: (accessibilityFlag?: boolean | string, isAppAutomate?: boolean) => boolean | "" | null | undefined;
87
88
  export declare const formatString: (template: (string | null), ...values: (string | null)[]) => string;
88
89
  export declare const _getParamsForAppAccessibility: (commandName?: string) => {
89
90
  thTestRunUuid: any;
@@ -192,5 +193,8 @@ type PollingResult = {
192
193
  message?: string;
193
194
  };
194
195
  export declare function pollApi(url: string, params: Record<string, any>, headers: Record<string, string>, upperLimit: number, startTime?: number): Promise<PollingResult>;
196
+ export declare function getBooleanValueFromString(value: string | undefined): boolean;
197
+ export declare function mergeDeep(target: Record<string, any>, ...sources: any[]): Record<string, any>;
198
+ export declare function mergeChromeOptions(base: Capabilities.ChromeOptions, override: Partial<Capabilities.ChromeOptions>): Capabilities.ChromeOptions;
195
199
  export {};
196
200
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/build/util.js CHANGED
@@ -14,7 +14,7 @@ import { performance } from 'node:perf_hooks';
14
14
  import logPatcher from './logPatcher.js';
15
15
  import PerformanceTester from './instrumentation/performance/performance-tester.js';
16
16
  import * as PERFORMANCE_SDK_EVENTS from './instrumentation/performance/constants.js';
17
- import { getProductMap, logBuildError, handleErrorForObservability, handleErrorForAccessibility } from './testHub/utils.js';
17
+ import { logBuildError, handleErrorForObservability, handleErrorForAccessibility, getProductMapForBuildStartCall } from './testHub/utils.js';
18
18
  import { BROWSER_DESCRIPTION, DATA_ENDPOINT, UPLOAD_LOGS_ADDRESS, UPLOAD_LOGS_ENDPOINT, consoleHolder, BSTACK_A11Y_POLLING_TIMEOUT, TESTOPS_SCREENSHOT_ENV, BROWSERSTACK_TESTHUB_UUID, PERF_MEASUREMENT_ENV, RERUN_ENV, TESTOPS_BUILD_COMPLETED_ENV, BROWSERSTACK_TESTHUB_JWT, BROWSERSTACK_OBSERVABILITY, BROWSERSTACK_ACCESSIBILITY, MAX_GIT_META_DATA_SIZE_IN_BYTES, GIT_META_DATA_TRUNCATED, APP_ALLY_ENDPOINT, APP_ALLY_ISSUES_SUMMARY_ENDPOINT, APP_ALLY_ISSUES_ENDPOINT } from './constants.js';
19
19
  import CrashReporter from './crash-reporter.js';
20
20
  import { BStackLogger } from './bstackLogger.js';
@@ -226,9 +226,11 @@ export const jsonifyAccessibilityArray = (dataArray, keyName, valueName) => {
226
226
  });
227
227
  return result;
228
228
  };
229
- export const processAccessibilityResponse = (response) => {
229
+ export const processAccessibilityResponse = (response, options) => {
230
230
  if (!response.accessibility) {
231
- handleErrorForAccessibility(null);
231
+ if (options.accessibility === true) {
232
+ handleErrorForAccessibility(null);
233
+ }
232
234
  return;
233
235
  }
234
236
  if (!response.accessibility.success) {
@@ -237,9 +239,11 @@ export const processAccessibilityResponse = (response) => {
237
239
  }
238
240
  if (response.accessibility.options) {
239
241
  const { accessibilityToken, pollingTimeout, scannerVersion } = jsonifyAccessibilityArray(response.accessibility.options.capabilities, 'name', 'value');
242
+ const result = jsonifyAccessibilityArray(response.accessibility.options.capabilities, 'name', 'value');
240
243
  const scriptsJson = {
241
244
  'scripts': jsonifyAccessibilityArray(response.accessibility.options.scripts, 'name', 'command'),
242
- 'commands': response.accessibility.options.commandsToWrap.commands
245
+ 'commands': response.accessibility.options.commandsToWrap.commands,
246
+ 'nonBStackInfraA11yChromeOptions': result['goog:chromeOptions']
243
247
  };
244
248
  if (scannerVersion) {
245
249
  process.env.BSTACK_A11Y_SCANNER_VERSION = scannerVersion;
@@ -262,11 +266,9 @@ export const processLaunchBuildResponse = (response, options) => {
262
266
  if (options.testObservability) {
263
267
  processTestObservabilityResponse(response);
264
268
  }
265
- if (options.accessibility) {
266
- processAccessibilityResponse(response);
267
- }
269
+ processAccessibilityResponse(response, options);
268
270
  };
269
- export const launchTestSession = PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.TESTHUB_EVENTS.START, o11yErrorHandler(async function launchTestSession(options, config, bsConfig, bStackConfig) {
271
+ export const launchTestSession = PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.TESTHUB_EVENTS.START, o11yErrorHandler(async function launchTestSession(options, config, bsConfig, bStackConfig, accessibilityAutomation) {
270
272
  const launchBuildUsage = UsageStats.getInstance().launchBuildUsage;
271
273
  launchBuildUsage.triggered();
272
274
  const data = {
@@ -301,9 +303,13 @@ export const launchTestSession = PerformanceTester.measureWrapper(PERFORMANCE_SD
301
303
  version: bsConfig.bstackServiceVersion
302
304
  }
303
305
  },
304
- product_map: getProductMap(bStackConfig),
306
+ product_map: getProductMapForBuildStartCall(bStackConfig, accessibilityAutomation),
305
307
  config: {}
306
308
  };
309
+ if (accessibilityAutomation && (isTurboScale(options) || data.browserstackAutomation === false)) {
310
+ data.accessibility.settings ??= {};
311
+ data.accessibility.settings.includeEncodedExtension = true;
312
+ }
307
313
  try {
308
314
  if (Object.keys(CrashReporter.userConfigForReporting).length === 0) {
309
315
  CrashReporter.userConfigForReporting = process.env.USER_CONFIG_FOR_REPORTING !== undefined ? JSON.parse(process.env.USER_CONFIG_FOR_REPORTING) : {};
@@ -321,6 +327,7 @@ export const launchTestSession = PerformanceTester.measureWrapper(PERFORMANCE_SD
321
327
  password: getObservabilityKey(options, config),
322
328
  json: data
323
329
  }).json();
330
+ delete data?.accessibility?.settings?.includeEncodedExtension;
324
331
  BStackLogger.debug(`[Start_Build] Success response: ${JSON.stringify(response)}`);
325
332
  process.env[TESTOPS_BUILD_COMPLETED_ENV] = 'true';
326
333
  if (response.jwt) {
@@ -333,13 +340,14 @@ export const launchTestSession = PerformanceTester.measureWrapper(PERFORMANCE_SD
333
340
  }
334
341
  processLaunchBuildResponse(response, options);
335
342
  launchBuildUsage.success();
343
+ return response;
336
344
  }
337
345
  catch (error) {
338
346
  if (!error.success) {
339
347
  launchBuildUsage.failed(error);
340
348
  logBuildError(error);
341
- return;
342
349
  }
350
+ return null;
343
351
  }
344
352
  }));
345
353
  export const validateCapsWithAppA11y = (platformMeta) => {
@@ -381,6 +389,17 @@ export const validateCapsWithA11y = (deviceName, platformMeta, chromeOptions) =>
381
389
  }
382
390
  return false;
383
391
  };
392
+ export const validateCapsWithNonBstackA11y = (browserName, browserVersion) => {
393
+ if (browserName?.toLowerCase() !== 'chrome') {
394
+ BStackLogger.warn('Accessibility Automation will run only on Chrome browsers.');
395
+ return false;
396
+ }
397
+ if (!isUndefined(browserVersion) && !(browserVersion === 'latest' || parseFloat(browserVersion + '') > 100)) {
398
+ BStackLogger.warn('Accessibility Automation will run only on Chrome browser version greater than 100.');
399
+ return false;
400
+ }
401
+ return true;
402
+ };
384
403
  export const shouldScanTestForAccessibility = (suiteTitle, testTitle, accessibilityOptions, world, isCucumber) => {
385
404
  try {
386
405
  const includeTags = Array.isArray(accessibilityOptions?.includeTagsInTestingScope) ? accessibilityOptions?.includeTagsInTestingScope : [];
@@ -438,10 +457,6 @@ export const _getParamsForAppAccessibility = (commandName) => {
438
457
  };
439
458
  export const performA11yScan = async (isAppAutomate, browser, isBrowserStackSession, isAccessibility, commandName) => {
440
459
  return await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.PERFORM_SCAN, async () => {
441
- if (!isBrowserStackSession) {
442
- BStackLogger.warn('Not a BrowserStack Automate session, cannot perform Accessibility scan.');
443
- return; // since we are running only on Automate as of now
444
- }
445
460
  if (!isAccessibilityAutomationSession(isAccessibility)) {
446
461
  BStackLogger.warn('Not an Accessibility Automation session, cannot perform Accessibility scan.');
447
462
  return;
@@ -463,10 +478,6 @@ export const performA11yScan = async (isAppAutomate, browser, isBrowserStackSess
463
478
  }, { command: commandName })();
464
479
  };
465
480
  export const getA11yResults = PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.GET_RESULTS, async (isAppAutomate, browser, isBrowserStackSession, isAccessibility) => {
466
- if (!isBrowserStackSession) {
467
- BStackLogger.warn('Not a BrowserStack Automate session, cannot retrieve Accessibility results.');
468
- return []; // since we are running only on Automate as of now
469
- }
470
481
  if (!isAccessibilityAutomationSession(isAccessibility)) {
471
482
  BStackLogger.warn('Not an Accessibility Automation session, cannot retrieve Accessibility results.');
472
483
  return [];
@@ -535,9 +546,6 @@ const getAppA11yResultResponse = async (apiUrl, isAppAutomate, browser, isBrowse
535
546
  return apiRespone;
536
547
  };
537
548
  export const getA11yResultsSummary = PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.GET_RESULTS_SUMMARY, async (isAppAutomate, browser, isBrowserStackSession, isAccessibility) => {
538
- if (!isBrowserStackSession) {
539
- return {}; // since we are running only on Automate as of now
540
- }
541
549
  if (!isAccessibilityAutomationSession(isAccessibility)) {
542
550
  BStackLogger.warn('Not an Accessibility Automation session, cannot retrieve Accessibility results summary.');
543
551
  return {};
@@ -1369,3 +1377,44 @@ export async function pollApi(url, params, headers, upperLimit, startTime = Date
1369
1377
  }
1370
1378
  }
1371
1379
  }
1380
+ export function getBooleanValueFromString(value) {
1381
+ if (!value) {
1382
+ return false;
1383
+ }
1384
+ return ['true'].includes(value.trim().toLowerCase());
1385
+ }
1386
+ export function mergeDeep(target, ...sources) {
1387
+ if (!sources.length) {
1388
+ return target;
1389
+ }
1390
+ const source = sources.shift();
1391
+ if (isObject(target) && isObject(source)) {
1392
+ for (const key in source) {
1393
+ const sourceValue = source[key];
1394
+ const targetValue = target[key];
1395
+ if (isObject(sourceValue)) {
1396
+ if (!targetValue || !isObject(targetValue)) {
1397
+ target[key] = {};
1398
+ }
1399
+ mergeDeep(target[key], sourceValue);
1400
+ }
1401
+ else {
1402
+ target[key] = sourceValue;
1403
+ }
1404
+ }
1405
+ }
1406
+ return mergeDeep(target, ...sources);
1407
+ }
1408
+ export function mergeChromeOptions(base, override) {
1409
+ const merged = { ...base };
1410
+ if (override.args) {
1411
+ merged.args = [...(base.args || []), ...override.args];
1412
+ }
1413
+ if (override.extensions) {
1414
+ merged.extensions = [...(base.extensions || []), ...override.extensions];
1415
+ }
1416
+ if (override.prefs) {
1417
+ merged.prefs = mergeDeep({ ...(base.prefs || {}) }, override.prefs);
1418
+ }
1419
+ return merged;
1420
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/browserstack-service",
3
- "version": "8.44.1",
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.44.1",
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.44.1"
57
+ "@wdio/globals": "8.46.0"
58
58
  },
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "gitHead": "79211c731aee2e823d2c6db8b7790eba4048eae0"
62
+ "gitHead": "8f557271fbf5579061cd4bb2151871b0832cf811"
63
63
  }