@wdio/browserstack-service 0.0.0-canary-20260722132416

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.
Files changed (331) hide show
  1. package/LICENSE-MIT +20 -0
  2. package/README.md +392 -0
  3. package/browserstack-service.d.ts +43 -0
  4. package/build/Percy/Percy-Handler.d.ts +32 -0
  5. package/build/Percy/Percy-Handler.d.ts.map +1 -0
  6. package/build/Percy/Percy-Handler.js +165 -0
  7. package/build/Percy/Percy-Handler.js.map +1 -0
  8. package/build/Percy/Percy.d.ts +19 -0
  9. package/build/Percy/Percy.d.ts.map +1 -0
  10. package/build/Percy/Percy.js +164 -0
  11. package/build/Percy/Percy.js.map +1 -0
  12. package/build/Percy/PercyBinary.d.ts +10 -0
  13. package/build/Percy/PercyBinary.d.ts.map +1 -0
  14. package/build/Percy/PercyBinary.js +161 -0
  15. package/build/Percy/PercyBinary.js.map +1 -0
  16. package/build/Percy/PercyCaptureMap.d.ts +9 -0
  17. package/build/Percy/PercyCaptureMap.d.ts.map +1 -0
  18. package/build/Percy/PercyCaptureMap.js +36 -0
  19. package/build/Percy/PercyCaptureMap.js.map +1 -0
  20. package/build/Percy/PercyHelper.d.ts +8 -0
  21. package/build/Percy/PercyHelper.d.ts.map +1 -0
  22. package/build/Percy/PercyHelper.js +68 -0
  23. package/build/Percy/PercyHelper.js.map +1 -0
  24. package/build/Percy/PercyLogger.d.ts +15 -0
  25. package/build/Percy/PercyLogger.d.ts.map +1 -0
  26. package/build/Percy/PercyLogger.js +68 -0
  27. package/build/Percy/PercyLogger.js.map +1 -0
  28. package/build/Percy/PercySDK.d.ts +4 -0
  29. package/build/Percy/PercySDK.d.ts.map +1 -0
  30. package/build/Percy/PercySDK.js +86 -0
  31. package/build/Percy/PercySDK.js.map +1 -0
  32. package/build/accessibility-handler.d.ts +52 -0
  33. package/build/accessibility-handler.d.ts.map +1 -0
  34. package/build/accessibility-handler.js +361 -0
  35. package/build/accessibility-handler.js.map +1 -0
  36. package/build/ai-handler.d.ts +23 -0
  37. package/build/ai-handler.d.ts.map +1 -0
  38. package/build/ai-handler.js +184 -0
  39. package/build/ai-handler.js.map +1 -0
  40. package/build/bstackLogger.d.ts +16 -0
  41. package/build/bstackLogger.d.ts.map +1 -0
  42. package/build/bstackLogger.js +71 -0
  43. package/build/bstackLogger.js.map +1 -0
  44. package/build/cleanup.d.ts +9 -0
  45. package/build/cleanup.d.ts.map +1 -0
  46. package/build/cleanup.js +101 -0
  47. package/build/cleanup.js.map +1 -0
  48. package/build/cli/apiUtils.d.ts +14 -0
  49. package/build/cli/apiUtils.d.ts.map +1 -0
  50. package/build/cli/apiUtils.js +25 -0
  51. package/build/cli/apiUtils.js.map +1 -0
  52. package/build/cli/cliLogger.d.ts +17 -0
  53. package/build/cli/cliLogger.d.ts.map +1 -0
  54. package/build/cli/cliLogger.js +82 -0
  55. package/build/cli/cliLogger.js.map +1 -0
  56. package/build/cli/cliUtils.d.ts +64 -0
  57. package/build/cli/cliUtils.d.ts.map +1 -0
  58. package/build/cli/cliUtils.js +461 -0
  59. package/build/cli/cliUtils.js.map +1 -0
  60. package/build/cli/eventDispatcher.d.ts +28 -0
  61. package/build/cli/eventDispatcher.d.ts.map +1 -0
  62. package/build/cli/eventDispatcher.js +49 -0
  63. package/build/cli/eventDispatcher.js.map +1 -0
  64. package/build/cli/frameworks/automationFramework.d.ts +89 -0
  65. package/build/cli/frameworks/automationFramework.d.ts.map +1 -0
  66. package/build/cli/frameworks/automationFramework.js +132 -0
  67. package/build/cli/frameworks/automationFramework.js.map +1 -0
  68. package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts +18 -0
  69. package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts.map +1 -0
  70. package/build/cli/frameworks/constants/automationFrameworkConstants.js +18 -0
  71. package/build/cli/frameworks/constants/automationFrameworkConstants.js.map +1 -0
  72. package/build/cli/frameworks/constants/testFrameworkConstants.d.ts +43 -0
  73. package/build/cli/frameworks/constants/testFrameworkConstants.d.ts.map +1 -0
  74. package/build/cli/frameworks/constants/testFrameworkConstants.js +43 -0
  75. package/build/cli/frameworks/constants/testFrameworkConstants.js.map +1 -0
  76. package/build/cli/frameworks/testFramework.d.ts +89 -0
  77. package/build/cli/frameworks/testFramework.d.ts.map +1 -0
  78. package/build/cli/frameworks/testFramework.js +126 -0
  79. package/build/cli/frameworks/testFramework.js.map +1 -0
  80. package/build/cli/frameworks/wdioAutomationFramework.d.ts +28 -0
  81. package/build/cli/frameworks/wdioAutomationFramework.d.ts.map +1 -0
  82. package/build/cli/frameworks/wdioAutomationFramework.js +67 -0
  83. package/build/cli/frameworks/wdioAutomationFramework.js.map +1 -0
  84. package/build/cli/frameworks/wdioMochaTestFramework.d.ts +82 -0
  85. package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -0
  86. package/build/cli/frameworks/wdioMochaTestFramework.js +322 -0
  87. package/build/cli/frameworks/wdioMochaTestFramework.js.map +1 -0
  88. package/build/cli/grpcClient.d.ts +86 -0
  89. package/build/cli/grpcClient.d.ts.map +1 -0
  90. package/build/cli/grpcClient.js +532 -0
  91. package/build/cli/grpcClient.js.map +1 -0
  92. package/build/cli/index.d.ts +150 -0
  93. package/build/cli/index.d.ts.map +1 -0
  94. package/build/cli/index.js +464 -0
  95. package/build/cli/index.js.map +1 -0
  96. package/build/cli/instances/automationFrameworkInstance.d.ts +33 -0
  97. package/build/cli/instances/automationFrameworkInstance.d.ts.map +1 -0
  98. package/build/cli/instances/automationFrameworkInstance.js +45 -0
  99. package/build/cli/instances/automationFrameworkInstance.js.map +1 -0
  100. package/build/cli/instances/testFrameworkInstance.d.ts +62 -0
  101. package/build/cli/instances/testFrameworkInstance.d.ts.map +1 -0
  102. package/build/cli/instances/testFrameworkInstance.js +97 -0
  103. package/build/cli/instances/testFrameworkInstance.js.map +1 -0
  104. package/build/cli/instances/trackedContext.d.ts +32 -0
  105. package/build/cli/instances/trackedContext.d.ts.map +1 -0
  106. package/build/cli/instances/trackedContext.js +48 -0
  107. package/build/cli/instances/trackedContext.js.map +1 -0
  108. package/build/cli/instances/trackedInstance.d.ts +40 -0
  109. package/build/cli/instances/trackedInstance.d.ts.map +1 -0
  110. package/build/cli/instances/trackedInstance.js +64 -0
  111. package/build/cli/instances/trackedInstance.js.map +1 -0
  112. package/build/cli/modules/accessibilityModule.d.ts +46 -0
  113. package/build/cli/modules/accessibilityModule.d.ts.map +1 -0
  114. package/build/cli/modules/accessibilityModule.js +447 -0
  115. package/build/cli/modules/accessibilityModule.js.map +1 -0
  116. package/build/cli/modules/automateModule.d.ts +26 -0
  117. package/build/cli/modules/automateModule.d.ts.map +1 -0
  118. package/build/cli/modules/automateModule.js +223 -0
  119. package/build/cli/modules/automateModule.js.map +1 -0
  120. package/build/cli/modules/baseModule.d.ts +33 -0
  121. package/build/cli/modules/baseModule.d.ts.map +1 -0
  122. package/build/cli/modules/baseModule.js +52 -0
  123. package/build/cli/modules/baseModule.js.map +1 -0
  124. package/build/cli/modules/observabilityModule.d.ts +22 -0
  125. package/build/cli/modules/observabilityModule.d.ts.map +1 -0
  126. package/build/cli/modules/observabilityModule.js +46 -0
  127. package/build/cli/modules/observabilityModule.js.map +1 -0
  128. package/build/cli/modules/percyModule.d.ts +19 -0
  129. package/build/cli/modules/percyModule.d.ts.map +1 -0
  130. package/build/cli/modules/percyModule.js +78 -0
  131. package/build/cli/modules/percyModule.js.map +1 -0
  132. package/build/cli/modules/testHubModule.d.ts +30 -0
  133. package/build/cli/modules/testHubModule.d.ts.map +1 -0
  134. package/build/cli/modules/testHubModule.js +233 -0
  135. package/build/cli/modules/testHubModule.js.map +1 -0
  136. package/build/cli/modules/webdriverIOModule.d.ts +29 -0
  137. package/build/cli/modules/webdriverIOModule.d.ts.map +1 -0
  138. package/build/cli/modules/webdriverIOModule.js +129 -0
  139. package/build/cli/modules/webdriverIOModule.js.map +1 -0
  140. package/build/cli/states/automationFrameworkState.d.ts +65 -0
  141. package/build/cli/states/automationFrameworkState.d.ts.map +1 -0
  142. package/build/cli/states/automationFrameworkState.js +62 -0
  143. package/build/cli/states/automationFrameworkState.js.map +1 -0
  144. package/build/cli/states/hookState.d.ts +45 -0
  145. package/build/cli/states/hookState.d.ts.map +1 -0
  146. package/build/cli/states/hookState.js +44 -0
  147. package/build/cli/states/hookState.js.map +1 -0
  148. package/build/cli/states/testFrameworkState.d.ts +125 -0
  149. package/build/cli/states/testFrameworkState.d.ts.map +1 -0
  150. package/build/cli/states/testFrameworkState.js +116 -0
  151. package/build/cli/states/testFrameworkState.js.map +1 -0
  152. package/build/config.d.ts +29 -0
  153. package/build/config.d.ts.map +1 -0
  154. package/build/config.js +52 -0
  155. package/build/config.js.map +1 -0
  156. package/build/constants.d.ts +96 -0
  157. package/build/constants.d.ts.map +1 -0
  158. package/build/constants.js +156 -0
  159. package/build/constants.js.map +1 -0
  160. package/build/crash-reporter.d.ts +18 -0
  161. package/build/crash-reporter.d.ts.map +1 -0
  162. package/build/crash-reporter.js +134 -0
  163. package/build/crash-reporter.js.map +1 -0
  164. package/build/cucumber-types.d.ts +194 -0
  165. package/build/cucumber-types.d.ts.map +1 -0
  166. package/build/cucumber-types.js +2 -0
  167. package/build/cucumber-types.js.map +1 -0
  168. package/build/data-store.d.ts +4 -0
  169. package/build/data-store.d.ts.map +1 -0
  170. package/build/data-store.js +42 -0
  171. package/build/data-store.js.map +1 -0
  172. package/build/exitHandler.d.ts +4 -0
  173. package/build/exitHandler.d.ts.map +1 -0
  174. package/build/exitHandler.js +105 -0
  175. package/build/exitHandler.js.map +1 -0
  176. package/build/fileStream.d.ts +9 -0
  177. package/build/fileStream.d.ts.map +1 -0
  178. package/build/fileStream.js +13 -0
  179. package/build/fileStream.js.map +1 -0
  180. package/build/grpc/generated/sdk-messages-accessibility.d.ts +76 -0
  181. package/build/grpc/generated/sdk-messages-accessibility.d.ts.map +1 -0
  182. package/build/grpc/generated/sdk-messages-accessibility.js +908 -0
  183. package/build/grpc/generated/sdk-messages-accessibility.js.map +1 -0
  184. package/build/grpc/generated/sdk-messages-ai.d.ts +52 -0
  185. package/build/grpc/generated/sdk-messages-ai.d.ts.map +1 -0
  186. package/build/grpc/generated/sdk-messages-ai.js +643 -0
  187. package/build/grpc/generated/sdk-messages-ai.js.map +1 -0
  188. package/build/grpc/generated/sdk-messages-observability.d.ts +44 -0
  189. package/build/grpc/generated/sdk-messages-observability.d.ts.map +1 -0
  190. package/build/grpc/generated/sdk-messages-observability.js +505 -0
  191. package/build/grpc/generated/sdk-messages-observability.js.map +1 -0
  192. package/build/grpc/generated/sdk-messages-percy.d.ts +16 -0
  193. package/build/grpc/generated/sdk-messages-percy.d.ts.map +1 -0
  194. package/build/grpc/generated/sdk-messages-percy.js +111 -0
  195. package/build/grpc/generated/sdk-messages-percy.js.map +1 -0
  196. package/build/grpc/generated/sdk-messages-testhub.d.ts +16 -0
  197. package/build/grpc/generated/sdk-messages-testhub.d.ts.map +1 -0
  198. package/build/grpc/generated/sdk-messages-testhub.js +132 -0
  199. package/build/grpc/generated/sdk-messages-testhub.js.map +1 -0
  200. package/build/grpc/generated/sdk-messages.d.ts +288 -0
  201. package/build/grpc/generated/sdk-messages.d.ts.map +1 -0
  202. package/build/grpc/generated/sdk-messages.js +3958 -0
  203. package/build/grpc/generated/sdk-messages.js.map +1 -0
  204. package/build/grpc/generated/sdk.d.ts +282 -0
  205. package/build/grpc/generated/sdk.d.ts.map +1 -0
  206. package/build/grpc/generated/sdk.js +197 -0
  207. package/build/grpc/generated/sdk.js.map +1 -0
  208. package/build/grpc/index.d.ts +43 -0
  209. package/build/grpc/index.d.ts.map +1 -0
  210. package/build/grpc/index.js +154 -0
  211. package/build/grpc/index.js.map +1 -0
  212. package/build/index.d.ts +20 -0
  213. package/build/index.d.ts.map +1 -0
  214. package/build/index.js +13 -0
  215. package/build/index.js.map +1 -0
  216. package/build/insights-handler.d.ts +76 -0
  217. package/build/insights-handler.d.ts.map +1 -0
  218. package/build/insights-handler.js +855 -0
  219. package/build/insights-handler.js.map +1 -0
  220. package/build/instrumentation/funnelInstrumentation.d.ts +8 -0
  221. package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -0
  222. package/build/instrumentation/funnelInstrumentation.js +235 -0
  223. package/build/instrumentation/funnelInstrumentation.js.map +1 -0
  224. package/build/instrumentation/performance/constants.d.ts +151 -0
  225. package/build/instrumentation/performance/constants.d.ts.map +1 -0
  226. package/build/instrumentation/performance/constants.js +158 -0
  227. package/build/instrumentation/performance/constants.js.map +1 -0
  228. package/build/instrumentation/performance/performance-tester.d.ts +55 -0
  229. package/build/instrumentation/performance/performance-tester.d.ts.map +1 -0
  230. package/build/instrumentation/performance/performance-tester.js +403 -0
  231. package/build/instrumentation/performance/performance-tester.js.map +1 -0
  232. package/build/launcher.d.ts +49 -0
  233. package/build/launcher.d.ts.map +1 -0
  234. package/build/launcher.js +1077 -0
  235. package/build/launcher.js.map +1 -0
  236. package/build/log4jsAppender.d.ts +2 -0
  237. package/build/log4jsAppender.d.ts.map +1 -0
  238. package/build/log4jsAppender.js +20 -0
  239. package/build/log4jsAppender.js.map +1 -0
  240. package/build/logPatcher.d.ts +13 -0
  241. package/build/logPatcher.d.ts.map +1 -0
  242. package/build/logPatcher.js +39 -0
  243. package/build/logPatcher.js.map +1 -0
  244. package/build/logReportingAPI.d.ts +12 -0
  245. package/build/logReportingAPI.d.ts.map +1 -0
  246. package/build/logReportingAPI.js +57 -0
  247. package/build/logReportingAPI.js.map +1 -0
  248. package/build/reporter.d.ts +40 -0
  249. package/build/reporter.d.ts.map +1 -0
  250. package/build/reporter.js +254 -0
  251. package/build/reporter.js.map +1 -0
  252. package/build/request-handler.d.ts +19 -0
  253. package/build/request-handler.d.ts.map +1 -0
  254. package/build/request-handler.js +78 -0
  255. package/build/request-handler.js.map +1 -0
  256. package/build/scripts/accessibility-scripts.d.ts +26 -0
  257. package/build/scripts/accessibility-scripts.d.ts.map +1 -0
  258. package/build/scripts/accessibility-scripts.js +91 -0
  259. package/build/scripts/accessibility-scripts.js.map +1 -0
  260. package/build/service.d.ts +68 -0
  261. package/build/service.d.ts.map +1 -0
  262. package/build/service.js +740 -0
  263. package/build/service.js.map +1 -0
  264. package/build/testHub/utils.d.ts +10 -0
  265. package/build/testHub/utils.d.ts.map +1 -0
  266. package/build/testHub/utils.js +67 -0
  267. package/build/testHub/utils.js.map +1 -0
  268. package/build/testOps/featureStats.d.ts +45 -0
  269. package/build/testOps/featureStats.d.ts.map +1 -0
  270. package/build/testOps/featureStats.js +117 -0
  271. package/build/testOps/featureStats.js.map +1 -0
  272. package/build/testOps/featureUsage.d.ts +22 -0
  273. package/build/testOps/featureUsage.d.ts.map +1 -0
  274. package/build/testOps/featureUsage.js +48 -0
  275. package/build/testOps/featureUsage.js.map +1 -0
  276. package/build/testOps/listener.d.ts +40 -0
  277. package/build/testOps/listener.d.ts.map +1 -0
  278. package/build/testOps/listener.js +269 -0
  279. package/build/testOps/listener.js.map +1 -0
  280. package/build/testOps/requestUtils.d.ts +4 -0
  281. package/build/testOps/requestUtils.d.ts.map +1 -0
  282. package/build/testOps/requestUtils.js +41 -0
  283. package/build/testOps/requestUtils.js.map +1 -0
  284. package/build/testOps/testOpsConfig.d.ts +11 -0
  285. package/build/testOps/testOpsConfig.d.ts.map +1 -0
  286. package/build/testOps/testOpsConfig.js +20 -0
  287. package/build/testOps/testOpsConfig.js.map +1 -0
  288. package/build/testOps/usageStats.d.ts +404 -0
  289. package/build/testOps/usageStats.d.ts.map +1 -0
  290. package/build/testOps/usageStats.js +115 -0
  291. package/build/testOps/usageStats.js.map +1 -0
  292. package/build/testorchestration/apply-orchestration.d.ts +7 -0
  293. package/build/testorchestration/apply-orchestration.d.ts.map +1 -0
  294. package/build/testorchestration/apply-orchestration.js +43 -0
  295. package/build/testorchestration/apply-orchestration.js.map +1 -0
  296. package/build/testorchestration/helpers.d.ts +20 -0
  297. package/build/testorchestration/helpers.d.ts.map +1 -0
  298. package/build/testorchestration/helpers.js +413 -0
  299. package/build/testorchestration/helpers.js.map +1 -0
  300. package/build/testorchestration/request-utils.d.ts +23 -0
  301. package/build/testorchestration/request-utils.d.ts.map +1 -0
  302. package/build/testorchestration/request-utils.js +82 -0
  303. package/build/testorchestration/request-utils.js.map +1 -0
  304. package/build/testorchestration/test-ordering-server.d.ts +33 -0
  305. package/build/testorchestration/test-ordering-server.d.ts.map +1 -0
  306. package/build/testorchestration/test-ordering-server.js +169 -0
  307. package/build/testorchestration/test-ordering-server.js.map +1 -0
  308. package/build/testorchestration/testorcherstrationhandler.d.ts +50 -0
  309. package/build/testorchestration/testorcherstrationhandler.d.ts.map +1 -0
  310. package/build/testorchestration/testorcherstrationhandler.js +134 -0
  311. package/build/testorchestration/testorcherstrationhandler.js.map +1 -0
  312. package/build/testorchestration/testorcherstrationutils.d.ts +86 -0
  313. package/build/testorchestration/testorcherstrationutils.d.ts.map +1 -0
  314. package/build/testorchestration/testorcherstrationutils.js +380 -0
  315. package/build/testorchestration/testorcherstrationutils.js.map +1 -0
  316. package/build/types.d.ts +413 -0
  317. package/build/types.d.ts.map +1 -0
  318. package/build/types.js +2 -0
  319. package/build/types.js.map +1 -0
  320. package/build/util.d.ts +241 -0
  321. package/build/util.d.ts.map +1 -0
  322. package/build/util.js +1665 -0
  323. package/build/util.js.map +1 -0
  324. package/package.json +96 -0
  325. package/src/proto/browserstack/sdk/v1/sdk-messages-accessibility.proto +71 -0
  326. package/src/proto/browserstack/sdk/v1/sdk-messages-ai.proto +48 -0
  327. package/src/proto/browserstack/sdk/v1/sdk-messages-observability.proto +39 -0
  328. package/src/proto/browserstack/sdk/v1/sdk-messages-percy.proto +10 -0
  329. package/src/proto/browserstack/sdk/v1/sdk-messages-testhub.proto +10 -0
  330. package/src/proto/browserstack/sdk/v1/sdk-messages.proto +276 -0
  331. package/src/proto/browserstack/sdk/v1/sdk.proto +41 -0
@@ -0,0 +1,86 @@
1
+ import InsightsHandler from '../insights-handler.js';
2
+ import TestReporter from '../reporter.js';
3
+ import { PercyLogger } from './PercyLogger.js';
4
+ import { isUndefined } from '../util.js';
5
+ const tryRequire = async function (pkg, fallback) {
6
+ try {
7
+ return (await import(pkg)).default;
8
+ }
9
+ catch {
10
+ return fallback;
11
+ }
12
+ };
13
+ const percySnapshot = await tryRequire('@percy/selenium-webdriver', null);
14
+ const percyAppScreenshot = await tryRequire('@percy/appium-app', {});
15
+ /* eslint-disable @typescript-eslint/no-unused-vars */
16
+ let snapshotHandler = (...args) => {
17
+ PercyLogger.error('Unsupported driver for percy');
18
+ };
19
+ if (percySnapshot) {
20
+ snapshotHandler = (browser, snapshotName, options) => {
21
+ if (process.env.PERCY_SNAPSHOT === 'true') {
22
+ let { name, uuid } = InsightsHandler.currentTest;
23
+ if (isUndefined(name)) {
24
+ ({ name, uuid } = TestReporter.currentTest);
25
+ }
26
+ options ||= {};
27
+ options = {
28
+ ...options,
29
+ testCase: name || ''
30
+ };
31
+ return percySnapshot(browser, snapshotName, options);
32
+ }
33
+ };
34
+ }
35
+ export const snapshot = snapshotHandler;
36
+ /*
37
+ This is a helper method which appends some internal fields
38
+ to the options object being sent to Percy methods
39
+ */
40
+ const screenshotHelper = (type, driverOrName, nameOrOptions, options) => {
41
+ let { name, uuid } = InsightsHandler.currentTest;
42
+ if (isUndefined(name)) {
43
+ ({ name, uuid } = TestReporter.currentTest);
44
+ }
45
+ if (!driverOrName || typeof driverOrName === 'string') {
46
+ nameOrOptions ||= {};
47
+ if (typeof nameOrOptions === 'object') {
48
+ nameOrOptions = {
49
+ ...nameOrOptions,
50
+ testCase: name || ''
51
+ };
52
+ }
53
+ }
54
+ else {
55
+ options ||= {};
56
+ options = {
57
+ ...options,
58
+ testCase: name || ''
59
+ };
60
+ }
61
+ if (type === 'app') {
62
+ return percyAppScreenshot(driverOrName, nameOrOptions, options);
63
+ }
64
+ return percySnapshot.percyScreenshot(driverOrName, nameOrOptions, options);
65
+ };
66
+ /* eslint-disable @typescript-eslint/no-unused-vars */
67
+ let screenshotHandler = async (...args) => {
68
+ PercyLogger.error('Unsupported driver for percy');
69
+ };
70
+ if (percySnapshot && percySnapshot.percyScreenshot) {
71
+ screenshotHandler = (browser, screenshotName, options) => {
72
+ return screenshotHelper('web', browser, screenshotName, options);
73
+ };
74
+ }
75
+ export const screenshot = screenshotHandler;
76
+ /* eslint-disable @typescript-eslint/no-unused-vars */
77
+ let screenshotAppHandler = async (...args) => {
78
+ PercyLogger.error('Unsupported driver for percy');
79
+ };
80
+ if (percyAppScreenshot) {
81
+ screenshotAppHandler = (driverOrName, nameOrOptions, options) => {
82
+ return screenshotHelper('app', driverOrName, nameOrOptions, options);
83
+ };
84
+ }
85
+ export const screenshotApp = screenshotAppHandler;
86
+ //# sourceMappingURL=PercySDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PercySDK.js","sourceRoot":"","sources":["../../src/Percy/PercySDK.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Capabilities, Frameworks, Options } from '@wdio/types';
2
+ import type { BrowserstackConfig, BrowserstackOptions } from './types.js';
3
+ import type { ITestCaseHookParameter } from './cucumber-types.js';
4
+ interface AccessibilityOptions {
5
+ includeIssueType?: string[];
6
+ excludeIssueType?: string[];
7
+ [key: string]: unknown;
8
+ }
9
+ declare class _AccessibilityHandler {
10
+ private _browser;
11
+ private _capabilities;
12
+ private isAppAutomate;
13
+ private _framework?;
14
+ private _accessibilityAutomation?;
15
+ private _accessibilityOpts?;
16
+ private _platformA11yMeta;
17
+ private _caps;
18
+ private _suiteFile?;
19
+ private _accessibility?;
20
+ private _turboscale?;
21
+ private _options;
22
+ private _config;
23
+ private _accessibilityOptions?;
24
+ private _autoScanning;
25
+ private _testIdentifier;
26
+ private _testMetadata;
27
+ private static _a11yScanSessionMap;
28
+ private _sessionId;
29
+ private listener;
30
+ 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?: AccessibilityOptions | undefined);
31
+ setSuiteFile(filename: string): void;
32
+ _getCapabilityValue(caps: Capabilities.RemoteCapability, capType: string, legacyCapType: string): WebdriverIO.SafaridriverOptions | undefined;
33
+ before(sessionId: string): Promise<void>;
34
+ beforeTest(suiteTitle: string | undefined, test: Frameworks.Test): Promise<void>;
35
+ afterTest(suiteTitle: string | undefined, test: Frameworks.Test): Promise<void>;
36
+ /**
37
+ * Cucumber Only
38
+ */
39
+ beforeScenario(world: ITestCaseHookParameter): Promise<void>;
40
+ afterScenario(world: ITestCaseHookParameter): Promise<void>;
41
+ private commandWrapper;
42
+ private sendTestStopEvent;
43
+ private getIdentifier;
44
+ private shouldRunTestHooks;
45
+ private checkIfPageOpened;
46
+ private static shouldPatchExecuteScript;
47
+ private _setAnnotation;
48
+ }
49
+ declare const AccessibilityHandler: typeof _AccessibilityHandler;
50
+ type AccessibilityHandler = _AccessibilityHandler;
51
+ export default AccessibilityHandler;
52
+ //# sourceMappingURL=accessibility-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibility-handler.d.ts","sourceRoot":"","sources":["../src/accessibility-handler.ts"],"names":[],"mappings":"AAGA,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;AAajE,UAAU,oBAAoB;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAsDD,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,CAAkB;IAC3C,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,CAAsB;IACpD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAyB;IAC3D,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,EAAE,OAAO,GAAG,MAAM,YAAA,EACnD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,EACtB,kBAAkB,CAAC,EAAE,oBAAoB,YAAA;IAsBrD,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;IAiGzB,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;CAG/B;AAGD,QAAA,MAAM,oBAAoB,EAAE,OAAO,qBAAoE,CAAA;AACvG,KAAK,oBAAoB,GAAG,qBAAqB,CAAA;AAEjD,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,361 @@
1
+ /// <reference path="./@types/bstack-service-types.d.ts" />
2
+ import util from 'node:util';
3
+ import Listener from './testOps/listener.js';
4
+ import { getA11yResultsSummary, getAppA11yResultsSummary, getA11yResults, performA11yScan, getUniqueIdentifier, getUniqueIdentifierForCucumber, isAccessibilityAutomationSession, isAppAccessibilityAutomationSession, isBrowserstackSession, o11yClassErrorHandler, shouldScanTestForAccessibility, validateCapsWithA11y, shouldAddServiceVersion, validateCapsWithNonBstackA11y, isTrue, validateCapsWithAppA11y, getAppA11yResults, isFalse, setBrowserstackAnnotation } from './util.js';
5
+ import accessibilityScripts from './scripts/accessibility-scripts.js';
6
+ import PerformanceTester from './instrumentation/performance/performance-tester.js';
7
+ import * as PERFORMANCE_SDK_EVENTS from './instrumentation/performance/constants.js';
8
+ import { BStackLogger } from './bstackLogger.js';
9
+ class _AccessibilityHandler {
10
+ _browser;
11
+ _capabilities;
12
+ isAppAutomate;
13
+ _framework;
14
+ _accessibilityAutomation;
15
+ _accessibilityOpts;
16
+ _platformA11yMeta;
17
+ _caps;
18
+ _suiteFile;
19
+ _accessibility;
20
+ _turboscale;
21
+ _options;
22
+ _config;
23
+ _accessibilityOptions;
24
+ _autoScanning = true;
25
+ _testIdentifier = null;
26
+ _testMetadata = {};
27
+ static _a11yScanSessionMap = {};
28
+ _sessionId = null;
29
+ listener = Listener.getInstance();
30
+ constructor(_browser, _capabilities, _options, isAppAutomate, _config, _framework, _accessibilityAutomation, _turboscale, _accessibilityOpts) {
31
+ this._browser = _browser;
32
+ this._capabilities = _capabilities;
33
+ this.isAppAutomate = isAppAutomate;
34
+ this._framework = _framework;
35
+ this._accessibilityAutomation = _accessibilityAutomation;
36
+ this._accessibilityOpts = _accessibilityOpts;
37
+ const caps = this._browser.capabilities;
38
+ this._platformA11yMeta = {
39
+ browser_name: caps?.browserName,
40
+ browser_version: caps?.browserVersion || caps?.version || 'latest',
41
+ platform_name: caps?.platformName,
42
+ platform_version: this._getCapabilityValue(caps, 'appium:platformVersion', 'platformVersion'),
43
+ os_name: this._getCapabilityValue(_capabilities, 'os', 'os'),
44
+ os_version: this._getCapabilityValue(_capabilities, 'osVersion', 'os_version')
45
+ };
46
+ this._caps = _capabilities;
47
+ this._accessibility = isTrue(_accessibilityAutomation);
48
+ this._accessibilityOptions = _accessibilityOpts;
49
+ this._autoScanning = !isFalse(this._accessibilityOptions?.autoScanning);
50
+ this._options = _options;
51
+ this._config = _config;
52
+ this._turboscale = isTrue(_turboscale);
53
+ }
54
+ setSuiteFile(filename) {
55
+ this._suiteFile = filename;
56
+ }
57
+ _getCapabilityValue(caps, capType, legacyCapType) {
58
+ if (caps) {
59
+ if (capType === 'accessibility') {
60
+ if (caps['bstack:options'] && (isTrue(caps['bstack:options']?.accessibility))) {
61
+ return caps['bstack:options']?.accessibility;
62
+ }
63
+ else if (isTrue(caps['browserstack.accessibility'])) {
64
+ return caps['browserstack.accessibility'];
65
+ }
66
+ }
67
+ else if (capType === 'deviceName') {
68
+ if (caps['bstack:options'] && caps['bstack:options']?.deviceName) {
69
+ return caps['bstack:options']?.deviceName;
70
+ }
71
+ else if (caps['bstack:options'] && caps['bstack:options']?.device) {
72
+ return caps['bstack:options']?.device;
73
+ }
74
+ else if (caps['appium:deviceName']) {
75
+ return caps['appium:deviceName'];
76
+ }
77
+ }
78
+ else if (capType === 'goog:chromeOptions' && caps['goog:chromeOptions']) {
79
+ return caps['goog:chromeOptions'];
80
+ }
81
+ else {
82
+ const bstackOptions = caps['bstack:options'];
83
+ if (bstackOptions && bstackOptions?.[capType]) {
84
+ return bstackOptions?.[capType];
85
+ }
86
+ else if (caps[legacyCapType]) {
87
+ return caps[legacyCapType];
88
+ }
89
+ }
90
+ }
91
+ }
92
+ async before(sessionId) {
93
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.CONFIG_EVENTS.ACCESSIBILITY);
94
+ this._sessionId = sessionId;
95
+ this._accessibility = isTrue(this._getCapabilityValue(this._caps, 'accessibility', 'browserstack.accessibility'));
96
+ //checks for running ALLY on non-bstack infra
97
+ if (isAccessibilityAutomationSession(this._accessibility) && (this._turboscale || !shouldAddServiceVersion(this._config, this._options.testObservability))) {
98
+ if (validateCapsWithNonBstackA11y(this._platformA11yMeta.browser_name, this._platformA11yMeta?.browser_version)) {
99
+ this._accessibility = true;
100
+ }
101
+ }
102
+ else {
103
+ if (isAccessibilityAutomationSession(this._accessibility) && !this.isAppAutomate) {
104
+ const deviceName = this._getCapabilityValue(this._caps, 'deviceName', 'device');
105
+ const chromeOptions = this._getCapabilityValue(this._caps, 'goog:chromeOptions', '');
106
+ this._accessibility = validateCapsWithA11y(deviceName, this._platformA11yMeta, chromeOptions);
107
+ }
108
+ if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
109
+ this._accessibility = validateCapsWithAppA11y(this._platformA11yMeta);
110
+ }
111
+ }
112
+ // Safely add accessibility methods to browser instance with proper typing
113
+ const browserWithA11y = this._browser;
114
+ browserWithA11y.getAccessibilityResultsSummary = async () => {
115
+ if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
116
+ return await getAppA11yResultsSummary(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility, this._sessionId);
117
+ }
118
+ return await getA11yResultsSummary(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
119
+ };
120
+ browserWithA11y.getAccessibilityResults = async () => {
121
+ if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
122
+ return await getAppA11yResults(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility, this._sessionId);
123
+ }
124
+ return await getA11yResults(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
125
+ };
126
+ browserWithA11y.performScan = async () => {
127
+ const results = await performA11yScan(this.isAppAutomate, this._browser, isBrowserstackSession(this._browser), this._accessibility);
128
+ if (results) {
129
+ this._testMetadata[this._testIdentifier] = {
130
+ scanTestForAccessibility: true,
131
+ accessibilityScanStarted: true
132
+ };
133
+ }
134
+ await this._setAnnotation('Accessibility scanning was triggered manually');
135
+ return results;
136
+ };
137
+ browserWithA11y.startA11yScanning = async () => {
138
+ if (this._testIdentifier === null) {
139
+ BStackLogger.warn('Accessibility scanning cannot be started from outside the test');
140
+ return;
141
+ }
142
+ AccessibilityHandler._a11yScanSessionMap[sessionId] = true;
143
+ this._testMetadata[this._testIdentifier] = {
144
+ scanTestForAccessibility: true,
145
+ accessibilityScanStarted: true
146
+ };
147
+ await this._setAnnotation('Accessibility scanning has started');
148
+ };
149
+ browserWithA11y.stopA11yScanning = async () => {
150
+ if (this._testIdentifier === null) {
151
+ BStackLogger.warn('Accessibility scanning cannot be stopped from outside the test');
152
+ return;
153
+ }
154
+ AccessibilityHandler._a11yScanSessionMap[sessionId] = false;
155
+ await this._setAnnotation('Accessibility scanning has stopped');
156
+ };
157
+ if (!this._accessibility) {
158
+ return;
159
+ }
160
+ if (!('overwriteCommand' in this._browser && Array.isArray(accessibilityScripts.commandsToWrap))) {
161
+ return;
162
+ }
163
+ accessibilityScripts.commandsToWrap
164
+ .filter((command) => command.name && command.class)
165
+ .forEach((command) => {
166
+ const browser = this._browser;
167
+ browser.overwriteCommand(command.name, this.commandWrapper.bind(this, command), command.class === 'Element');
168
+ });
169
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.CONFIG_EVENTS.ACCESSIBILITY);
170
+ }
171
+ async beforeTest(suiteTitle, test) {
172
+ try {
173
+ if (this._framework !== 'mocha' ||
174
+ !this.shouldRunTestHooks(this._browser, this._accessibility)) {
175
+ /* This is to be used when test events are sent */
176
+ Listener.setTestRunAccessibilityVar(false);
177
+ return;
178
+ }
179
+ const shouldScanTest = this._autoScanning && shouldScanTestForAccessibility(suiteTitle, test.title, this._accessibilityOptions);
180
+ const testIdentifier = this.getIdentifier(test);
181
+ this._testIdentifier = testIdentifier;
182
+ if (this._sessionId) {
183
+ /* For case with multiple tests under one browser, before hook of 2nd test should change this map value */
184
+ AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanTest;
185
+ }
186
+ /* This is to be used when test events are sent */
187
+ Listener.setTestRunAccessibilityVar(this._accessibility && shouldScanTest);
188
+ this._testMetadata[testIdentifier] = {
189
+ scanTestForAccessibility: shouldScanTest,
190
+ accessibilityScanStarted: true
191
+ };
192
+ this._testMetadata[testIdentifier].accessibilityScanStarted = shouldScanTest;
193
+ if (shouldScanTest) {
194
+ BStackLogger.info('Automate test case execution has started.');
195
+ }
196
+ }
197
+ catch (error) {
198
+ BStackLogger.error(`Exception in starting accessibility automation scan for this test case ${error}`);
199
+ }
200
+ }
201
+ async afterTest(suiteTitle, test) {
202
+ BStackLogger.debug('Accessibility after test hook. Before sending test stop event');
203
+ if (this._framework !== 'mocha' ||
204
+ !this.shouldRunTestHooks(this._browser, this._accessibility)) {
205
+ return;
206
+ }
207
+ try {
208
+ const testIdentifier = this.getIdentifier(test);
209
+ const accessibilityScanStarted = this._testMetadata[testIdentifier]?.accessibilityScanStarted;
210
+ const shouldScanTestForAccessibility = this._testMetadata[testIdentifier]?.scanTestForAccessibility;
211
+ if (!accessibilityScanStarted) {
212
+ return;
213
+ }
214
+ if (shouldScanTestForAccessibility) {
215
+ BStackLogger.info('Automate test case execution has ended. Processing for accessibility testing is underway. ');
216
+ const dataForExtension = {
217
+ 'thTestRunUuid': process.env.TEST_ANALYTICS_ID,
218
+ 'thBuildUuid': process.env.BROWSERSTACK_TESTHUB_UUID,
219
+ 'thJwtToken': process.env.BROWSERSTACK_TESTHUB_JWT
220
+ };
221
+ await this.sendTestStopEvent(this._browser, dataForExtension);
222
+ BStackLogger.info('Accessibility testing for this test case has ended.');
223
+ }
224
+ }
225
+ catch (error) {
226
+ BStackLogger.error(`Accessibility results could not be processed for the test case ${test.title}. Error : ${error}`);
227
+ }
228
+ }
229
+ /**
230
+ * Cucumber Only
231
+ */
232
+ async beforeScenario(world) {
233
+ const pickleData = world.pickle;
234
+ const gherkinDocument = world.gherkinDocument;
235
+ const featureData = gherkinDocument.feature;
236
+ const uniqueId = getUniqueIdentifierForCucumber(world);
237
+ this._testIdentifier = uniqueId;
238
+ if (!this.shouldRunTestHooks(this._browser, this._accessibility)) {
239
+ /* This is to be used when test events are sent */
240
+ Listener.setTestRunAccessibilityVar(false);
241
+ return;
242
+ }
243
+ try {
244
+ const shouldScanScenario = this._autoScanning && shouldScanTestForAccessibility(featureData?.name, pickleData.name, this._accessibilityOptions, world, true);
245
+ this._testMetadata[uniqueId] = {
246
+ scanTestForAccessibility: shouldScanScenario,
247
+ accessibilityScanStarted: true
248
+ };
249
+ this._testMetadata[uniqueId].accessibilityScanStarted = shouldScanScenario;
250
+ if (this._sessionId) {
251
+ /* For case with multiple tests under one browser, before hook of 2nd test should change this map value */
252
+ AccessibilityHandler._a11yScanSessionMap[this._sessionId] = shouldScanScenario;
253
+ }
254
+ /* This is to be used when test events are sent */
255
+ Listener.setTestRunAccessibilityVar(this._accessibility && shouldScanScenario);
256
+ if (shouldScanScenario) {
257
+ BStackLogger.info('Automate test case execution has started.');
258
+ }
259
+ }
260
+ catch (error) {
261
+ BStackLogger.error(`Exception in starting accessibility automation scan for this test case ${error}`);
262
+ }
263
+ }
264
+ async afterScenario(world) {
265
+ BStackLogger.debug('Accessibility after scenario hook. Before sending test stop event');
266
+ if (!this.shouldRunTestHooks(this._browser, this._accessibility)) {
267
+ return;
268
+ }
269
+ const pickleData = world.pickle;
270
+ try {
271
+ const uniqueId = getUniqueIdentifierForCucumber(world);
272
+ const accessibilityScanStarted = this._testMetadata[uniqueId]?.accessibilityScanStarted;
273
+ const shouldScanTestForAccessibility = this._testMetadata[uniqueId]?.scanTestForAccessibility;
274
+ if (!accessibilityScanStarted) {
275
+ return;
276
+ }
277
+ if (shouldScanTestForAccessibility) {
278
+ BStackLogger.info('Automate test case execution has ended. Processing for accessibility testing is underway. ');
279
+ const dataForExtension = {
280
+ 'thTestRunUuid': process.env.TEST_ANALYTICS_ID,
281
+ 'thBuildUuid': process.env.BROWSERSTACK_TESTHUB_UUID,
282
+ 'thJwtToken': process.env.BROWSERSTACK_TESTHUB_JWT
283
+ };
284
+ await this.sendTestStopEvent(this._browser, dataForExtension);
285
+ BStackLogger.info('Accessibility testing for this test case has ended.');
286
+ }
287
+ }
288
+ catch (error) {
289
+ BStackLogger.error(`Accessibility results could not be processed for the test case ${pickleData.name}. Error : ${error}`);
290
+ }
291
+ }
292
+ /*
293
+ * private methods
294
+ */
295
+ async commandWrapper(command, origFunction, ...args) {
296
+ if (this._sessionId && AccessibilityHandler._a11yScanSessionMap[this._sessionId] &&
297
+ (!command.name.includes('execute') ||
298
+ !AccessibilityHandler.shouldPatchExecuteScript(args.length ? args[0] : null))) {
299
+ BStackLogger.debug(`Performing scan for ${command.class} ${command.name}`);
300
+ await performA11yScan(this.isAppAutomate, this._browser, true, true, command.name);
301
+ }
302
+ return origFunction(...args);
303
+ }
304
+ async sendTestStopEvent(browser, dataForExtension) {
305
+ if (AccessibilityHandler._a11yScanSessionMap[this._sessionId]) {
306
+ BStackLogger.debug('Performing scan before saving results');
307
+ await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.PERFORM_SCAN, async () => {
308
+ await performA11yScan(this.isAppAutomate, browser, true, true);
309
+ }, { command: 'afterTest' })();
310
+ }
311
+ if (isAppAccessibilityAutomationSession(this._accessibility, this.isAppAutomate)) {
312
+ return;
313
+ }
314
+ await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.A11Y_EVENTS.SAVE_RESULTS, async () => {
315
+ const results = await browser.executeAsync(accessibilityScripts.saveTestResults, dataForExtension);
316
+ BStackLogger.debug(util.format(results));
317
+ })();
318
+ }
319
+ getIdentifier(test) {
320
+ if ('pickle' in test) {
321
+ return getUniqueIdentifierForCucumber(test);
322
+ }
323
+ return getUniqueIdentifier(test, this._framework);
324
+ }
325
+ shouldRunTestHooks(browser, isAccessibility) {
326
+ if (!browser) {
327
+ return false;
328
+ }
329
+ return isAccessibilityAutomationSession(isAccessibility);
330
+ }
331
+ async checkIfPageOpened(browser, testIdentifier, shouldScanTest) {
332
+ let pageOpen = false;
333
+ this._testMetadata[testIdentifier] = {
334
+ scanTestForAccessibility: shouldScanTest,
335
+ accessibilityScanStarted: true
336
+ };
337
+ try {
338
+ const currentURL = await browser.getUrl();
339
+ const url = new URL(currentURL);
340
+ pageOpen = url?.protocol === 'http:' || url?.protocol === 'https:';
341
+ }
342
+ catch (e) {
343
+ pageOpen = false;
344
+ }
345
+ return pageOpen;
346
+ }
347
+ static shouldPatchExecuteScript(script) {
348
+ if (!script || typeof script !== 'string') {
349
+ return true;
350
+ }
351
+ return (script.toLowerCase().indexOf('browserstack_executor') !== -1 ||
352
+ script.toLowerCase().indexOf('browserstack_accessibility_automation_script') !== -1);
353
+ }
354
+ async _setAnnotation(message) {
355
+ await setBrowserstackAnnotation(this._browser, message, Boolean(this._accessibility));
356
+ }
357
+ }
358
+ // https://github.com/microsoft/TypeScript/issues/6543
359
+ const AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
360
+ export default AccessibilityHandler;
361
+ //# sourceMappingURL=accessibility-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibility-handler.js","sourceRoot":"","sources":["../src/accessibility-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Capabilities } from '@wdio/types';
2
+ import type BrowserStackConfig from './config.js';
3
+ import type { Options } from '@wdio/types';
4
+ import type { BrowserstackHealing } from '@browserstack/ai-sdk-node';
5
+ import type { BrowserstackOptions } from './types.js';
6
+ declare class AiHandler {
7
+ authResult: BrowserstackHealing.InitSuccessResponse | BrowserstackHealing.InitErrorResponse;
8
+ wdioBstackVersion: string;
9
+ constructor();
10
+ authenticateUser(user: string, key: string): Promise<BrowserstackHealing.InitErrorResponse | BrowserstackHealing.InitSuccessResponse>;
11
+ updateCaps(authResult: BrowserstackHealing.InitSuccessResponse | BrowserstackHealing.InitErrorResponse, options: BrowserstackOptions, caps: Array<Capabilities.RemoteCapability> | Capabilities.RemoteCapability): Capabilities.RemoteCapability | Capabilities.RemoteCapability[];
12
+ setToken(sessionId: string, sessionToken: string): Promise<void>;
13
+ installFirefoxExtension(browser: WebdriverIO.Browser): Promise<void>;
14
+ handleHealing(orginalFunc: (arg0: string, arg1: string) => any, using: string, value: string, browser: WebdriverIO.Browser, options: BrowserstackOptions): Promise<any>;
15
+ addMultiRemoteCaps(authResult: BrowserstackHealing.InitSuccessResponse | BrowserstackHealing.InitErrorResponse, config: Options.Testrunner, browserStackConfig: BrowserStackConfig, options: BrowserstackOptions, caps: any, browser: string): void;
16
+ handleMultiRemoteSetup(authResult: BrowserstackHealing.InitSuccessResponse | BrowserstackHealing.InitErrorResponse, config: Options.Testrunner, browserStackConfig: BrowserStackConfig, options: BrowserstackOptions, caps: any): void;
17
+ setup(config: Options.Testrunner, browserStackConfig: BrowserStackConfig, options: BrowserstackOptions, caps: any, isMultiremote: boolean): Promise<any>;
18
+ handleSelfHeal(options: BrowserstackOptions, browser: WebdriverIO.Browser): Promise<void>;
19
+ selfHeal(options: BrowserstackOptions, caps: Capabilities.RemoteCapability, browser: WebdriverIO.Browser): Promise<void>;
20
+ }
21
+ declare const _default: AiHandler;
22
+ export default _default;
23
+ //# sourceMappingURL=ai-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-handler.d.ts","sourceRoot":"","sources":["../src/ai-handler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,kBAAkB,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAIrD,cAAM,SAAS;IACX,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,iBAAiB,CAAA;IAC3F,iBAAiB,EAAE,MAAM,CAAA;;IAMnB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIhD,UAAU,CACN,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,iBAAiB,EAC3F,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,gBAAgB;IAkBxE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAIhD,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO;IAOpD,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB;IA4D9J,kBAAkB,CACd,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,iBAAiB,EAC3F,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,MAAM;IAcnB,sBAAsB,CAClB,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,iBAAiB,EAC3F,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,GAAG;IASP,KAAK,CACP,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,GAAG,EACT,aAAa,EAAE,OAAO;IA0BpB,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO;IA0BzE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,CAAC,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO;CAmBjH;;AAED,wBAA8B"}