ff-automationv2 2.2.2 → 2.2.6

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 (128) hide show
  1. package/dist/ai/llmprompts/systemPrompts/combinedActionExtractorPromptMob.js +3 -2
  2. package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtractor_Mob.js +8 -2
  3. package/dist/ai/llmprompts/systemPrompts/getActionExtractorPromptMob.js +2 -2
  4. package/dist/ai/llmprompts/systemPrompts/mobileKeywordExtractor.js +6 -6
  5. package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPromptMob.js +2 -2
  6. package/dist/ai/llmprompts/systemPrompts/visionPromptMobile.js +1 -1
  7. package/dist/ai/llmprompts/systemPrompts/waitActionExtractorPromptMob.js +2 -2
  8. package/dist/automation/actions/executor.d.ts +29 -0
  9. package/dist/automation/actions/executor.js +419 -0
  10. package/dist/automation/actions/interaction/click/doubleClick.js +2 -2
  11. package/dist/automation/actions/interaction/click/tapOnSpecifiedLocation.d.ts +2 -0
  12. package/dist/automation/actions/interaction/click/tapOnSpecifiedLocation.js +29 -0
  13. package/dist/automation/actions/interaction/elementlessActions/activateAppUsingAppPackage.d.ts +5 -0
  14. package/dist/automation/actions/interaction/elementlessActions/activateAppUsingAppPackage.js +17 -0
  15. package/dist/automation/actions/interaction/elementlessActions/installAPK.d.ts +2 -0
  16. package/dist/automation/actions/interaction/elementlessActions/installAPK.js +40 -0
  17. package/dist/automation/actions/interaction/elementlessActions/isAppInstalled.d.ts +2 -0
  18. package/dist/automation/actions/interaction/elementlessActions/isAppInstalled.js +35 -0
  19. package/dist/automation/actions/interaction/elementlessActions/openAppWithApkFilePath.d.ts +2 -0
  20. package/dist/automation/actions/interaction/elementlessActions/openAppWithApkFilePath.js +93 -0
  21. package/dist/automation/actions/interaction/elementlessActions/openMobileApplication.d.ts +2 -0
  22. package/dist/automation/actions/interaction/elementlessActions/openMobileApplication.js +14 -0
  23. package/dist/automation/actions/interaction/elementlessActions/receiveMessageOnEmulator.d.ts +2 -0
  24. package/dist/automation/actions/interaction/elementlessActions/receiveMessageOnEmulator.js +17 -0
  25. package/dist/automation/actions/interaction/elementlessActions/terminateAppUsingAppPackage.d.ts +2 -0
  26. package/dist/automation/actions/interaction/elementlessActions/terminateAppUsingAppPackage.js +17 -0
  27. package/dist/automation/actions/interaction/elementlessActions/uninstallAPK.d.ts +2 -0
  28. package/dist/automation/actions/interaction/elementlessActions/uninstallAPK.js +44 -0
  29. package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOff.d.ts +2 -0
  30. package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOff.js +24 -0
  31. package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOn.d.ts +2 -0
  32. package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOn.js +25 -0
  33. package/dist/automation/actions/interaction/inputlessActions/Break.d.ts +2 -0
  34. package/dist/automation/actions/interaction/inputlessActions/Break.js +14 -0
  35. package/dist/automation/actions/interaction/inputlessActions/Continue.d.ts +2 -0
  36. package/dist/automation/actions/interaction/inputlessActions/Continue.js +14 -0
  37. package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOff.d.ts +2 -0
  38. package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOff.js +18 -0
  39. package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOn.d.ts +2 -0
  40. package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOn.js +18 -0
  41. package/dist/automation/actions/interaction/inputlessActions/HideKeyboard.d.ts +2 -0
  42. package/dist/automation/actions/interaction/inputlessActions/HideKeyboard.js +14 -0
  43. package/dist/automation/actions/interaction/inputlessActions/LockDevice.d.ts +2 -0
  44. package/dist/automation/actions/interaction/inputlessActions/LockDevice.js +14 -0
  45. package/dist/automation/actions/interaction/inputlessActions/OpenChromeBrowser.d.ts +2 -0
  46. package/dist/automation/actions/interaction/inputlessActions/OpenChromeBrowser.js +14 -0
  47. package/dist/automation/actions/interaction/inputlessActions/OpenNotification.d.ts +2 -0
  48. package/dist/automation/actions/interaction/inputlessActions/OpenNotification.js +14 -0
  49. package/dist/automation/actions/interaction/inputlessActions/ResetApp.d.ts +2 -0
  50. package/dist/automation/actions/interaction/inputlessActions/ResetApp.js +19 -0
  51. package/dist/automation/actions/interaction/inputlessActions/RestartCurrentDevice.d.ts +2 -0
  52. package/dist/automation/actions/interaction/inputlessActions/RestartCurrentDevice.js +23 -0
  53. package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsLandscape.d.ts +2 -0
  54. package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsLandscape.js +14 -0
  55. package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsPortrait.d.ts +2 -0
  56. package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsPortrait.js +14 -0
  57. package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOff.d.ts +2 -0
  58. package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOff.js +27 -0
  59. package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOn.d.ts +2 -0
  60. package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOn.js +27 -0
  61. package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOff.d.ts +2 -0
  62. package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOff.js +18 -0
  63. package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOn.d.ts +2 -0
  64. package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOn.js +18 -0
  65. package/dist/automation/actions/interaction/press/longPress.d.ts +2 -0
  66. package/dist/automation/actions/interaction/press/longPress.js +44 -0
  67. package/dist/automation/actions/interaction/press/pressHomeKey.d.ts +2 -0
  68. package/dist/automation/actions/interaction/press/pressHomeKey.js +20 -0
  69. package/dist/automation/actions/interaction/verify/VerifyAllBrokenImages.js +1 -1
  70. package/dist/automation/actions/interaction/verify/VerifyAllOptionsAreSelected.js +4 -3
  71. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithIndexIsDeselectedInElement.js +2 -2
  72. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithIndexIsSelectedInListBox.js +2 -2
  73. package/dist/automation/actions/interaction/verify/VerifyListBoxOptionsAreSorted.js +1 -1
  74. package/dist/automation/actions/interaction/verify/VerifyNumberOfElementsByTagName.js +2 -2
  75. package/dist/automation/actions/interaction/wait/waitTillPresenceOfAllElements.js +2 -2
  76. package/dist/automation/actions/interface/InputlessActionnterface.d.ts +91 -0
  77. package/dist/automation/actions/interface/InputlessActionnterface.js +1 -0
  78. package/dist/automation/actions/interface/clickActionInterface.d.ts +6 -0
  79. package/dist/automation/actions/interface/elementlessInterface.d.ts +55 -0
  80. package/dist/automation/actions/interface/elementlessInterface.js +1 -0
  81. package/dist/automation/actions/interface/pressActionInterface.d.ts +14 -0
  82. package/dist/automation/browserSession/initiateBrowserSession.d.ts +6 -2
  83. package/dist/automation/browserSession/initiateBrowserSession.js +16 -12
  84. package/dist/automation/cloudSession/initiateCloudSession.d.ts +9 -0
  85. package/dist/automation/cloudSession/initiateCloudSession.js +36 -0
  86. package/dist/automation/mobileSession/initiateMobileSession.d.ts +5 -2
  87. package/dist/automation/mobileSession/initiateMobileSession.js +37 -12
  88. package/dist/core/constants/allAction.js +2 -1
  89. package/dist/core/constants/defaultValues.d.ts +1 -1
  90. package/dist/core/constants/defaultValues.js +1 -1
  91. package/dist/core/constants/supportedActions.js +68 -1
  92. package/dist/core/interfaces/actionInterface.d.ts +29 -0
  93. package/dist/core/interfaces/browserCapabilitiesInterface.d.ts +19 -2
  94. package/dist/core/interfaces/browserCapabilitiesInterface.js +33 -1
  95. package/dist/core/interfaces/browserConfigurationInterface.d.ts +2 -1
  96. package/dist/core/interfaces/cloudConfigInterface.d.ts +9 -0
  97. package/dist/core/interfaces/cloudConfigInterface.js +1 -0
  98. package/dist/core/interfaces/executionDetails.d.ts +6 -2
  99. package/dist/core/interfaces/fireflinkScriptPayloadInterface.d.ts +1 -1
  100. package/dist/core/main/actionHandlerFactory.js +261 -15
  101. package/dist/core/main/executionContext.js +3 -3
  102. package/dist/core/main/runAutomationScript.js +33 -18
  103. package/dist/core/types/browserType.d.ts +1 -0
  104. package/dist/core/types/browserType.js +1 -0
  105. package/dist/core/types/cloudServerPortType.d.ts +4 -0
  106. package/dist/core/types/cloudServerPortType.js +4 -0
  107. package/dist/core/types/cloudprotocolType.d.ts +1 -0
  108. package/dist/core/types/cloudprotocolType.js +1 -0
  109. package/dist/fireflinkData/fireflinkScript/scriptGenrationData.d.ts +2 -0
  110. package/dist/fireflinkData/fireflinkScript/scriptGenrationData.js +4 -1
  111. package/dist/imageAnalysisMobile/annotatedScreenshotMobile.d.ts +4 -1
  112. package/dist/imageAnalysisMobile/annotatedScreenshotMobile.js +7 -4
  113. package/dist/index.js +0 -2
  114. package/dist/service/fireflink.service.d.ts +10 -0
  115. package/dist/service/fireflink.service.js +36 -0
  116. package/dist/service/kafka/fireflinkKafka.service.d.ts +1 -1
  117. package/dist/tests/test12.js +17 -4
  118. package/dist/tests/test3.d.ts +1 -2
  119. package/dist/tests/test3.js +23 -18
  120. package/dist/utils/DomExtraction/jsForAttributeInjection.js +3 -1
  121. package/dist/utils/browserCap/capability.d.ts +23 -0
  122. package/dist/utils/browserCap/capability.js +37 -0
  123. package/dist/utils/cloudConfig/cloudPath.d.ts +2 -0
  124. package/dist/utils/cloudConfig/cloudPath.js +3 -0
  125. package/dist/utils/helpers/enterActionHelper.js +48 -37
  126. package/dist/utils/helpers/xpathcreation.d.ts +6 -1
  127. package/dist/utils/helpers/xpathcreation.js +23 -6
  128. package/package.json +5 -2
@@ -0,0 +1,2 @@
1
+ import { MOB_SetEmulatorPowerStateOffInterface } from "../../interface/InputlessActionnterface.js";
2
+ export declare function SetEmulatorPowerStateOff(args: MOB_SetEmulatorPowerStateOffInterface): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import { logger } from "../../../../utils/logger/logData.js";
2
+ import { execSync } from "child_process";
3
+ export async function SetEmulatorPowerStateOff(args) {
4
+ try {
5
+ try {
6
+ await args.driver.execute("mobile: setPowerState", {
7
+ state: "off"
8
+ });
9
+ }
10
+ catch (error) {
11
+ logger.info("mobile: setPowerState failed, attempting ADB fallback for real device...", error);
12
+ const udid = args.driver.capabilities["appium:udid"] || args.driver.capabilities.udid;
13
+ const cmdPrefix = udid ? `adb -s ${udid} shell` : `adb shell`;
14
+ // KEYCODE_SLEEP = 223
15
+ execSync(`${cmdPrefix} input keyevent 223`);
16
+ }
17
+ args.scriptDataAppender.add(async () => ({
18
+ nlpName: "MOB_SetEmulatorPowerStateOff",
19
+ stepInputs: [],
20
+ elementsData: []
21
+ }));
22
+ }
23
+ catch (error) {
24
+ args.scriptDataAppender.setErrorNLP("MOB_SetEmulatorPowerStateOff");
25
+ throw new Error("SetEmulatorPowerStateOff action failed", { cause: error });
26
+ }
27
+ }
@@ -0,0 +1,2 @@
1
+ import { MOB_SetEmulatorPowerStateOnInterface } from "../../interface/InputlessActionnterface.js";
2
+ export declare function SetEmulatorPowerStateOn(args: MOB_SetEmulatorPowerStateOnInterface): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import { logger } from "../../../../utils/logger/logData.js";
2
+ import { execSync } from "child_process";
3
+ export async function SetEmulatorPowerStateOn(args) {
4
+ try {
5
+ try {
6
+ await args.driver.execute("mobile: setPowerState", {
7
+ state: "on"
8
+ });
9
+ }
10
+ catch (error) {
11
+ logger.info("mobile: setPowerState failed, attempting ADB fallback for real device...", error);
12
+ const udid = args.driver.capabilities["appium:udid"] || args.driver.capabilities.udid;
13
+ const cmdPrefix = udid ? `adb -s ${udid} shell` : `adb shell`;
14
+ // KEYCODE_WAKEUP = 224
15
+ execSync(`${cmdPrefix} input keyevent 224`);
16
+ }
17
+ args.scriptDataAppender.add(async () => ({
18
+ nlpName: "MOB_SetEmulatorPowerStateOn",
19
+ stepInputs: [],
20
+ elementsData: []
21
+ }));
22
+ }
23
+ catch (error) {
24
+ args.scriptDataAppender.setErrorNLP("MOB_SetEmulatorPowerStateOn");
25
+ throw new Error("SetEmulatorPowerStateOn action failed", { cause: error });
26
+ }
27
+ }
@@ -0,0 +1,2 @@
1
+ import { MOB_WifiSwitchOffInterface } from "../../interface/InputlessActionnterface.js";
2
+ export declare function WifiSwitchOff(args: MOB_WifiSwitchOffInterface): Promise<void>;
@@ -0,0 +1,18 @@
1
+ export async function WifiSwitchOff(args) {
2
+ try {
3
+ const currentState = await args.driver.getNetworkConnection();
4
+ // If Wi-Fi is ON (2 or 6), switch it OFF
5
+ if (currentState === 2 || currentState === 6) {
6
+ await args.driver.setNetworkConnection(4); // Data only (Wifi OFF)
7
+ }
8
+ args.scriptDataAppender.add(async () => ({
9
+ nlpName: "MOB_WifiSwitchOff",
10
+ stepInputs: [],
11
+ elementsData: []
12
+ }));
13
+ }
14
+ catch (error) {
15
+ args.scriptDataAppender.setErrorNLP("MOB_WifiSwitchOff");
16
+ throw new Error("WifiSwitchOff action failed", { cause: error });
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+ import { MOB_WifiSwitchOnInterface } from "../../interface/InputlessActionnterface.js";
2
+ export declare function WifiSwitchOn(args: MOB_WifiSwitchOnInterface): Promise<void>;
@@ -0,0 +1,18 @@
1
+ export async function WifiSwitchOn(args) {
2
+ try {
3
+ const currentState = await args.driver.getNetworkConnection();
4
+ // If Wi-Fi is OFF (0, 1, 4), switch it ON
5
+ if (currentState === 0 || currentState === 1 || currentState === 4) {
6
+ await args.driver.setNetworkConnection(2); // Wifi only
7
+ }
8
+ args.scriptDataAppender.add(async () => ({
9
+ nlpName: "MOB_WifiSwitchOn",
10
+ stepInputs: [],
11
+ elementsData: []
12
+ }));
13
+ }
14
+ catch (error) {
15
+ args.scriptDataAppender.setErrorNLP("MOB_WifiSwitchOn");
16
+ throw new Error("WifiSwitchOn action failed", { cause: error });
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+ import { MOB_LongPressInterface } from "../../interface/pressActionInterface.js";
2
+ export declare const LongPress: (args: MOB_LongPressInterface) => Promise<void>;
@@ -0,0 +1,44 @@
1
+ export const LongPress = async (args) => {
2
+ try {
3
+ const element = await args.driver.$(args.selector);
4
+ let duration = 2000;
5
+ if (args.value && args.value.trim() !== "") {
6
+ const parsed = parseInt(args.value);
7
+ if (!isNaN(parsed)) {
8
+ duration = parsed * 1000;
9
+ }
10
+ }
11
+ const location = await element.getLocation();
12
+ const size = await element.getSize();
13
+ const x = location.x + Math.floor(size.width / 2);
14
+ const y = location.y + Math.floor(size.height / 2);
15
+ await args.driver.performActions([
16
+ {
17
+ type: "pointer",
18
+ id: "finger1",
19
+ parameters: { pointerType: "touch" },
20
+ actions: [
21
+ { type: "pointerMove", duration: 0, x, y },
22
+ { type: "pointerDown", button: 0 },
23
+ { type: "pause", duration: duration },
24
+ { type: "pointerUp", button: 0 }
25
+ ]
26
+ }
27
+ ]);
28
+ await args.driver.releaseActions();
29
+ args.scriptDataAppender.add(async () => ({
30
+ nlpName: "MOB_LongPress",
31
+ stepInputs: [duration],
32
+ elementsData: [{
33
+ name: args.elementName,
34
+ type: args.elementType,
35
+ locators: [{ "xpath": args.selector }],
36
+ platform: args.platform
37
+ }]
38
+ }));
39
+ }
40
+ catch (error) {
41
+ args.scriptDataAppender.setErrorNLP("MOB_LongPress");
42
+ throw new Error("MOB_LongPress action failed", { cause: error });
43
+ }
44
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_PressHomeKeyInterface } from "../../interface/pressActionInterface.js";
2
+ export declare function PressHomeKey(args: MOB_PressHomeKeyInterface): Promise<void>;
@@ -0,0 +1,20 @@
1
+ import { logger } from "../../../../utils/logger/logData.js";
2
+ import { execSync } from "child_process";
3
+ export async function PressHomeKey(args) {
4
+ try {
5
+ logger.info("Pressing HOME key...");
6
+ const udid = args.driver.capabilities["appium:udid"] || args.driver.capabilities.udid;
7
+ const cmdPrefix = udid ? `adb -s ${udid} shell` : `adb shell`;
8
+ // Android HOME keyevent is 3
9
+ execSync(`${cmdPrefix} input keyevent 3`);
10
+ args.scriptDataAppender.add(async () => ({
11
+ nlpName: 'MOB_PressHomeKey',
12
+ stepInputs: [],
13
+ elementsData: []
14
+ }));
15
+ }
16
+ catch (error) {
17
+ args.scriptDataAppender.setErrorNLP("MOB_PressHomeKey");
18
+ throw new Error("MOB_PressHomeKey action failed", { cause: error });
19
+ }
20
+ }
@@ -2,7 +2,7 @@ import { logger } from "../../../../utils/logger/logData.js";
2
2
  export async function verifyAllBrokenImages(args) {
3
3
  try {
4
4
  const images = await args.driver.$$("img");
5
- if (images.length === 0) {
5
+ if (await images.length === 0) {
6
6
  throw new Error("No images found on the page.");
7
7
  }
8
8
  for (const img of images) {
@@ -3,7 +3,8 @@ export async function verifyAllOptionsAreSelected(args) {
3
3
  try {
4
4
  const element = await args.driver.$(args.selector);
5
5
  const options = await element.$$("option");
6
- if (!options || options.length === 0) {
6
+ const length = await options.length;
7
+ if (!options || await options.length === 0) {
7
8
  logger.info("No options found in dropdown.");
8
9
  }
9
10
  let selectedCount = 0;
@@ -12,9 +13,9 @@ export async function verifyAllOptionsAreSelected(args) {
12
13
  selectedCount++;
13
14
  }
14
15
  }
15
- const isAllSelected = selectedCount === options.length;
16
+ const isAllSelected = selectedCount === await options.length;
16
17
  logger.info("Verify all options selected result:", {
17
- totalOptions: options.length,
18
+ totalOptions: length,
18
19
  selectedCount,
19
20
  isAllSelected
20
21
  });
@@ -6,12 +6,12 @@ export async function verifyIfOptionWithIndexIsDeselectedInElement(args) {
6
6
  const element = await args.driver.$(args.selector);
7
7
  // Get all <option> elements
8
8
  const options = await element.$$("option");
9
- if (!options || options.length === 0) {
9
+ if (!options || await options.length === 0) {
10
10
  logger.info("No options found in dropdown.");
11
11
  result = false;
12
12
  }
13
13
  // If index is within range
14
- if (expectedIndex < options.length && expectedIndex >= 0) {
14
+ if (expectedIndex < await options.length && expectedIndex >= 0) {
15
15
  const targetOption = options[expectedIndex];
16
16
  const isSelected = await targetOption.isSelected();
17
17
  const isDeselected = !isSelected;
@@ -14,11 +14,11 @@ export async function verifyIfOptionWithIndexIsSelectedInListBox(args) {
14
14
  ;
15
15
  // Get all <option> elements
16
16
  const options = await element.$$("option");
17
- if (!options || options.length === 0) {
17
+ if (!options || await options.length === 0) {
18
18
  logger.info("No options found in dropdown.");
19
19
  }
20
20
  // If index is within range
21
- if (expectedIndex < options.length && expectedIndex >= 0) {
21
+ if (expectedIndex < await options.length && expectedIndex >= 0) {
22
22
  const targetOption = options[expectedIndex];
23
23
  isSelected = await targetOption.isSelected();
24
24
  logger.info("Option index deselection verification result:", {
@@ -4,7 +4,7 @@ export async function verifyListBoxOptionsAreSorted(args) {
4
4
  const element = await args.driver.$(args.selector);
5
5
  // Get all <option> elements
6
6
  const options = await element.$$("option");
7
- if (!options || options.length === 0) {
7
+ if (!options || await options.length === 0) {
8
8
  logger.info("No dropdown options found.");
9
9
  }
10
10
  // Extract visible text safely (avoids Promise.all typing issue)
@@ -5,11 +5,11 @@ export async function verifyNumberOfElementsByTagName(args) {
5
5
  const tagName = parts[0].trim();
6
6
  const expectedCount = parseInt(parts[1], 10);
7
7
  const elements = await args.driver.$$(tagName);
8
- const ismatched = elements.length === expectedCount;
8
+ const ismatched = await elements.length === expectedCount;
9
9
  logger.info("Number of elements by tag name verification result:", {
10
10
  ismatched,
11
11
  tagName,
12
- actualCount: elements.length,
12
+ actualCount: length,
13
13
  expectedCount
14
14
  });
15
15
  if (ismatched === false) {
@@ -7,7 +7,7 @@ export async function waitTillPresenceOfAllElements(args) {
7
7
  const locatorValue = parts[1].trim();
8
8
  const elements = await args.driver.$$(`${locatorType}=${locatorValue}`);
9
9
  await args.driver.waitUntil(async () => {
10
- return elements.length > 0;
10
+ return await elements.length > 0;
11
11
  }, {
12
12
  timeout: 10000,
13
13
  timeoutMsg: "Elements not present"
@@ -33,7 +33,7 @@ export async function waitTillPresenceOfAllElements(args) {
33
33
  const locatorValue = parts[1].trim();
34
34
  const elements = await args.driver.$$(`${locatorType}=${locatorValue}`);
35
35
  await args.driver.waitUntil(async () => {
36
- return elements.length > 0;
36
+ return await elements.length > 0;
37
37
  }, {
38
38
  timeout: 10000,
39
39
  timeoutMsg: "Elements not present"
@@ -0,0 +1,91 @@
1
+ import { ScriptDataAppender } from "../../../fireflinkData/fireflinkScript/scriptGenrationData.js";
2
+ export interface MOB_OpenNotificationInterface {
3
+ driver: WebdriverIO.Browser;
4
+ scriptDataAppender: ScriptDataAppender;
5
+ platform: string;
6
+ }
7
+ export interface MOB_ResetAppInterface {
8
+ driver: WebdriverIO.Browser;
9
+ scriptDataAppender: ScriptDataAppender;
10
+ platform: string;
11
+ }
12
+ export interface MOB_HideKeyboardInterface {
13
+ driver: WebdriverIO.Browser;
14
+ scriptDataAppender: ScriptDataAppender;
15
+ platform: string;
16
+ }
17
+ export interface MOB_SetEmulatorPowerStateOffInterface {
18
+ driver: WebdriverIO.Browser;
19
+ scriptDataAppender: ScriptDataAppender;
20
+ platform: string;
21
+ }
22
+ export interface MOB_OpenChromeBrowserInterface {
23
+ driver: WebdriverIO.Browser;
24
+ scriptDataAppender: ScriptDataAppender;
25
+ platform: string;
26
+ }
27
+ export interface MOB_SetDeviceOrientationAsPortraitInterface {
28
+ driver: WebdriverIO.Browser;
29
+ scriptDataAppender: ScriptDataAppender;
30
+ platform: string;
31
+ }
32
+ export interface MOB_SetDeviceOrientationAsLandscapeInterface {
33
+ driver: WebdriverIO.Browser;
34
+ scriptDataAppender: ScriptDataAppender;
35
+ platform: string;
36
+ }
37
+ export interface MOB_SetEmulatorPowerStateOnInterface {
38
+ driver: WebdriverIO.Browser;
39
+ scriptDataAppender: ScriptDataAppender;
40
+ platform: string;
41
+ }
42
+ export interface MOB_AirplaneModeSwitchOnInterface {
43
+ driver: WebdriverIO.Browser;
44
+ scriptDataAppender: ScriptDataAppender;
45
+ platform: string;
46
+ }
47
+ export interface MOB_LockDeviceInterface {
48
+ driver: WebdriverIO.Browser;
49
+ scriptDataAppender: ScriptDataAppender;
50
+ platform: string;
51
+ }
52
+ export interface MOB_WifiSwitchOffInterface {
53
+ driver: WebdriverIO.Browser;
54
+ scriptDataAppender: ScriptDataAppender;
55
+ platform: string;
56
+ }
57
+ export interface MOB_WifiSwitchOnInterface {
58
+ driver: WebdriverIO.Browser;
59
+ scriptDataAppender: ScriptDataAppender;
60
+ platform: string;
61
+ }
62
+ export interface ContinueInterface {
63
+ driver: WebdriverIO.Browser;
64
+ scriptDataAppender: ScriptDataAppender;
65
+ platform: string;
66
+ }
67
+ export interface MOB_GpsSwitchOnInterface {
68
+ driver: WebdriverIO.Browser;
69
+ scriptDataAppender: ScriptDataAppender;
70
+ platform: string;
71
+ }
72
+ export interface MOB_GpsSwitchOffInterface {
73
+ driver: WebdriverIO.Browser;
74
+ scriptDataAppender: ScriptDataAppender;
75
+ platform: string;
76
+ }
77
+ export interface MOB_RestartCurrentDeviceInterface {
78
+ driver: WebdriverIO.Browser;
79
+ scriptDataAppender: ScriptDataAppender;
80
+ platform: string;
81
+ }
82
+ export interface MOB_AirplaneModeSwitchOffInterface {
83
+ driver: WebdriverIO.Browser;
84
+ scriptDataAppender: ScriptDataAppender;
85
+ platform: string;
86
+ }
87
+ export interface BreakInterface {
88
+ driver: WebdriverIO.Browser;
89
+ scriptDataAppender: ScriptDataAppender;
90
+ platform: string;
91
+ }
@@ -79,3 +79,9 @@ export interface MOB_TapInterface {
79
79
  elementType: any;
80
80
  platform: string;
81
81
  }
82
+ export interface MOB_TapOnSpecifiedLocationInterface {
83
+ driver: WebdriverIO.Browser;
84
+ value: string;
85
+ scriptDataAppender: ScriptDataAppender;
86
+ platform: string;
87
+ }
@@ -0,0 +1,55 @@
1
+ import { ScriptDataAppender } from "../../../fireflinkData/fireflinkScript/scriptGenrationData.js";
2
+ export interface MOB_TapOnSpecifiedLocationInterface {
3
+ driver: WebdriverIO.Browser;
4
+ scriptDataAppender: ScriptDataAppender;
5
+ platform: string;
6
+ value: string;
7
+ }
8
+ export interface MOB_OpenMobileApplicationInterface {
9
+ driver: WebdriverIO.Browser;
10
+ scriptDataAppender: ScriptDataAppender;
11
+ platform: string;
12
+ value: string;
13
+ }
14
+ export interface MOB_IsAppInstalledInterface {
15
+ driver: WebdriverIO.Browser;
16
+ scriptDataAppender: ScriptDataAppender;
17
+ platform: string;
18
+ value: string;
19
+ }
20
+ export interface MOB_ReceiveMessageOnEmulatorInterface {
21
+ driver: WebdriverIO.Browser;
22
+ scriptDataAppender: ScriptDataAppender;
23
+ platform: string;
24
+ value: string;
25
+ }
26
+ export interface MOB_UninstallAPKInterface {
27
+ driver: WebdriverIO.Browser;
28
+ scriptDataAppender: ScriptDataAppender;
29
+ platform: string;
30
+ value: string;
31
+ }
32
+ export interface MOB_InstallAPKInterface {
33
+ driver: WebdriverIO.Browser;
34
+ scriptDataAppender: ScriptDataAppender;
35
+ platform: string;
36
+ value: string;
37
+ }
38
+ export interface MOB_TerminateAppUsingAppPackageInterface {
39
+ driver: WebdriverIO.Browser;
40
+ scriptDataAppender: ScriptDataAppender;
41
+ platform: string;
42
+ value: string;
43
+ }
44
+ export interface MOB_OpenAppWithApkFilePathInterface {
45
+ driver: WebdriverIO.Browser;
46
+ scriptDataAppender: ScriptDataAppender;
47
+ platform: string;
48
+ value: string;
49
+ }
50
+ export interface MOB_ActivateAppUsingAppPackageInterface {
51
+ driver: WebdriverIO.Browser;
52
+ scriptDataAppender: ScriptDataAppender;
53
+ platform: string;
54
+ value: string;
55
+ }
@@ -21,3 +21,17 @@ export interface PressEnterKeyInterface {
21
21
  scriptDataAppender: ScriptDataAppender;
22
22
  platform: string;
23
23
  }
24
+ export interface MOB_PressHomeKeyInterface {
25
+ driver: WebdriverIO.Browser;
26
+ scriptDataAppender: ScriptDataAppender;
27
+ platform: string;
28
+ }
29
+ export interface MOB_LongPressInterface {
30
+ driver: WebdriverIO.Browser;
31
+ scriptDataAppender: ScriptDataAppender;
32
+ platform: string;
33
+ selector: string;
34
+ value: string;
35
+ elementName: string;
36
+ elementType: any;
37
+ }
@@ -1,8 +1,12 @@
1
+ import { Browser } from "../../core/types/browserType.js";
2
+ import { CloudConfig } from "../../core/interfaces/cloudConfigInterface.js";
1
3
  export declare class BrowserSession {
2
- private browser;
4
+ private driver;
3
5
  private browserName;
4
6
  private pageLoad;
5
- constructor(browserName: string, pageLoad: number);
7
+ private cloudSessionInstances;
8
+ private isCloud;
9
+ constructor(browserName: Browser, isCloud: boolean | undefined, capabilities: Record<string, any> | undefined, pageLoad: number, CloudConfig: CloudConfig | undefined);
6
10
  private openBrowser;
7
11
  open(): Promise<void>;
8
12
  close(): Promise<void>;
@@ -1,19 +1,21 @@
1
1
  import { remote } from "webdriverio";
2
+ import { getCapabilities } from "../../utils/browserCap/capability.js";
3
+ import { CloudSession } from "../cloudSession/initiateCloudSession.js";
2
4
  export class BrowserSession {
3
- constructor(browserName, pageLoad) {
4
- this.browser = null;
5
+ constructor(browserName, isCloud, capabilities, pageLoad, CloudConfig) {
6
+ this.driver = null;
5
7
  this.browserName = browserName;
6
8
  this.pageLoad = pageLoad;
9
+ this.isCloud = isCloud;
10
+ this.cloudSessionInstances = new CloudSession(capabilities, CloudConfig);
7
11
  }
8
12
  async openBrowser() {
9
13
  try {
10
14
  const driver = await remote({
11
- capabilities: {
12
- browserName: this.browserName,
13
- },
15
+ capabilities: getCapabilities(this.browserName),
14
16
  logLevel: "silent"
15
17
  });
16
- driver.setTimeout({ 'pageLoad': 10000 });
18
+ driver.setTimeout({ 'pageLoad': this.pageLoad });
17
19
  await driver.waitUntil(async () => {
18
20
  const state = await driver.execute(() => document.readyState);
19
21
  return state === "complete";
@@ -25,18 +27,20 @@ export class BrowserSession {
25
27
  }
26
28
  }
27
29
  async open() {
28
- this.browser = await this.openBrowser();
30
+ this.driver = this.isCloud
31
+ ? await this.cloudSessionInstances.initialize()
32
+ : await this.openBrowser();
29
33
  }
30
34
  async close() {
31
- if (this.browser) {
32
- await this.browser.deleteSession();
33
- this.browser = null;
35
+ if (this.driver) {
36
+ await this.driver.deleteSession();
37
+ this.driver = null;
34
38
  }
35
39
  }
36
40
  async getCurrentDriver() {
37
- if (!this.browser) {
41
+ if (!this.driver) {
38
42
  throw new Error("Browser is not initialized");
39
43
  }
40
- return this.browser;
44
+ return this.driver;
41
45
  }
42
46
  }
@@ -0,0 +1,9 @@
1
+ import { CloudConfig } from "../../core/interfaces/cloudConfigInterface.js";
2
+ export declare class CloudSession {
3
+ private driver;
4
+ private capabilities;
5
+ private cloudConfig;
6
+ constructor(capabilities?: Record<string, any>, cloudConfig?: CloudConfig);
7
+ private createDriver;
8
+ initialize(): Promise<WebdriverIO.Browser>;
9
+ }
@@ -0,0 +1,36 @@
1
+ import { remote } from "webdriverio";
2
+ import { logger } from "../../utils/logger/logData.js";
3
+ import { CloudPort } from "../../core/types/cloudServerPortType.js";
4
+ import { getPath } from "../../utils/cloudConfig/cloudPath.js";
5
+ export class CloudSession {
6
+ constructor(capabilities, cloudConfig) {
7
+ this.driver = null;
8
+ this.capabilities = {
9
+ "wdio:enforceWebDriverClassic": true,
10
+ "devicefarm:networkLogEnable": false,
11
+ "fireflink:deviceType": "public",
12
+ ...(capabilities ?? {})
13
+ };
14
+ this.cloudConfig = cloudConfig ?? {};
15
+ }
16
+ async createDriver() {
17
+ logger.info(this.capabilities);
18
+ try {
19
+ return await remote({
20
+ protocol: this.cloudConfig.protocol,
21
+ hostname: this.cloudConfig.hostname,
22
+ port: CloudPort[this.cloudConfig.protocol ?? "https"],
23
+ path: getPath(this.cloudConfig),
24
+ capabilities: this.capabilities,
25
+ logLevel: "silent"
26
+ });
27
+ }
28
+ catch (error) {
29
+ throw new Error("Browser failed to open", { cause: error });
30
+ }
31
+ }
32
+ async initialize() {
33
+ this.driver = this.driver ?? await this.createDriver();
34
+ return this.driver;
35
+ }
36
+ }
@@ -1,3 +1,4 @@
1
+ import { CloudConfig } from "../../core/interfaces/cloudConfigInterface.js";
1
2
  export interface IMobileCapabilities {
2
3
  platformName: "Android";
3
4
  "appium:platformVersion": string;
@@ -17,10 +18,12 @@ export interface IMobileCapabilities {
17
18
  [key: string]: any;
18
19
  }
19
20
  export declare class MobileSession {
20
- private browser;
21
+ private driver;
21
22
  private appiumPort;
22
23
  private currentAppPackage;
23
- constructor(appiumPort: number);
24
+ private cloudSessionInstances;
25
+ private isCloud;
26
+ constructor(appiumPort: number, isCloud: boolean | undefined, capabilities: Record<string, string | boolean> | undefined, CloudConfig: CloudConfig | undefined);
24
27
  private openApp;
25
28
  open(arg: {
26
29
  capabilities: IMobileCapabilities;