From 90d9631304b435377c88f4003a15a96ee32ccf7a Mon Sep 17 00:00:00 2001 From: Tanmay Lokhande Date: Tue, 30 Dec 2025 13:20:01 +0530 Subject: [PATCH 1/5] added support for safari and cft --- .../src/constants.ts | 14 +++ .../wdio-browserstack-service/src/util.ts | 84 ++++++++++++++---- .../tests/util.test.ts | 86 +++++++++++++++++-- 3 files changed, 158 insertions(+), 26 deletions(-) diff --git a/packages/wdio-browserstack-service/src/constants.ts b/packages/wdio-browserstack-service/src/constants.ts index 01df5dc7bf0..1e4d4bbde1a 100644 --- a/packages/wdio-browserstack-service/src/constants.ts +++ b/packages/wdio-browserstack-service/src/constants.ts @@ -76,6 +76,20 @@ export const EDS_URL = 'https://eds.browserstack.com' export const SUPPORTED_BROWSERS_FOR_AI = ['chrome', 'microsoftedge', 'firefox'] +export const SUPPORTED_BROWSERS_FOR_ACCESSIBILITY = ['chrome', 'chromefortesting', 'safari'] + +export const MIN_BROWSER_VERSIONS_A11Y = { + chrome: 95, + chromefortesting: 95, + safari: 16.5 +} as const + +export const MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK = { + chrome: 100, + chromefortesting: 100, + safari: 16.5 +} as const + export const TCG_URL = 'https://tcg.browserstack.com' export const TCG_INFO = { diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index d140c527234..170d59c4cd7 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -40,7 +40,9 @@ import { APP_ALLY_ISSUES_SUMMARY_ENDPOINT, APP_ALLY_ISSUES_ENDPOINT, CLI_DEBUG_LOGS_FILE, - WDIO_NAMING_PREFIX + WDIO_NAMING_PREFIX, + MIN_BROWSER_VERSIONS_A11Y, + MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK } from './constants.js' import CrashReporter from './crash-reporter.js' import { BStackLogger } from './bstackLogger.js' @@ -477,20 +479,44 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st return false } - if (platformMeta?.browser_name?.toLowerCase() !== 'chrome') { - BStackLogger.warn('Accessibility Automation will run only on Chrome browsers.') - return false - } + const browserName = platformMeta?.browser_name?.toLowerCase() const browserVersion = platformMeta?.browser_version - if ( !isUndefined(browserVersion) && !(browserVersion === 'latest' || parseFloat(browserVersion + '') > 94)) { - BStackLogger.warn('Accessibility Automation will run only on Chrome browser version greater than 94.') + + const validBrowsers = ['chrome', 'chromefortesting', 'safari'] + if (!browserName || !validBrowsers.includes(browserName)) { + BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 95+, and Safari 16.5+. Current browser: ${browserName}`) return false } - if (chromeOptions?.args?.includes('--headless')) { - BStackLogger.warn('Accessibility Automation will not run on legacy headless mode. Switch to new headless mode or avoid using headless mode.') - return false + if (browserName === 'chrome' || browserName === 'chromefortesting') { + const minVersion = MIN_BROWSER_VERSIONS_A11Y[browserName as keyof typeof MIN_BROWSER_VERSIONS_A11Y] + if (browserVersion && browserVersion !== 'latest') { + const version = parseInt(browserVersion.toString().split('.')[0] || '0', 10) + if (version < minVersion) { + BStackLogger.warn(`Accessibility Automation requires ${browserName === 'chrome' ? 'Chrome' : 'Chrome for Testing'} version ${minVersion} or higher.`) + return false + } + } + + if (chromeOptions?.args?.includes('--headless')) { + BStackLogger.warn('Accessibility Automation will not run on legacy headless mode. Switch to new headless mode or avoid using headless mode.') + return false + } + } + + // Safari validation + if (browserName === 'safari') { + if (browserVersion && browserVersion !== 'latest') { + const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) + const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y.safari.toString().split('.').map(Number) + + if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { + BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y.safari} or higher.`) + return false + } + } } + return true } catch (error) { BStackLogger.debug(`Exception in checking capabilities compatibility with Accessibility. Error: ${error}`) @@ -499,17 +525,41 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st } export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, browserVersion?:string | undefined ) => { - - if (browserName?.toLowerCase() !== 'chrome') { - BStackLogger.warn('Accessibility Automation will run only on Chrome browsers.') + const browser = browserName?.toLowerCase() + + // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure + const validBrowsers = ['chrome', 'chromefortesting', 'safari'] + if (!browser || !validBrowsers.includes(browser)) { + BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+.') return false } - if (!isUndefined(browserVersion) && !(browserVersion === 'latest' || parseFloat(browserVersion + '') > 100)) { - BStackLogger.warn('Accessibility Automation will run only on Chrome browser version greater than 100.') - return false + + // Chrome/Chrome for Testing validation + if (browser === 'chrome' || browser === 'chromefortesting') { + const minVersion = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK[browser as keyof typeof MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK] + if (browserVersion && browserVersion !== 'latest') { + const version = parseInt(browserVersion.toString().split('.')[0] || '0', 10) + if (version < minVersion) { + BStackLogger.warn(`Accessibility Automation requires ${browser === 'chrome' ? 'Chrome' : 'Chrome for Testing'} version ${minVersion}+ on non-BrowserStack infrastructure.`) + return false + } + } + } + + // Safari validation + if (browser === 'safari') { + if (browserVersion && browserVersion !== 'latest') { + const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) + const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari.toString().split('.').map(Number) + + if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { + BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari}+ on non-BrowserStack infrastructure.`) + return false + } + } } - return true + return true } export const shouldScanTestForAccessibility = (suiteTitle: string | undefined, testTitle: string, accessibilityOptions?: { [key: string]: string; }, world?: { [key: string]: unknown; }, isCucumber?: boolean ) => { diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index 4c141f1d5df..56b46c60696 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1049,17 +1049,17 @@ describe('validateCapsWithA11y', () => { .toContain('Accessibility Automation will run only on Desktop browsers.') }) - it('returns false if browser is not chrome', async () => { + it('returns false if browser is not supported', async () => { const platformMeta = { - 'browser_name': 'safari' + 'browser_name': 'firefox' } expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation will run only on Chrome browsers.') + .toContain('Accessibility Automation supports Chrome 95+, Chrome for Testing 95+, and Safari 16.5+') }) - it('returns false if browser version is lesser than 94', async () => { + it('returns false if browser version is lesser than 95', async () => { const platformMeta = { 'browser_name': 'chrome', 'browser_version': '90' @@ -1067,7 +1067,7 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation will run only on Chrome browser version greater than 94.') + .toContain('Accessibility Automation requires Chrome version 95 or higher') }) it('returns false if browser version is lesser than 94', async () => { @@ -1093,6 +1093,50 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta, chromeOptions)).toEqual(true) }) + + it('returns true for Safari 16.5+', async () => { + const platformMeta = { + 'browser_name': 'safari', + 'browser_version': '16.5' + } + expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) + }) + + it('returns true for Safari latest', async () => { + const platformMeta = { + 'browser_name': 'safari', + 'browser_version': 'latest' + } + expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) + }) + + it('returns false for Safari < 16.5', async () => { + const platformMeta = { + 'browser_name': 'safari', + 'browser_version': '16.0' + } + expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) + expect(logInfoMock.mock.calls[0][0]) + .toContain('Safari version 16.5 or higher') + }) + + it('returns true for ChromeForTesting 95+', async () => { + const platformMeta = { + 'browser_name': 'ChromeForTesting', + 'browser_version': '120' + } + expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) + }) + + it('returns false for ChromeForTesting < 95', async () => { + const platformMeta = { + 'browser_name': 'ChromeForTesting', + 'browser_version': '90' + } + expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) + expect(logInfoMock.mock.calls[0][0]) + .toContain('Accessibility Automation requires Chrome for Testing version 95 or higher') + }) }) describe('validateCapsWithNonBstackA11y', () => { @@ -1101,14 +1145,38 @@ describe('validateCapsWithNonBstackA11y', () => { logInfoMock = vi.spyOn(log, 'warn') }) - it('returns false if browser is not chrome', async () => { + it('returns true for safari 16.5+', async () => { + expect(validateCapsWithNonBstackA11y('safari', '16.5')).toEqual(true) + }) + + it('returns true for safari latest', async () => { + expect(validateCapsWithNonBstackA11y('safari', 'latest')).toEqual(true) + }) + + it('returns false for safari < 16.5', async () => { + expect(validateCapsWithNonBstackA11y('safari', '16.0')).toEqual(false) + expect(logInfoMock.mock.calls[0][0]) + .toContain('Safari version 16.5+') + }) + + it('returns true for ChromeForTesting 100+', async () => { + expect(validateCapsWithNonBstackA11y('ChromeForTesting', '120')).toEqual(true) + }) + + it('returns false for ChromeForTesting < 100', async () => { + expect(validateCapsWithNonBstackA11y('ChromeForTesting', '90')).toEqual(false) + expect(logInfoMock.mock.calls[0][0]) + .toContain('Accessibility Automation requires Chrome for Testing version 100+') + }) + + it('returns false if browser is not supported', async () => { - const browserName = 'safari' + const browserName = 'firefox' const browserVersion = 'latest' expect(validateCapsWithNonBstackA11y(browserName, browserVersion)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation will run only on Chrome browsers.') + .toContain('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+') }) it('returns false if browser version is lesser than 100', async () => { @@ -1118,7 +1186,7 @@ describe('validateCapsWithNonBstackA11y', () => { expect(validateCapsWithNonBstackA11y(browserName, browserVersion)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation will run only on Chrome browser version greater than 100.') + .toContain('Accessibility Automation requires Chrome version 100+') }) it('returns true if validation done', async () => { From deb72395b0500a3ea3cbaaa301ba2485ca56e1be Mon Sep 17 00:00:00 2001 From: Tanmay Lokhande Date: Tue, 30 Dec 2025 13:20:24 +0530 Subject: [PATCH 2/5] fixed lint errors --- packages/wdio-browserstack-service/src/util.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 170d59c4cd7..0d0265065a6 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -481,7 +481,7 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st const browserName = platformMeta?.browser_name?.toLowerCase() const browserVersion = platformMeta?.browser_version - + const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browserName || !validBrowsers.includes(browserName)) { BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 95+, and Safari 16.5+. Current browser: ${browserName}`) @@ -509,7 +509,7 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st if (browserVersion && browserVersion !== 'latest') { const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y.safari.toString().split('.').map(Number) - + if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y.safari} or higher.`) return false @@ -526,7 +526,7 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, browserVersion?:string | undefined ) => { const browser = browserName?.toLowerCase() - + // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browser || !validBrowsers.includes(browser)) { @@ -551,7 +551,7 @@ export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, if (browserVersion && browserVersion !== 'latest') { const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari.toString().split('.').map(Number) - + if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari}+ on non-BrowserStack infrastructure.`) return false From acea3a817c085fe0c46d23eab70dec656880f9a5 Mon Sep 17 00:00:00 2001 From: Tanmay Lokhande Date: Wed, 31 Dec 2025 10:27:18 +0530 Subject: [PATCH 3/5] added try catch block for validateCapsWithNonBstackA11y --- .../wdio-browserstack-service/src/util.ts | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 0d0265065a6..a62dfc6f929 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -525,41 +525,46 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st } export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, browserVersion?:string | undefined ) => { - const browser = browserName?.toLowerCase() + try { + const browser = browserName?.toLowerCase() - // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure - const validBrowsers = ['chrome', 'chromefortesting', 'safari'] - if (!browser || !validBrowsers.includes(browser)) { - BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+.') - return false - } + // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure + const validBrowsers = ['chrome', 'chromefortesting', 'safari'] + if (!browser || !validBrowsers.includes(browser)) { + BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+.') + return false + } - // Chrome/Chrome for Testing validation - if (browser === 'chrome' || browser === 'chromefortesting') { - const minVersion = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK[browser as keyof typeof MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK] - if (browserVersion && browserVersion !== 'latest') { - const version = parseInt(browserVersion.toString().split('.')[0] || '0', 10) - if (version < minVersion) { - BStackLogger.warn(`Accessibility Automation requires ${browser === 'chrome' ? 'Chrome' : 'Chrome for Testing'} version ${minVersion}+ on non-BrowserStack infrastructure.`) - return false + // Chrome/Chrome for Testing validation + if (browser === 'chrome' || browser === 'chromefortesting') { + const minVersion = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK[browser as keyof typeof MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK] + if (browserVersion && browserVersion !== 'latest') { + const version = parseInt(browserVersion.toString().split('.')[0] || '0', 10) + if (version < minVersion) { + BStackLogger.warn(`Accessibility Automation requires ${browser === 'chrome' ? 'Chrome' : 'Chrome for Testing'} version ${minVersion}+ on non-BrowserStack infrastructure.`) + return false + } } } - } - // Safari validation - if (browser === 'safari') { - if (browserVersion && browserVersion !== 'latest') { - const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) - const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari.toString().split('.').map(Number) + // Safari validation + if (browser === 'safari') { + if (browserVersion && browserVersion !== 'latest') { + const [currentMajor = 0, currentMinor = 0] = browserVersion.toString().split('.').map(Number) + const [requiredMajor = 0, requiredMinor = 0] = MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari.toString().split('.').map(Number) - if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { - BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari}+ on non-BrowserStack infrastructure.`) - return false + if (currentMajor < requiredMajor || (currentMajor === requiredMajor && currentMinor < requiredMinor)) { + BStackLogger.warn(`Accessibility Automation requires Safari version ${MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK.safari}+ on non-BrowserStack infrastructure.`) + return false + } } } - } - return true + return true + } catch (error) { + BStackLogger.debug(`Exception in checking capabilities compatibility with Accessibility. Error: ${error}`) + } + return false } export const shouldScanTestForAccessibility = (suiteTitle: string | undefined, testTitle: string, accessibilityOptions?: { [key: string]: string; }, world?: { [key: string]: unknown; }, isCucumber?: boolean ) => { From 02c858d02e97fc00d8aabd4f7b53afa55a882660 Mon Sep 17 00:00:00 2001 From: Tanmay Lokhande Date: Tue, 6 Jan 2026 11:04:56 +0530 Subject: [PATCH 4/5] updated chromeForTesting version --- .../src/constants.ts | 4 ++-- .../wdio-browserstack-service/src/util.ts | 4 ++-- .../tests/util.test.ts | 24 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/wdio-browserstack-service/src/constants.ts b/packages/wdio-browserstack-service/src/constants.ts index 1e4d4bbde1a..d1831f98882 100644 --- a/packages/wdio-browserstack-service/src/constants.ts +++ b/packages/wdio-browserstack-service/src/constants.ts @@ -80,13 +80,13 @@ export const SUPPORTED_BROWSERS_FOR_ACCESSIBILITY = ['chrome', 'chromefortesting export const MIN_BROWSER_VERSIONS_A11Y = { chrome: 95, - chromefortesting: 95, + chromefortesting: 141, safari: 16.5 } as const export const MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK = { chrome: 100, - chromefortesting: 100, + chromefortesting: 141, safari: 16.5 } as const diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index a62dfc6f929..130f461d516 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -484,7 +484,7 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browserName || !validBrowsers.includes(browserName)) { - BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 95+, and Safari 16.5+. Current browser: ${browserName}`) + BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 16.5+. Current browser: ${browserName}`) return false } @@ -531,7 +531,7 @@ export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browser || !validBrowsers.includes(browser)) { - BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+.') + BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 16.5+.') return false } diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index 56b46c60696..89446c32fc9 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1056,7 +1056,7 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation supports Chrome 95+, Chrome for Testing 95+, and Safari 16.5+') + .toContain('Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 16.5+') }) it('returns false if browser version is lesser than 95', async () => { @@ -1120,22 +1120,22 @@ describe('validateCapsWithA11y', () => { .toContain('Safari version 16.5 or higher') }) - it('returns true for ChromeForTesting 95+', async () => { + it('returns true for ChromeForTesting 141+', async () => { const platformMeta = { 'browser_name': 'ChromeForTesting', - 'browser_version': '120' + 'browser_version': '141' } expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) }) - it('returns false for ChromeForTesting < 95', async () => { + it('returns false for ChromeForTesting < 141', async () => { const platformMeta = { 'browser_name': 'ChromeForTesting', - 'browser_version': '90' + 'browser_version': '140' } expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation requires Chrome for Testing version 95 or higher') + .toContain('Accessibility Automation requires Chrome for Testing version 141 or higher') }) }) @@ -1159,14 +1159,14 @@ describe('validateCapsWithNonBstackA11y', () => { .toContain('Safari version 16.5+') }) - it('returns true for ChromeForTesting 100+', async () => { - expect(validateCapsWithNonBstackA11y('ChromeForTesting', '120')).toEqual(true) + it('returns true for ChromeForTesting 141+', async () => { + expect(validateCapsWithNonBstackA11y('ChromeForTesting', '141')).toEqual(true) }) - it('returns false for ChromeForTesting < 100', async () => { - expect(validateCapsWithNonBstackA11y('ChromeForTesting', '90')).toEqual(false) + it('returns false for ChromeForTesting < 141', async () => { + expect(validateCapsWithNonBstackA11y('ChromeForTesting', '140')).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation requires Chrome for Testing version 100+') + .toContain('Accessibility Automation requires Chrome for Testing version 141+') }) it('returns false if browser is not supported', async () => { @@ -1176,7 +1176,7 @@ describe('validateCapsWithNonBstackA11y', () => { expect(validateCapsWithNonBstackA11y(browserName, browserVersion)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 100+, and Safari 16.5+') + .toContain('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 16.5+') }) it('returns false if browser version is lesser than 100', async () => { From 85eb62aa26e2c5d8e2a3406eaa79fc9726b423e6 Mon Sep 17 00:00:00 2001 From: Tanmay Lokhande Date: Mon, 12 Jan 2026 10:22:03 +0530 Subject: [PATCH 5/5] updated version for safari --- .../src/constants.ts | 4 ++-- .../wdio-browserstack-service/src/util.ts | 4 ++-- .../tests/util.test.ts | 20 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/wdio-browserstack-service/src/constants.ts b/packages/wdio-browserstack-service/src/constants.ts index d1831f98882..49d5bbb037c 100644 --- a/packages/wdio-browserstack-service/src/constants.ts +++ b/packages/wdio-browserstack-service/src/constants.ts @@ -81,13 +81,13 @@ export const SUPPORTED_BROWSERS_FOR_ACCESSIBILITY = ['chrome', 'chromefortesting export const MIN_BROWSER_VERSIONS_A11Y = { chrome: 95, chromefortesting: 141, - safari: 16.5 + safari: 18.4 } as const export const MIN_BROWSER_VERSIONS_A11Y_NON_BSTACK = { chrome: 100, chromefortesting: 141, - safari: 16.5 + safari: 18.4 } as const export const TCG_URL = 'https://tcg.browserstack.com' diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 130f461d516..9749d0f69f5 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -484,7 +484,7 @@ export const validateCapsWithA11y = (deviceName?: any, platformMeta?: { [key: st const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browserName || !validBrowsers.includes(browserName)) { - BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 16.5+. Current browser: ${browserName}`) + BStackLogger.warn(`Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 18.4+. Current browser: ${browserName}`) return false } @@ -531,7 +531,7 @@ export const validateCapsWithNonBstackA11y = (browserName?: string | undefined, // Support Chrome, Chrome for Testing (ChromeForTesting), and Safari on non-BrowserStack infrastructure const validBrowsers = ['chrome', 'chromefortesting', 'safari'] if (!browser || !validBrowsers.includes(browser)) { - BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 16.5+.') + BStackLogger.warn('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 18.4+.') return false } diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index 89446c32fc9..e2ef4b3198b 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1056,7 +1056,7 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 16.5+') + .toContain('Accessibility Automation supports Chrome 95+, Chrome for Testing 141+, and Safari 18.4+') }) it('returns false if browser version is lesser than 95', async () => { @@ -1094,10 +1094,10 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta, chromeOptions)).toEqual(true) }) - it('returns true for Safari 16.5+', async () => { + it('returns true for Safari 18.4+', async () => { const platformMeta = { 'browser_name': 'safari', - 'browser_version': '16.5' + 'browser_version': '18.4' } expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) }) @@ -1110,14 +1110,14 @@ describe('validateCapsWithA11y', () => { expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(true) }) - it('returns false for Safari < 16.5', async () => { + it('returns false for Safari < 18.4', async () => { const platformMeta = { 'browser_name': 'safari', 'browser_version': '16.0' } expect(validateCapsWithA11y(undefined, platformMeta)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Safari version 16.5 or higher') + .toContain('Safari version 18.4 or higher') }) it('returns true for ChromeForTesting 141+', async () => { @@ -1145,18 +1145,18 @@ describe('validateCapsWithNonBstackA11y', () => { logInfoMock = vi.spyOn(log, 'warn') }) - it('returns true for safari 16.5+', async () => { - expect(validateCapsWithNonBstackA11y('safari', '16.5')).toEqual(true) + it('returns true for safari 18.4+', async () => { + expect(validateCapsWithNonBstackA11y('safari', '18.4')).toEqual(true) }) it('returns true for safari latest', async () => { expect(validateCapsWithNonBstackA11y('safari', 'latest')).toEqual(true) }) - it('returns false for safari < 16.5', async () => { + it('returns false for safari < 18.4', async () => { expect(validateCapsWithNonBstackA11y('safari', '16.0')).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Safari version 16.5+') + .toContain('Safari version 18.4+') }) it('returns true for ChromeForTesting 141+', async () => { @@ -1176,7 +1176,7 @@ describe('validateCapsWithNonBstackA11y', () => { expect(validateCapsWithNonBstackA11y(browserName, browserVersion)).toEqual(false) expect(logInfoMock.mock.calls[0][0]) - .toContain('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 16.5+') + .toContain('Accessibility Automation on non-BrowserStack infrastructure supports Chrome 100+, Chrome for Testing 141+, and Safari 18.4+') }) it('returns false if browser version is lesser than 100', async () => {