@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.
- package/LICENSE-MIT +20 -0
- package/README.md +392 -0
- package/browserstack-service.d.ts +43 -0
- package/build/Percy/Percy-Handler.d.ts +32 -0
- package/build/Percy/Percy-Handler.d.ts.map +1 -0
- package/build/Percy/Percy-Handler.js +165 -0
- package/build/Percy/Percy-Handler.js.map +1 -0
- package/build/Percy/Percy.d.ts +19 -0
- package/build/Percy/Percy.d.ts.map +1 -0
- package/build/Percy/Percy.js +164 -0
- package/build/Percy/Percy.js.map +1 -0
- package/build/Percy/PercyBinary.d.ts +10 -0
- package/build/Percy/PercyBinary.d.ts.map +1 -0
- package/build/Percy/PercyBinary.js +161 -0
- package/build/Percy/PercyBinary.js.map +1 -0
- package/build/Percy/PercyCaptureMap.d.ts +9 -0
- package/build/Percy/PercyCaptureMap.d.ts.map +1 -0
- package/build/Percy/PercyCaptureMap.js +36 -0
- package/build/Percy/PercyCaptureMap.js.map +1 -0
- package/build/Percy/PercyHelper.d.ts +8 -0
- package/build/Percy/PercyHelper.d.ts.map +1 -0
- package/build/Percy/PercyHelper.js +68 -0
- package/build/Percy/PercyHelper.js.map +1 -0
- package/build/Percy/PercyLogger.d.ts +15 -0
- package/build/Percy/PercyLogger.d.ts.map +1 -0
- package/build/Percy/PercyLogger.js +68 -0
- package/build/Percy/PercyLogger.js.map +1 -0
- package/build/Percy/PercySDK.d.ts +4 -0
- package/build/Percy/PercySDK.d.ts.map +1 -0
- package/build/Percy/PercySDK.js +86 -0
- package/build/Percy/PercySDK.js.map +1 -0
- package/build/accessibility-handler.d.ts +52 -0
- package/build/accessibility-handler.d.ts.map +1 -0
- package/build/accessibility-handler.js +361 -0
- package/build/accessibility-handler.js.map +1 -0
- package/build/ai-handler.d.ts +23 -0
- package/build/ai-handler.d.ts.map +1 -0
- package/build/ai-handler.js +184 -0
- package/build/ai-handler.js.map +1 -0
- package/build/bstackLogger.d.ts +16 -0
- package/build/bstackLogger.d.ts.map +1 -0
- package/build/bstackLogger.js +71 -0
- package/build/bstackLogger.js.map +1 -0
- package/build/cleanup.d.ts +9 -0
- package/build/cleanup.d.ts.map +1 -0
- package/build/cleanup.js +101 -0
- package/build/cleanup.js.map +1 -0
- package/build/cli/apiUtils.d.ts +14 -0
- package/build/cli/apiUtils.d.ts.map +1 -0
- package/build/cli/apiUtils.js +25 -0
- package/build/cli/apiUtils.js.map +1 -0
- package/build/cli/cliLogger.d.ts +17 -0
- package/build/cli/cliLogger.d.ts.map +1 -0
- package/build/cli/cliLogger.js +82 -0
- package/build/cli/cliLogger.js.map +1 -0
- package/build/cli/cliUtils.d.ts +64 -0
- package/build/cli/cliUtils.d.ts.map +1 -0
- package/build/cli/cliUtils.js +461 -0
- package/build/cli/cliUtils.js.map +1 -0
- package/build/cli/eventDispatcher.d.ts +28 -0
- package/build/cli/eventDispatcher.d.ts.map +1 -0
- package/build/cli/eventDispatcher.js +49 -0
- package/build/cli/eventDispatcher.js.map +1 -0
- package/build/cli/frameworks/automationFramework.d.ts +89 -0
- package/build/cli/frameworks/automationFramework.d.ts.map +1 -0
- package/build/cli/frameworks/automationFramework.js +132 -0
- package/build/cli/frameworks/automationFramework.js.map +1 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts +18 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts.map +1 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.js +18 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.js.map +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts +43 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts.map +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.js +43 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.js.map +1 -0
- package/build/cli/frameworks/testFramework.d.ts +89 -0
- package/build/cli/frameworks/testFramework.d.ts.map +1 -0
- package/build/cli/frameworks/testFramework.js +126 -0
- package/build/cli/frameworks/testFramework.js.map +1 -0
- package/build/cli/frameworks/wdioAutomationFramework.d.ts +28 -0
- package/build/cli/frameworks/wdioAutomationFramework.d.ts.map +1 -0
- package/build/cli/frameworks/wdioAutomationFramework.js +67 -0
- package/build/cli/frameworks/wdioAutomationFramework.js.map +1 -0
- package/build/cli/frameworks/wdioMochaTestFramework.d.ts +82 -0
- package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -0
- package/build/cli/frameworks/wdioMochaTestFramework.js +322 -0
- package/build/cli/frameworks/wdioMochaTestFramework.js.map +1 -0
- package/build/cli/grpcClient.d.ts +86 -0
- package/build/cli/grpcClient.d.ts.map +1 -0
- package/build/cli/grpcClient.js +532 -0
- package/build/cli/grpcClient.js.map +1 -0
- package/build/cli/index.d.ts +150 -0
- package/build/cli/index.d.ts.map +1 -0
- package/build/cli/index.js +464 -0
- package/build/cli/index.js.map +1 -0
- package/build/cli/instances/automationFrameworkInstance.d.ts +33 -0
- package/build/cli/instances/automationFrameworkInstance.d.ts.map +1 -0
- package/build/cli/instances/automationFrameworkInstance.js +45 -0
- package/build/cli/instances/automationFrameworkInstance.js.map +1 -0
- package/build/cli/instances/testFrameworkInstance.d.ts +62 -0
- package/build/cli/instances/testFrameworkInstance.d.ts.map +1 -0
- package/build/cli/instances/testFrameworkInstance.js +97 -0
- package/build/cli/instances/testFrameworkInstance.js.map +1 -0
- package/build/cli/instances/trackedContext.d.ts +32 -0
- package/build/cli/instances/trackedContext.d.ts.map +1 -0
- package/build/cli/instances/trackedContext.js +48 -0
- package/build/cli/instances/trackedContext.js.map +1 -0
- package/build/cli/instances/trackedInstance.d.ts +40 -0
- package/build/cli/instances/trackedInstance.d.ts.map +1 -0
- package/build/cli/instances/trackedInstance.js +64 -0
- package/build/cli/instances/trackedInstance.js.map +1 -0
- package/build/cli/modules/accessibilityModule.d.ts +46 -0
- package/build/cli/modules/accessibilityModule.d.ts.map +1 -0
- package/build/cli/modules/accessibilityModule.js +447 -0
- package/build/cli/modules/accessibilityModule.js.map +1 -0
- package/build/cli/modules/automateModule.d.ts +26 -0
- package/build/cli/modules/automateModule.d.ts.map +1 -0
- package/build/cli/modules/automateModule.js +223 -0
- package/build/cli/modules/automateModule.js.map +1 -0
- package/build/cli/modules/baseModule.d.ts +33 -0
- package/build/cli/modules/baseModule.d.ts.map +1 -0
- package/build/cli/modules/baseModule.js +52 -0
- package/build/cli/modules/baseModule.js.map +1 -0
- package/build/cli/modules/observabilityModule.d.ts +22 -0
- package/build/cli/modules/observabilityModule.d.ts.map +1 -0
- package/build/cli/modules/observabilityModule.js +46 -0
- package/build/cli/modules/observabilityModule.js.map +1 -0
- package/build/cli/modules/percyModule.d.ts +19 -0
- package/build/cli/modules/percyModule.d.ts.map +1 -0
- package/build/cli/modules/percyModule.js +78 -0
- package/build/cli/modules/percyModule.js.map +1 -0
- package/build/cli/modules/testHubModule.d.ts +30 -0
- package/build/cli/modules/testHubModule.d.ts.map +1 -0
- package/build/cli/modules/testHubModule.js +233 -0
- package/build/cli/modules/testHubModule.js.map +1 -0
- package/build/cli/modules/webdriverIOModule.d.ts +29 -0
- package/build/cli/modules/webdriverIOModule.d.ts.map +1 -0
- package/build/cli/modules/webdriverIOModule.js +129 -0
- package/build/cli/modules/webdriverIOModule.js.map +1 -0
- package/build/cli/states/automationFrameworkState.d.ts +65 -0
- package/build/cli/states/automationFrameworkState.d.ts.map +1 -0
- package/build/cli/states/automationFrameworkState.js +62 -0
- package/build/cli/states/automationFrameworkState.js.map +1 -0
- package/build/cli/states/hookState.d.ts +45 -0
- package/build/cli/states/hookState.d.ts.map +1 -0
- package/build/cli/states/hookState.js +44 -0
- package/build/cli/states/hookState.js.map +1 -0
- package/build/cli/states/testFrameworkState.d.ts +125 -0
- package/build/cli/states/testFrameworkState.d.ts.map +1 -0
- package/build/cli/states/testFrameworkState.js +116 -0
- package/build/cli/states/testFrameworkState.js.map +1 -0
- package/build/config.d.ts +29 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +52 -0
- package/build/config.js.map +1 -0
- package/build/constants.d.ts +96 -0
- package/build/constants.d.ts.map +1 -0
- package/build/constants.js +156 -0
- package/build/constants.js.map +1 -0
- package/build/crash-reporter.d.ts +18 -0
- package/build/crash-reporter.d.ts.map +1 -0
- package/build/crash-reporter.js +134 -0
- package/build/crash-reporter.js.map +1 -0
- package/build/cucumber-types.d.ts +194 -0
- package/build/cucumber-types.d.ts.map +1 -0
- package/build/cucumber-types.js +2 -0
- package/build/cucumber-types.js.map +1 -0
- package/build/data-store.d.ts +4 -0
- package/build/data-store.d.ts.map +1 -0
- package/build/data-store.js +42 -0
- package/build/data-store.js.map +1 -0
- package/build/exitHandler.d.ts +4 -0
- package/build/exitHandler.d.ts.map +1 -0
- package/build/exitHandler.js +105 -0
- package/build/exitHandler.js.map +1 -0
- package/build/fileStream.d.ts +9 -0
- package/build/fileStream.d.ts.map +1 -0
- package/build/fileStream.js +13 -0
- package/build/fileStream.js.map +1 -0
- package/build/grpc/generated/sdk-messages-accessibility.d.ts +76 -0
- package/build/grpc/generated/sdk-messages-accessibility.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-accessibility.js +908 -0
- package/build/grpc/generated/sdk-messages-accessibility.js.map +1 -0
- package/build/grpc/generated/sdk-messages-ai.d.ts +52 -0
- package/build/grpc/generated/sdk-messages-ai.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-ai.js +643 -0
- package/build/grpc/generated/sdk-messages-ai.js.map +1 -0
- package/build/grpc/generated/sdk-messages-observability.d.ts +44 -0
- package/build/grpc/generated/sdk-messages-observability.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-observability.js +505 -0
- package/build/grpc/generated/sdk-messages-observability.js.map +1 -0
- package/build/grpc/generated/sdk-messages-percy.d.ts +16 -0
- package/build/grpc/generated/sdk-messages-percy.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-percy.js +111 -0
- package/build/grpc/generated/sdk-messages-percy.js.map +1 -0
- package/build/grpc/generated/sdk-messages-testhub.d.ts +16 -0
- package/build/grpc/generated/sdk-messages-testhub.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-testhub.js +132 -0
- package/build/grpc/generated/sdk-messages-testhub.js.map +1 -0
- package/build/grpc/generated/sdk-messages.d.ts +288 -0
- package/build/grpc/generated/sdk-messages.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages.js +3958 -0
- package/build/grpc/generated/sdk-messages.js.map +1 -0
- package/build/grpc/generated/sdk.d.ts +282 -0
- package/build/grpc/generated/sdk.d.ts.map +1 -0
- package/build/grpc/generated/sdk.js +197 -0
- package/build/grpc/generated/sdk.js.map +1 -0
- package/build/grpc/index.d.ts +43 -0
- package/build/grpc/index.d.ts.map +1 -0
- package/build/grpc/index.js +154 -0
- package/build/grpc/index.js.map +1 -0
- package/build/index.d.ts +20 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +13 -0
- package/build/index.js.map +1 -0
- package/build/insights-handler.d.ts +76 -0
- package/build/insights-handler.d.ts.map +1 -0
- package/build/insights-handler.js +855 -0
- package/build/insights-handler.js.map +1 -0
- package/build/instrumentation/funnelInstrumentation.d.ts +8 -0
- package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -0
- package/build/instrumentation/funnelInstrumentation.js +235 -0
- package/build/instrumentation/funnelInstrumentation.js.map +1 -0
- package/build/instrumentation/performance/constants.d.ts +151 -0
- package/build/instrumentation/performance/constants.d.ts.map +1 -0
- package/build/instrumentation/performance/constants.js +158 -0
- package/build/instrumentation/performance/constants.js.map +1 -0
- package/build/instrumentation/performance/performance-tester.d.ts +55 -0
- package/build/instrumentation/performance/performance-tester.d.ts.map +1 -0
- package/build/instrumentation/performance/performance-tester.js +403 -0
- package/build/instrumentation/performance/performance-tester.js.map +1 -0
- package/build/launcher.d.ts +49 -0
- package/build/launcher.d.ts.map +1 -0
- package/build/launcher.js +1077 -0
- package/build/launcher.js.map +1 -0
- package/build/log4jsAppender.d.ts +2 -0
- package/build/log4jsAppender.d.ts.map +1 -0
- package/build/log4jsAppender.js +20 -0
- package/build/log4jsAppender.js.map +1 -0
- package/build/logPatcher.d.ts +13 -0
- package/build/logPatcher.d.ts.map +1 -0
- package/build/logPatcher.js +39 -0
- package/build/logPatcher.js.map +1 -0
- package/build/logReportingAPI.d.ts +12 -0
- package/build/logReportingAPI.d.ts.map +1 -0
- package/build/logReportingAPI.js +57 -0
- package/build/logReportingAPI.js.map +1 -0
- package/build/reporter.d.ts +40 -0
- package/build/reporter.d.ts.map +1 -0
- package/build/reporter.js +254 -0
- package/build/reporter.js.map +1 -0
- package/build/request-handler.d.ts +19 -0
- package/build/request-handler.d.ts.map +1 -0
- package/build/request-handler.js +78 -0
- package/build/request-handler.js.map +1 -0
- package/build/scripts/accessibility-scripts.d.ts +26 -0
- package/build/scripts/accessibility-scripts.d.ts.map +1 -0
- package/build/scripts/accessibility-scripts.js +91 -0
- package/build/scripts/accessibility-scripts.js.map +1 -0
- package/build/service.d.ts +68 -0
- package/build/service.d.ts.map +1 -0
- package/build/service.js +740 -0
- package/build/service.js.map +1 -0
- package/build/testHub/utils.d.ts +10 -0
- package/build/testHub/utils.d.ts.map +1 -0
- package/build/testHub/utils.js +67 -0
- package/build/testHub/utils.js.map +1 -0
- package/build/testOps/featureStats.d.ts +45 -0
- package/build/testOps/featureStats.d.ts.map +1 -0
- package/build/testOps/featureStats.js +117 -0
- package/build/testOps/featureStats.js.map +1 -0
- package/build/testOps/featureUsage.d.ts +22 -0
- package/build/testOps/featureUsage.d.ts.map +1 -0
- package/build/testOps/featureUsage.js +48 -0
- package/build/testOps/featureUsage.js.map +1 -0
- package/build/testOps/listener.d.ts +40 -0
- package/build/testOps/listener.d.ts.map +1 -0
- package/build/testOps/listener.js +269 -0
- package/build/testOps/listener.js.map +1 -0
- package/build/testOps/requestUtils.d.ts +4 -0
- package/build/testOps/requestUtils.d.ts.map +1 -0
- package/build/testOps/requestUtils.js +41 -0
- package/build/testOps/requestUtils.js.map +1 -0
- package/build/testOps/testOpsConfig.d.ts +11 -0
- package/build/testOps/testOpsConfig.d.ts.map +1 -0
- package/build/testOps/testOpsConfig.js +20 -0
- package/build/testOps/testOpsConfig.js.map +1 -0
- package/build/testOps/usageStats.d.ts +404 -0
- package/build/testOps/usageStats.d.ts.map +1 -0
- package/build/testOps/usageStats.js +115 -0
- package/build/testOps/usageStats.js.map +1 -0
- package/build/testorchestration/apply-orchestration.d.ts +7 -0
- package/build/testorchestration/apply-orchestration.d.ts.map +1 -0
- package/build/testorchestration/apply-orchestration.js +43 -0
- package/build/testorchestration/apply-orchestration.js.map +1 -0
- package/build/testorchestration/helpers.d.ts +20 -0
- package/build/testorchestration/helpers.d.ts.map +1 -0
- package/build/testorchestration/helpers.js +413 -0
- package/build/testorchestration/helpers.js.map +1 -0
- package/build/testorchestration/request-utils.d.ts +23 -0
- package/build/testorchestration/request-utils.d.ts.map +1 -0
- package/build/testorchestration/request-utils.js +82 -0
- package/build/testorchestration/request-utils.js.map +1 -0
- package/build/testorchestration/test-ordering-server.d.ts +33 -0
- package/build/testorchestration/test-ordering-server.d.ts.map +1 -0
- package/build/testorchestration/test-ordering-server.js +169 -0
- package/build/testorchestration/test-ordering-server.js.map +1 -0
- package/build/testorchestration/testorcherstrationhandler.d.ts +50 -0
- package/build/testorchestration/testorcherstrationhandler.d.ts.map +1 -0
- package/build/testorchestration/testorcherstrationhandler.js +134 -0
- package/build/testorchestration/testorcherstrationhandler.js.map +1 -0
- package/build/testorchestration/testorcherstrationutils.d.ts +86 -0
- package/build/testorchestration/testorcherstrationutils.d.ts.map +1 -0
- package/build/testorchestration/testorcherstrationutils.js +380 -0
- package/build/testorchestration/testorcherstrationutils.js.map +1 -0
- package/build/types.d.ts +413 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/build/util.d.ts +241 -0
- package/build/util.d.ts.map +1 -0
- package/build/util.js +1665 -0
- package/build/util.js.map +1 -0
- package/package.json +96 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-accessibility.proto +71 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-ai.proto +48 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-observability.proto +39 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-percy.proto +10 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-testhub.proto +10 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages.proto +276 -0
- package/src/proto/browserstack/sdk/v1/sdk.proto +41 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
import TestFramework from '../frameworks/testFramework.js';
|
|
4
|
+
import { TestFrameworkState } from '../states/testFrameworkState.js';
|
|
5
|
+
import { HookState } from '../states/hookState.js';
|
|
6
|
+
import got from 'got';
|
|
7
|
+
import AutomationFramework from '../frameworks/automationFramework.js';
|
|
8
|
+
import { AutomationFrameworkConstants } from '../frameworks/constants/automationFrameworkConstants.js';
|
|
9
|
+
import { isBrowserstackSession } from '../../util.js';
|
|
10
|
+
import { TestFrameworkConstants } from '../frameworks/constants/testFrameworkConstants.js';
|
|
11
|
+
import PerformanceTester from '../../instrumentation/performance/performance-tester.js';
|
|
12
|
+
import * as PERFORMANCE_SDK_EVENTS from '../../instrumentation/performance/constants.js';
|
|
13
|
+
import APIUtils from '../apiUtils.js';
|
|
14
|
+
import { AutomationFrameworkState } from '../states/automationFrameworkState.js';
|
|
15
|
+
export default class AutomateModule extends BaseModule {
|
|
16
|
+
logger = BStackLogger;
|
|
17
|
+
browserStackConfig;
|
|
18
|
+
sessionMap = new Map();
|
|
19
|
+
static MODULE_NAME = 'AutomateModule';
|
|
20
|
+
/**
|
|
21
|
+
* Create a new AutomateModule
|
|
22
|
+
*/
|
|
23
|
+
constructor(browserStackConfig) {
|
|
24
|
+
super();
|
|
25
|
+
this.browserStackConfig = browserStackConfig;
|
|
26
|
+
this.logger.info('AutomateModule: Initializing Automate Module');
|
|
27
|
+
TestFramework.registerObserver(TestFrameworkState.TEST, HookState.PRE, this.onBeforeTest.bind(this));
|
|
28
|
+
TestFramework.registerObserver(TestFrameworkState.TEST, HookState.POST, this.onAfterTest.bind(this));
|
|
29
|
+
TestFramework.registerObserver(AutomationFrameworkState.EXECUTE, HookState.POST, this.onAfterExecute.bind(this));
|
|
30
|
+
}
|
|
31
|
+
getModuleName() {
|
|
32
|
+
return AutomateModule.MODULE_NAME;
|
|
33
|
+
}
|
|
34
|
+
async onBeforeTest(args) {
|
|
35
|
+
this.logger.info('onbeforeTest: inside automate module before test hook!');
|
|
36
|
+
const instace = args.instance;
|
|
37
|
+
const autoInstance = AutomationFramework.getTrackedInstance();
|
|
38
|
+
const sessionId = AutomationFramework.getState(autoInstance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID);
|
|
39
|
+
const browser = AutomationFramework.getDriver(autoInstance);
|
|
40
|
+
const test = args.test;
|
|
41
|
+
const testTitle = test.title;
|
|
42
|
+
const suiteTitle = args.suiteTitle;
|
|
43
|
+
const testContextOptions = this.config.testContextOptions;
|
|
44
|
+
if (testContextOptions.skipSessionName || !isBrowserstackSession(browser)) {
|
|
45
|
+
this.logger.info('Skipping session name update as per configuration');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let name = suiteTitle;
|
|
49
|
+
if (testContextOptions.sessionNameFormat) {
|
|
50
|
+
const caps = AutomationFramework.getState(autoInstance, AutomationFrameworkConstants.KEY_CAPABILITIES);
|
|
51
|
+
name = testContextOptions.sessionNameFormat(this.browserStackConfig, caps, suiteTitle, testTitle);
|
|
52
|
+
}
|
|
53
|
+
else if (test && !test.fullName) {
|
|
54
|
+
// Mocha
|
|
55
|
+
const pre = testContextOptions.sessionNamePrependTopLevelSuiteTitle ? `${suiteTitle} - ` : '';
|
|
56
|
+
const post = !testContextOptions.sessionNameOmitTestTitle ? ` - ${testTitle}` : '';
|
|
57
|
+
name = `${pre}${test.parent}${post}`;
|
|
58
|
+
}
|
|
59
|
+
const existingSession = this.sessionMap.get(sessionId);
|
|
60
|
+
if (!existingSession) {
|
|
61
|
+
this.sessionMap.set(sessionId, {
|
|
62
|
+
lastTestName: name,
|
|
63
|
+
testResults: new Map()
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
existingSession.lastTestName = name;
|
|
68
|
+
this.sessionMap.set(sessionId, existingSession);
|
|
69
|
+
}
|
|
70
|
+
TestFramework.setState(instace, TestFrameworkConstants.KEY_AUTOMATE_SESSION_NAME, name);
|
|
71
|
+
}
|
|
72
|
+
async onAfterTest(args) {
|
|
73
|
+
this.logger.debug('onAfterTest: inside automate module after test hook!');
|
|
74
|
+
const instace = args.instance;
|
|
75
|
+
const { error, passed } = args.result;
|
|
76
|
+
const _failReasons = [];
|
|
77
|
+
if (!passed) {
|
|
78
|
+
_failReasons.push((error && error.message) || 'Unknown Error');
|
|
79
|
+
}
|
|
80
|
+
const status = passed ? 'passed' : 'failed';
|
|
81
|
+
const reason = _failReasons.length > 0 ? _failReasons.join('\n') : undefined;
|
|
82
|
+
const autoInstance = AutomationFramework.getTrackedInstance();
|
|
83
|
+
const sessionId = AutomationFramework.getState(autoInstance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID);
|
|
84
|
+
const browser = AutomationFramework.getDriver(autoInstance);
|
|
85
|
+
const test = args.test;
|
|
86
|
+
const testTitle = test.title;
|
|
87
|
+
const suiteTitle = args.suiteTitle;
|
|
88
|
+
const testContextOptions = this.config.testContextOptions;
|
|
89
|
+
if (testContextOptions.skipSessionStatus || !isBrowserstackSession(browser)) {
|
|
90
|
+
this.logger.info('Skipping session status update as per configuration');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
let name = suiteTitle;
|
|
94
|
+
if (testContextOptions.sessionNameFormat) {
|
|
95
|
+
const caps = AutomationFramework.getState(autoInstance, AutomationFrameworkConstants.KEY_CAPABILITIES);
|
|
96
|
+
name = testContextOptions.sessionNameFormat(this.browserStackConfig, caps, suiteTitle, testTitle);
|
|
97
|
+
}
|
|
98
|
+
else if (test && !test.fullName) {
|
|
99
|
+
// Mocha
|
|
100
|
+
const pre = testContextOptions.sessionNamePrependTopLevelSuiteTitle ? `${suiteTitle} - ` : '';
|
|
101
|
+
const post = !testContextOptions.sessionNameOmitTestTitle ? ` - ${testTitle}` : '';
|
|
102
|
+
name = `${pre}${test.parent}${post}`;
|
|
103
|
+
}
|
|
104
|
+
const sessionData = this.sessionMap.get(sessionId);
|
|
105
|
+
if (sessionData) {
|
|
106
|
+
const testResult = {
|
|
107
|
+
testName: name,
|
|
108
|
+
status: status,
|
|
109
|
+
reason: reason
|
|
110
|
+
};
|
|
111
|
+
sessionData.testResults.set(name, testResult);
|
|
112
|
+
this.sessionMap.set(sessionId, sessionData);
|
|
113
|
+
}
|
|
114
|
+
TestFramework.setState(instace, TestFrameworkConstants.KEY_AUTOMATE_SESSION_STATUS, status);
|
|
115
|
+
TestFramework.setState(instace, TestFrameworkConstants.KEY_AUTOMATE_SESSION_REASON, reason);
|
|
116
|
+
}
|
|
117
|
+
async onAfterExecute() {
|
|
118
|
+
this.logger.debug('onAfterExecute: inside automate module after execute hook!');
|
|
119
|
+
const userName = this.config.userName;
|
|
120
|
+
const accessKey = this.config.accessKey;
|
|
121
|
+
const testContextOptions = this.config.testContextOptions;
|
|
122
|
+
for (const [sessionId, sessionData] of this.sessionMap.entries()) {
|
|
123
|
+
try {
|
|
124
|
+
const failedTests = Array.from(sessionData.testResults.values()).filter(test => test.status === 'failed');
|
|
125
|
+
const hasFailures = failedTests.length > 0;
|
|
126
|
+
const sessionStatus = hasFailures ? 'failed' : 'passed';
|
|
127
|
+
let failureReason;
|
|
128
|
+
if (hasFailures) {
|
|
129
|
+
if (failedTests.length === 1) {
|
|
130
|
+
failureReason = failedTests[0].reason || 'Test failed';
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const reasonLines = failedTests.map(test => `${test.testName}: ${test.reason || 'Unknown Error'}`);
|
|
134
|
+
failureReason = reasonLines.join(',\n');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (!testContextOptions.skipSessionName) {
|
|
138
|
+
await this.markSessionName(sessionId, sessionData.lastTestName, { user: userName, key: accessKey });
|
|
139
|
+
}
|
|
140
|
+
if (!testContextOptions.skipSessionStatus) {
|
|
141
|
+
await this.markSessionStatus(sessionId, sessionStatus, failureReason, { user: userName, key: accessKey });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
this.logger.error(`Failed to process session ${sessionId}: ${error}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.sessionMap.clear();
|
|
149
|
+
}
|
|
150
|
+
async markSessionName(sessionId, sessionName, config) {
|
|
151
|
+
return await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.AUTOMATE_EVENTS.SESSION_NAME, async (sessionId, sessionName, config) => {
|
|
152
|
+
try {
|
|
153
|
+
const auth = Buffer.from(`${config.user}:${config.key}`).toString('base64');
|
|
154
|
+
const isAppAutomate = this.config.app;
|
|
155
|
+
if (isAppAutomate) {
|
|
156
|
+
this.logger.info('Marking session name for App Automate');
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.logger.info('Marking session name for Automate');
|
|
160
|
+
}
|
|
161
|
+
const sessionStatusApiUrl = isAppAutomate
|
|
162
|
+
? `${APIUtils.BROWSERSTACK_AA_API_URL}/app-automate/sessions/${sessionId}.json`
|
|
163
|
+
: `${APIUtils.BROWSERSTACK_AUTOMATE_API_URL}/automate/sessions/${sessionId}.json`;
|
|
164
|
+
const requestBody = {
|
|
165
|
+
name: sessionName
|
|
166
|
+
};
|
|
167
|
+
const options = {
|
|
168
|
+
method: 'PUT',
|
|
169
|
+
url: sessionStatusApiUrl,
|
|
170
|
+
headers: {
|
|
171
|
+
Authorization: `Basic ${auth}`,
|
|
172
|
+
'Content-Type': 'application/json'
|
|
173
|
+
},
|
|
174
|
+
json: requestBody,
|
|
175
|
+
responseType: 'json'
|
|
176
|
+
};
|
|
177
|
+
const response = await got(options);
|
|
178
|
+
this.logger.debug('Session name updated:', response.body);
|
|
179
|
+
this.logger.debug(`Done for sessionId ${sessionId}`);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
this.logger.error(`Failed to update session name on BrowserStack: ${err}`);
|
|
183
|
+
}
|
|
184
|
+
})(sessionId, sessionName, config);
|
|
185
|
+
}
|
|
186
|
+
async markSessionStatus(sessionId, sessionStatus, sessionErrorMessage, config) {
|
|
187
|
+
return await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.AUTOMATE_EVENTS.SESSION_STATUS, async (sessionId, sessionStatus, sessionErrorMessage, config) => {
|
|
188
|
+
try {
|
|
189
|
+
const auth = Buffer.from(`${config.user}:${config.key}`).toString('base64');
|
|
190
|
+
const isAppAutomate = this.config.app;
|
|
191
|
+
if (isAppAutomate) {
|
|
192
|
+
this.logger.info('Marking session status for App Automate');
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.logger.info('Marking session status for Automate');
|
|
196
|
+
}
|
|
197
|
+
const sessionStatusApiUrl = isAppAutomate
|
|
198
|
+
? `${APIUtils.BROWSERSTACK_AA_API_URL}/app-automate/sessions/${sessionId}.json`
|
|
199
|
+
: `${APIUtils.BROWSERSTACK_AUTOMATE_API_URL}/automate/sessions/${sessionId}.json`;
|
|
200
|
+
const body = {
|
|
201
|
+
status: sessionStatus,
|
|
202
|
+
...(sessionErrorMessage ? { reason: sessionErrorMessage } : {})
|
|
203
|
+
};
|
|
204
|
+
const options = {
|
|
205
|
+
method: 'PUT',
|
|
206
|
+
url: sessionStatusApiUrl,
|
|
207
|
+
headers: {
|
|
208
|
+
Authorization: `Basic ${auth}`,
|
|
209
|
+
'Content-Type': 'application/json'
|
|
210
|
+
},
|
|
211
|
+
json: body,
|
|
212
|
+
responseType: 'json'
|
|
213
|
+
};
|
|
214
|
+
const response = await got(options);
|
|
215
|
+
this.logger.debug('Session update response:', response.body);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
this.logger.error(`Failed to update session status on BrowserStack: ${err}`);
|
|
219
|
+
}
|
|
220
|
+
})(sessionId, sessionStatus, sessionErrorMessage, config);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=automateModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automateModule.js","sourceRoot":"","sources":["../../../src/cli/modules/automateModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for BrowserStack modules
|
|
3
|
+
*/
|
|
4
|
+
export default class BaseModule {
|
|
5
|
+
#private;
|
|
6
|
+
binSessionId: string | null;
|
|
7
|
+
platformIndex: number;
|
|
8
|
+
config: Record<string, unknown>;
|
|
9
|
+
client: any;
|
|
10
|
+
/**
|
|
11
|
+
* Create a new BaseModule
|
|
12
|
+
*/
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Ensure that a bin session ID is available
|
|
16
|
+
* @throws {Error} If binSessionId is missing
|
|
17
|
+
*/
|
|
18
|
+
ensureBinSession(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Get the name of the module
|
|
21
|
+
* @returns {string} The module name
|
|
22
|
+
*/
|
|
23
|
+
getModuleName(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Configure the module with session information
|
|
26
|
+
* @param {string} binSessionId - The bin session ID
|
|
27
|
+
* @param {number} platformIndex - The platform index
|
|
28
|
+
* @param {Object} client - The gRPC client service
|
|
29
|
+
* @param {Object} config - Configuration options
|
|
30
|
+
*/
|
|
31
|
+
configure(binSessionId: string | null, platformIndex: number, client: unknown, config?: {}): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=baseModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/baseModule.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;;IAE3B,YAAY,EAAE,MAAM,GAAC,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE,GAAG,CAAA;IACX;;OAEG;;IASH;;;OAGG;IACH,gBAAgB;IAMhB;;;OAGG;IACH,aAAa;IAIb;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK;CAQ3F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for BrowserStack modules
|
|
4
|
+
*/
|
|
5
|
+
export default class BaseModule {
|
|
6
|
+
#name;
|
|
7
|
+
binSessionId;
|
|
8
|
+
platformIndex;
|
|
9
|
+
config;
|
|
10
|
+
client;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new BaseModule
|
|
13
|
+
*/
|
|
14
|
+
constructor() {
|
|
15
|
+
this.#name = 'BaseModule';
|
|
16
|
+
this.binSessionId = null;
|
|
17
|
+
this.platformIndex = 0;
|
|
18
|
+
this.config = {};
|
|
19
|
+
this.client = null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Ensure that a bin session ID is available
|
|
23
|
+
* @throws {Error} If binSessionId is missing
|
|
24
|
+
*/
|
|
25
|
+
ensureBinSession() {
|
|
26
|
+
if (!this.binSessionId) {
|
|
27
|
+
throw new Error('Missing binSessionId');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the name of the module
|
|
32
|
+
* @returns {string} The module name
|
|
33
|
+
*/
|
|
34
|
+
getModuleName() {
|
|
35
|
+
return this.#name;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Configure the module with session information
|
|
39
|
+
* @param {string} binSessionId - The bin session ID
|
|
40
|
+
* @param {number} platformIndex - The platform index
|
|
41
|
+
* @param {Object} client - The gRPC client service
|
|
42
|
+
* @param {Object} config - Configuration options
|
|
43
|
+
*/
|
|
44
|
+
configure(binSessionId, platformIndex, client, config = {}) {
|
|
45
|
+
this.binSessionId = binSessionId;
|
|
46
|
+
this.platformIndex = platformIndex;
|
|
47
|
+
this.client = client;
|
|
48
|
+
this.config = config;
|
|
49
|
+
BStackLogger.debug(`Configured module ${this.getModuleName()} with binSessionId=${binSessionId}, platformIndex=${platformIndex}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=baseModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseModule.js","sourceRoot":"","sources":["../../../src/cli/modules/baseModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,KAAK,CAAQ;IACb,YAAY,CAAa;IACzB,aAAa,CAAQ;IACrB,MAAM,CAAyB;IAC/B,MAAM,CAAK;IACX;;OAEG;IACH;QACI,IAAI,CAAC,KAAK,GAAG,YAAY,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACZ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC3C,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,aAAa;QACT,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,YAAyB,EAAE,aAAqB,EAAE,MAAe,EAAE,MAAM,GAAG,EAAE;QACpF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,YAAY,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,aAAa,EAAE,sBAAsB,YAAY,mBAAmB,aAAa,EAAE,CAAC,CAAA;IACrI,CAAC;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Observability Module for BrowserStack
|
|
5
|
+
*/
|
|
6
|
+
export default class ObservabilityModule extends BaseModule {
|
|
7
|
+
logger: typeof BStackLogger;
|
|
8
|
+
observabilityConfig: unknown;
|
|
9
|
+
name: string;
|
|
10
|
+
static MODULE_NAME: string;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new ObservabilityModule
|
|
13
|
+
*/
|
|
14
|
+
constructor(observabilityConfig: unknown);
|
|
15
|
+
/**
|
|
16
|
+
* Get the module name
|
|
17
|
+
* @returns {string} The module name
|
|
18
|
+
*/
|
|
19
|
+
getModuleName(): string;
|
|
20
|
+
onBeforeTest(args: Record<string, unknown>): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=observabilityModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observabilityModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/observabilityModule.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAMxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;IACvD,MAAM,sBAAe;IACrB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,WAAW,SAAwB;IAE1C;;OAEG;gBACS,mBAAmB,EAAE,OAAO;IAQxC;;;OAGG;IACH,aAAa;IAIP,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYnD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import AutomationFramework from '../frameworks/automationFramework.js';
|
|
3
|
+
import { AutomationFrameworkState } from '../states/automationFrameworkState.js';
|
|
4
|
+
import { HookState } from '../states/hookState.js';
|
|
5
|
+
import PerformanceTester from '../../instrumentation/performance/performance-tester.js';
|
|
6
|
+
import { O11Y_EVENTS } from '../../instrumentation/performance/constants.js';
|
|
7
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
8
|
+
import { performO11ySync } from '../../util.js';
|
|
9
|
+
/**
|
|
10
|
+
* Observability Module for BrowserStack
|
|
11
|
+
*/
|
|
12
|
+
export default class ObservabilityModule extends BaseModule {
|
|
13
|
+
logger = BStackLogger;
|
|
14
|
+
observabilityConfig;
|
|
15
|
+
name;
|
|
16
|
+
static MODULE_NAME = 'ObservabilityModule';
|
|
17
|
+
/**
|
|
18
|
+
* Create a new ObservabilityModule
|
|
19
|
+
*/
|
|
20
|
+
constructor(observabilityConfig) {
|
|
21
|
+
super();
|
|
22
|
+
this.name = 'ObservabilityModule';
|
|
23
|
+
this.observabilityConfig = observabilityConfig;
|
|
24
|
+
AutomationFramework.registerObserver(AutomationFrameworkState.CREATE, HookState.POST, this.onBeforeTest.bind(this));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the module name
|
|
28
|
+
* @returns {string} The module name
|
|
29
|
+
*/
|
|
30
|
+
getModuleName() {
|
|
31
|
+
return ObservabilityModule.MODULE_NAME;
|
|
32
|
+
}
|
|
33
|
+
async onBeforeTest(args) {
|
|
34
|
+
if (args.browser) {
|
|
35
|
+
const browser = args.browser;
|
|
36
|
+
PerformanceTester.start(O11Y_EVENTS.SYNC);
|
|
37
|
+
performO11ySync(browser);
|
|
38
|
+
PerformanceTester.end(O11Y_EVENTS.SYNC);
|
|
39
|
+
this.logger.info('onBeforeTest: Observability sync done');
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.logger.error('onBeforeTest: page is not defined');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=observabilityModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observabilityModule.js","sourceRoot":"","sources":["../../../src/cli/modules/observabilityModule.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,iBAAiB,MAAM,yDAAyD,CAAA;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;IACvD,MAAM,GAAG,YAAY,CAAA;IACrB,mBAAmB,CAAS;IAC5B,IAAI,CAAQ;IACZ,MAAM,CAAC,WAAW,GAAG,qBAAqB,CAAA;IAE1C;;OAEG;IACH,YAAY,mBAA4B;QACpC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAE9C,mBAAmB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACvH,CAAC;IAED;;;OAGG;IACH,aAAa;QACT,OAAO,mBAAmB,CAAC,WAAW,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAA6B;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8B,CAAA;YACnD,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACzC,eAAe,CAAC,OAAO,CAAC,CAAA;YACxB,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QAC7D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAC1D,CAAC;IACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
export default class PercyModule extends BaseModule {
|
|
4
|
+
logger: typeof BStackLogger;
|
|
5
|
+
private browser?;
|
|
6
|
+
static readonly MODULE_NAME = "PercyModule";
|
|
7
|
+
private percyHandler;
|
|
8
|
+
private percyConfig;
|
|
9
|
+
private isAppAutomate;
|
|
10
|
+
/**
|
|
11
|
+
* Create a new PercyModule
|
|
12
|
+
*/
|
|
13
|
+
constructor(percyConfig: unknown);
|
|
14
|
+
getModuleName(): string;
|
|
15
|
+
onAfterCreate(args: Record<string, unknown>): Promise<void>;
|
|
16
|
+
onBeforeTest(args: Record<string, unknown>): Promise<void>;
|
|
17
|
+
onAfterTest(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=percyModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percyModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/percyModule.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAW9C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU;IAE/C,MAAM,sBAAe;IACrB,OAAO,CAAC,OAAO,CAAC,CAAiC;IACjD,MAAM,CAAC,QAAQ,CAAC,WAAW,iBAAgB;IAC3C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B;;OAEG;gBACS,WAAW,EAAE,OAAO;IAUhC,aAAa,IAAI,MAAM;IAIjB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAmC3C,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU1C,WAAW;CAcpB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
import TestFramework from '../frameworks/testFramework.js';
|
|
4
|
+
import AutomationFramework from '../frameworks/automationFramework.js';
|
|
5
|
+
import { TestFrameworkState } from '../states/testFrameworkState.js';
|
|
6
|
+
import { HookState } from '../states/hookState.js';
|
|
7
|
+
import { AutomationFrameworkState } from '../states/automationFrameworkState.js';
|
|
8
|
+
import PercyHandler from '../../Percy/Percy-Handler.js';
|
|
9
|
+
import { TestFrameworkConstants } from '../frameworks/constants/testFrameworkConstants.js';
|
|
10
|
+
export default class PercyModule extends BaseModule {
|
|
11
|
+
logger = BStackLogger;
|
|
12
|
+
browser;
|
|
13
|
+
static MODULE_NAME = 'PercyModule';
|
|
14
|
+
percyHandler;
|
|
15
|
+
percyConfig;
|
|
16
|
+
isAppAutomate;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new PercyModule
|
|
19
|
+
*/
|
|
20
|
+
constructor(percyConfig) {
|
|
21
|
+
super();
|
|
22
|
+
this.percyConfig = percyConfig;
|
|
23
|
+
this.isAppAutomate = false;
|
|
24
|
+
this.logger.info('PercyModule: Initializing Percy Module');
|
|
25
|
+
AutomationFramework.registerObserver(AutomationFrameworkState.CREATE, HookState.POST, this.onAfterCreate.bind(this));
|
|
26
|
+
TestFramework.registerObserver(TestFrameworkState.TEST, HookState.PRE, this.onBeforeTest.bind(this));
|
|
27
|
+
TestFramework.registerObserver(TestFrameworkState.TEST, HookState.POST, this.onAfterTest.bind(this));
|
|
28
|
+
}
|
|
29
|
+
getModuleName() {
|
|
30
|
+
return PercyModule.MODULE_NAME;
|
|
31
|
+
}
|
|
32
|
+
async onAfterCreate(args) {
|
|
33
|
+
this.browser = args.browser;
|
|
34
|
+
if (!this.browser) {
|
|
35
|
+
this.logger.error('PercyModule: Browser instance is not defined in onAfterCreate');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!this.percyConfig || !this.percyConfig.percyCaptureMode) {
|
|
39
|
+
this.logger.warn('PercyModule: Percy capture mode is not defined in the configuration, skipping Percy initialization');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.isAppAutomate = this.isAppAutomate || 'app' in this.config;
|
|
43
|
+
this.percyHandler = new PercyHandler(this.percyConfig.percyCaptureMode, this.browser, {}, this.isAppAutomate, '');
|
|
44
|
+
await this.percyHandler.before();
|
|
45
|
+
const sessionId = this.browser.sessionId;
|
|
46
|
+
this.browser.on('command', async (command) => {
|
|
47
|
+
await this.percyHandler?.browserBeforeCommand(Object.assign(command, { sessionId }));
|
|
48
|
+
});
|
|
49
|
+
this.browser.on('result', (result) => {
|
|
50
|
+
this.percyHandler?.browserAfterCommand(Object.assign(result, { sessionId }));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async onBeforeTest(args) {
|
|
54
|
+
const instace = args.instance;
|
|
55
|
+
const sessionName = TestFramework.getState(instace, TestFrameworkConstants.KEY_AUTOMATE_SESSION_NAME);
|
|
56
|
+
if (!this.percyHandler) {
|
|
57
|
+
this.logger.warn('PercyModule: Percy handler is not initialized, skipping pre execute actions');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.percyHandler._setSessionName(sessionName);
|
|
61
|
+
}
|
|
62
|
+
async onAfterTest() {
|
|
63
|
+
try {
|
|
64
|
+
if (!this.percyHandler) {
|
|
65
|
+
this.logger.warn('PercyModule: Percy handler is not initialized, skipping post execute actions');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (this.percyConfig.percyCaptureMode === 'testcase') {
|
|
69
|
+
await this.percyHandler.percyAutoCapture('testcase', null);
|
|
70
|
+
}
|
|
71
|
+
await this.percyHandler.teardown();
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.logger.error(`Percy post execute failed: ${error}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=percyModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percyModule.js","sourceRoot":"","sources":["../../../src/cli/modules/percyModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import BaseModule from './baseModule.js';
|
|
2
|
+
import { BStackLogger } from '../cliLogger.js';
|
|
3
|
+
/**
|
|
4
|
+
* TestHub Module for BrowserStack
|
|
5
|
+
*/
|
|
6
|
+
export default class TestHubModule extends BaseModule {
|
|
7
|
+
logger: typeof BStackLogger;
|
|
8
|
+
testhubConfig: unknown;
|
|
9
|
+
name: string;
|
|
10
|
+
static MODULE_NAME: string;
|
|
11
|
+
/**
|
|
12
|
+
* Create a new TestHubModule
|
|
13
|
+
*/
|
|
14
|
+
constructor(testhubConfig: unknown);
|
|
15
|
+
/**
|
|
16
|
+
* Get the module name
|
|
17
|
+
* @returns {string} The module name
|
|
18
|
+
*/
|
|
19
|
+
getModuleName(): string;
|
|
20
|
+
onBeforeTest(args: Record<string, unknown>): void;
|
|
21
|
+
onAllTestEvents(args: Record<string, unknown>): void;
|
|
22
|
+
sendTestFrameworkEvent(args: Record<string, unknown>): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Send test session event to the service
|
|
25
|
+
* @param args containing test session data
|
|
26
|
+
*/
|
|
27
|
+
sendTestSessionEvent(args: Record<string, unknown>): Promise<void>;
|
|
28
|
+
sendLogCreatedEvent(args: Record<string, unknown>): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=testHubModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testHubModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/testHubModule.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAgB9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;IAEjD,MAAM,sBAAe;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,WAAW,SAAkB;IAEpC;;OAEG;gBACS,aAAa,EAAE,OAAO;IAclC;;;OAGG;IACH,aAAa;IAIb,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ1C,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsCvC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsC1D;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ElE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAyC1D"}
|