Skip to content

Commit d627896

Browse files
auto enable A11y
1 parent 7bca61c commit d627896

File tree

2 files changed

+81
-9
lines changed

2 files changed

+81
-9
lines changed

bin/commands/runs.js

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,26 @@ const { isTurboScaleSession, getTurboScaleGridDetails, patchCypressConfigFileCon
4040
const { shouldProcessEventForTesthub, checkAndSetAccessibility, findAvailablePort } = require('../testhub/utils');
4141
const TestHubHandler = require('../testhub/testhubHandler');
4242

43+
// Helper function to process accessibility response from server - matches C# SDK pattern
44+
const processAccessibilityResponse = (bsConfig, buildResponse) => {
45+
// Check if server response indicates accessibility should be enabled
46+
if (buildResponse && buildResponse.accessibility && buildResponse.accessibility.success === true) {
47+
logger.debug("Server response indicates accessibility should be auto-enabled");
48+
bsConfig.run_settings.accessibility = true;
49+
process.env.BROWSERSTACK_TEST_ACCESSIBILITY = 'true';
50+
51+
if (!bsConfig.run_settings.system_env_vars) {
52+
bsConfig.run_settings.system_env_vars = [];
53+
}
54+
if (!bsConfig.run_settings.system_env_vars.includes("BROWSERSTACK_TEST_ACCESSIBILITY")) {
55+
bsConfig.run_settings.system_env_vars.push(`BROWSERSTACK_TEST_ACCESSIBILITY=true`);
56+
}
57+
58+
return true;
59+
}
60+
return false;
61+
};
62+
4363
module.exports = function run(args, rawArgs) {
4464
utils.normalizeTestReportingEnvVars();
4565
markBlockStart('preBuild');
@@ -68,8 +88,44 @@ module.exports = function run(args, rawArgs) {
6888

6989
/* Set testObservability & browserstackAutomation flags */
7090
const [isTestObservabilitySession, isBrowserstackInfra] = setTestObservabilityFlags(bsConfig);
71-
const checkAccessibility = checkAccessibilityPlatform(bsConfig);
72-
const isAccessibilitySession = bsConfig.run_settings.accessibility || checkAccessibility;
91+
92+
// Auto-enable A11y logic - similar to C# SDK implementation
93+
const determineAccessibilitySession = (bsConfig) => {
94+
const userAccessibilitySetting = bsConfig.run_settings.accessibility;
95+
const platformSupportsAccessibility = checkAccessibilityPlatform(bsConfig);
96+
97+
// If user explicitly set accessibility to true, enable it
98+
if (userAccessibilitySetting === true) {
99+
return true;
100+
}
101+
102+
// If user explicitly set accessibility to false, disable it
103+
if (userAccessibilitySetting === false) {
104+
return false;
105+
}
106+
107+
// If user didn't specify (null/undefined), auto-enable based on platform support
108+
// This matches the C# SDK logic where server can auto-enable based on platform
109+
if (userAccessibilitySetting === null || userAccessibilitySetting === undefined) {
110+
return platformSupportsAccessibility; // Auto-enable if platform supports it
111+
}
112+
113+
return false;
114+
};
115+
116+
const isAccessibilitySession = determineAccessibilitySession(bsConfig);
117+
118+
// Log the accessibility decision for debugging
119+
if (bsConfig.run_settings.accessibility === true) {
120+
logger.debug("Accessibility explicitly enabled by user");
121+
} else if (bsConfig.run_settings.accessibility === false) {
122+
logger.debug("Accessibility explicitly disabled by user");
123+
} else if (isAccessibilitySession) {
124+
logger.debug("Accessibility auto-enabled based on platform support");
125+
} else {
126+
logger.debug("Accessibility not enabled - platform may not support it");
127+
}
128+
73129
const turboScaleSession = isTurboScaleSession(bsConfig);
74130
Constants.turboScaleObj.enabled = turboScaleSession;
75131

@@ -323,6 +379,13 @@ module.exports = function run(args, rawArgs) {
323379
logger.debug("Completed build creation");
324380
markBlockEnd('createBuild');
325381
markBlockEnd('total');
382+
383+
// Process accessibility response from server - matches C# SDK logic
384+
const accessibilityAutoEnabled = processAccessibilityResponse(bsConfig, data);
385+
if (accessibilityAutoEnabled) {
386+
logger.info("Accessibility has been auto-enabled based on server response");
387+
}
388+
326389
utils.setProcessHooks(data.build_id, bsConfig, bs_local, args, buildReportData);
327390
if(isTestObservabilitySession) {
328391
utils.setO11yProcessHooks(data.build_id, bsConfig, bs_local, args, buildReportData);

bin/testhub/utils.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -251,13 +251,22 @@ exports.checkAndSetAccessibility = (user_config, accessibilityFlag) => {
251251
user_config.run_settings.system_env_vars = [];
252252
}
253253

254-
if (!isUndefined(accessibilityFlag)) {
255-
process.env.BROWSERSTACK_TEST_ACCESSIBILITY = accessibilityFlag.toString();
256-
user_config.run_settings.accessibility = accessibilityFlag;
257-
if (
258-
!user_config.run_settings.system_env_vars.includes("BROWSERSTACK_TEST_ACCESSIBILITY")
259-
) {
260-
user_config.run_settings.system_env_vars.push(`BROWSERSTACK_TEST_ACCESSIBILITY=${accessibilityFlag}`);
254+
// Handle accessibility flag setting - improved logic for auto-enable
255+
if (accessibilityFlag !== undefined && accessibilityFlag !== null) {
256+
const accessibilityEnabled = Boolean(accessibilityFlag);
257+
process.env.BROWSERSTACK_TEST_ACCESSIBILITY = accessibilityEnabled.toString();
258+
user_config.run_settings.accessibility = accessibilityEnabled;
259+
260+
// Remove existing accessibility env var if present
261+
user_config.run_settings.system_env_vars = user_config.run_settings.system_env_vars.filter(
262+
envVar => !envVar.startsWith('BROWSERSTACK_TEST_ACCESSIBILITY=')
263+
);
264+
265+
// Add the current accessibility setting
266+
user_config.run_settings.system_env_vars.push(`BROWSERSTACK_TEST_ACCESSIBILITY=${accessibilityEnabled}`);
267+
268+
if (accessibilityEnabled) {
269+
logger.debug("Accessibility enabled for session");
261270
}
262271
return;
263272
}

0 commit comments

Comments
 (0)