ff-automationv2 2.2.7 → 2.2.10

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 (151) hide show
  1. package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtractor_Mob.js +2 -1
  2. package/dist/ai/llmprompts/systemPrompts/getActionExtractorPromptMob.js +3 -2
  3. package/dist/ai/llmprompts/systemPrompts/mobileKeywordExtractor.js +3 -1
  4. package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPromptMob.js +6 -4
  5. package/dist/ai/llmprompts/systemPrompts/waitActionExtractorPromptMob.js +2 -1
  6. package/dist/automation/actions/executor.d.ts +54 -0
  7. package/dist/automation/actions/executor.js +789 -0
  8. package/dist/automation/actions/interaction/click/doubleClick.js +1 -5
  9. package/dist/automation/actions/interaction/enterActions/enterInputAndPress.js +10 -3
  10. package/dist/automation/actions/interaction/enterActions/waitAndEnter.js +20 -19
  11. package/dist/automation/actions/interaction/get/MOB_GetADBLogsForGivenAppPackage.d.ts +2 -0
  12. package/dist/automation/actions/interaction/get/MOB_GetADBLogsForGivenAppPackage.js +18 -0
  13. package/dist/automation/actions/interaction/get/MOB_GetAllContexts.d.ts +2 -0
  14. package/dist/automation/actions/interaction/get/MOB_GetAllContexts.js +17 -0
  15. package/dist/automation/actions/interaction/get/MOB_GetAllWindowHandles.d.ts +2 -0
  16. package/dist/automation/actions/interaction/get/MOB_GetAllWindowHandles.js +26 -0
  17. package/dist/automation/actions/interaction/get/MOB_GetAltitude.d.ts +2 -0
  18. package/dist/automation/actions/interaction/get/MOB_GetAltitude.js +17 -0
  19. package/dist/automation/actions/interaction/get/MOB_GetBatteryPercentage.d.ts +2 -0
  20. package/dist/automation/actions/interaction/get/MOB_GetBatteryPercentage.js +19 -0
  21. package/dist/automation/actions/interaction/get/MOB_GetBatteryStatus.d.ts +2 -0
  22. package/dist/automation/actions/interaction/get/MOB_GetBatteryStatus.js +16 -0
  23. package/dist/automation/actions/interaction/get/MOB_GetClipBoardText.d.ts +2 -0
  24. package/dist/automation/actions/interaction/get/MOB_GetClipBoardText.js +17 -0
  25. package/dist/automation/actions/interaction/get/MOB_GetCurrentActivity.d.ts +2 -0
  26. package/dist/automation/actions/interaction/get/MOB_GetCurrentActivity.js +16 -0
  27. package/dist/automation/actions/interaction/get/MOB_GetCurrentAppPackage.d.ts +2 -0
  28. package/dist/automation/actions/interaction/get/MOB_GetCurrentAppPackage.js +17 -0
  29. package/dist/automation/actions/interaction/get/MOB_GetCurrentContext.d.ts +2 -0
  30. package/dist/automation/actions/interaction/get/MOB_GetCurrentContext.js +16 -0
  31. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceDate.d.ts +2 -0
  32. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceDate.js +18 -0
  33. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSettings.d.ts +2 -0
  34. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSettings.js +16 -0
  35. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceStatus.d.ts +2 -0
  36. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceStatus.js +16 -0
  37. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSystemBars.d.ts +2 -0
  38. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSystemBars.js +16 -0
  39. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceTime.d.ts +2 -0
  40. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceTime.js +16 -0
  41. package/dist/automation/actions/interaction/get/MOB_GetCurrentOrientation.d.ts +2 -0
  42. package/dist/automation/actions/interaction/get/MOB_GetCurrentOrientation.js +16 -0
  43. package/dist/automation/actions/interaction/get/MOB_GetCurrentSessionId.d.ts +2 -0
  44. package/dist/automation/actions/interaction/get/MOB_GetCurrentSessionId.js +16 -0
  45. package/dist/automation/actions/interaction/get/MOB_GetDeviceLocation.d.ts +2 -0
  46. package/dist/automation/actions/interaction/get/MOB_GetDeviceLocation.js +17 -0
  47. package/dist/automation/actions/interaction/get/MOB_GetDeviceName.d.ts +2 -0
  48. package/dist/automation/actions/interaction/get/MOB_GetDeviceName.js +17 -0
  49. package/dist/automation/actions/interaction/get/MOB_GetDeviceOsVersion.d.ts +2 -0
  50. package/dist/automation/actions/interaction/get/MOB_GetDeviceOsVersion.js +17 -0
  51. package/dist/automation/actions/interaction/get/MOB_GetDeviceUdid.d.ts +2 -0
  52. package/dist/automation/actions/interaction/get/MOB_GetDeviceUdid.js +17 -0
  53. package/dist/automation/actions/interaction/get/MOB_GetHeightOfElement.d.ts +2 -0
  54. package/dist/automation/actions/interaction/get/MOB_GetHeightOfElement.js +23 -0
  55. package/dist/automation/actions/interaction/get/MOB_GetHeightOfScreen.d.ts +2 -0
  56. package/dist/automation/actions/interaction/get/MOB_GetHeightOfScreen.js +17 -0
  57. package/dist/automation/actions/interaction/get/MOB_GetHourFromCurrentDeviceTime.d.ts +2 -0
  58. package/dist/automation/actions/interaction/get/MOB_GetHourFromCurrentDeviceTime.js +18 -0
  59. package/dist/automation/actions/interaction/get/MOB_GetLatitude.d.ts +2 -0
  60. package/dist/automation/actions/interaction/get/MOB_GetLatitude.js +19 -0
  61. package/dist/automation/actions/interaction/get/MOB_GetLongitude.d.ts +2 -0
  62. package/dist/automation/actions/interaction/get/MOB_GetLongitude.js +19 -0
  63. package/dist/automation/actions/interaction/get/MOB_GetMinuteFromCurrentDeviceTime.d.ts +2 -0
  64. package/dist/automation/actions/interaction/get/MOB_GetMinuteFromCurrentDeviceTime.js +18 -0
  65. package/dist/automation/actions/interaction/get/MOB_GetSecondFromCurrentDeviceTime.d.ts +2 -0
  66. package/dist/automation/actions/interaction/get/MOB_GetSecondFromCurrentDeviceTime.js +17 -0
  67. package/dist/automation/actions/interaction/get/MOB_GetSizeOfScreen.d.ts +2 -0
  68. package/dist/automation/actions/interaction/get/MOB_GetSizeOfScreen.js +16 -0
  69. package/dist/automation/actions/interaction/get/MOB_GetSupportedPerformanceDataTypes.d.ts +2 -0
  70. package/dist/automation/actions/interaction/get/MOB_GetSupportedPerformanceDataTypes.js +16 -0
  71. package/dist/automation/actions/interaction/get/MOB_GetTextFromElementAndSetToClipBoard.d.ts +2 -0
  72. package/dist/automation/actions/interaction/get/MOB_GetTextFromElementAndSetToClipBoard.js +31 -0
  73. package/dist/automation/actions/interaction/get/MOB_GetWidthOfElement.d.ts +2 -0
  74. package/dist/automation/actions/interaction/get/MOB_GetWidthOfElement.js +23 -0
  75. package/dist/automation/actions/interaction/get/MOB_GetWidthOfScreen.d.ts +2 -0
  76. package/dist/automation/actions/interaction/get/MOB_GetWidthOfScreen.js +17 -0
  77. package/dist/automation/actions/interaction/get/getRect.js +2 -4
  78. package/dist/automation/actions/interaction/get/getScreenshot.js +23 -18
  79. package/dist/automation/actions/interaction/get/getScreenshotAs.js +30 -40
  80. package/dist/automation/actions/interaction/press/pressAnyKeyNTimes.js +8 -1
  81. package/dist/automation/actions/interaction/press/pressEnterKey.js +1 -1
  82. package/dist/automation/actions/interaction/set/MOB_SetContext.d.ts +2 -0
  83. package/dist/automation/actions/interaction/set/MOB_SetContext.js +17 -0
  84. package/dist/automation/actions/interaction/set/MOB_SetEmulatorPowerPercentage.d.ts +2 -0
  85. package/dist/automation/actions/interaction/set/MOB_SetEmulatorPowerPercentage.js +24 -0
  86. package/dist/automation/actions/interaction/set/setClipBoardText.js +1 -0
  87. package/dist/automation/actions/interaction/verify/MOB_VerifyBatteryLevel.d.ts +2 -0
  88. package/dist/automation/actions/interaction/verify/MOB_VerifyBatteryLevel.js +22 -0
  89. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOff.d.ts +2 -0
  90. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOff.js +17 -0
  91. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOn.d.ts +2 -0
  92. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOn.js +17 -0
  93. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAppIsClosed.d.ts +2 -0
  94. package/dist/automation/actions/interaction/verify/MOB_VerifyIfAppIsClosed.js +17 -0
  95. package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsLocked.d.ts +2 -0
  96. package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsLocked.js +16 -0
  97. package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsUnlocked.d.ts +2 -0
  98. package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsUnlocked.js +17 -0
  99. package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOff.d.ts +2 -0
  100. package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOff.js +17 -0
  101. package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOn.d.ts +2 -0
  102. package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOn.js +17 -0
  103. package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsHidden.d.ts +2 -0
  104. package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsHidden.js +17 -0
  105. package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsShown.d.ts +2 -0
  106. package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsShown.js +16 -0
  107. package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOff.d.ts +2 -0
  108. package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOff.js +17 -0
  109. package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOn.d.ts +2 -0
  110. package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOn.js +17 -0
  111. package/dist/automation/actions/interaction/verify/VerifyAttributeValue.js +92 -28
  112. package/dist/automation/actions/interaction/verify/VerifyHeightOfWebElement.js +2 -1
  113. package/dist/automation/actions/interaction/verify/VerifyListBoxOptionsAreSorted.js +0 -2
  114. package/dist/automation/actions/interaction/verify/VerifyPartialAttributeValue.js +98 -37
  115. package/dist/automation/actions/interaction/verify/verifypartialtext.js +1 -1
  116. package/dist/automation/actions/interaction/verify/verifytext.js +5 -2
  117. package/dist/automation/actions/interaction/wait/MOB_WaitTillAllElementsAreInvisible.ts.d.ts +2 -0
  118. package/dist/automation/actions/interaction/wait/MOB_WaitTillAllElementsAreInvisible.ts.js +25 -0
  119. package/dist/automation/actions/interaction/wait/MOB_WaitTillAttributeOfElementContainsString.d.ts +2 -0
  120. package/dist/automation/actions/interaction/wait/MOB_WaitTillAttributeOfElementContainsString.js +27 -0
  121. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsEnabled.d.ts +2 -0
  122. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsEnabled.js +22 -0
  123. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsInvisible.d.ts +2 -0
  124. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsInvisible.js +22 -0
  125. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsSelected.d.ts +2 -0
  126. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsSelected.js +22 -0
  127. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsVisible.d.ts +2 -0
  128. package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsVisible.js +22 -0
  129. package/dist/automation/actions/interaction/wait/MOB_WaitTillStalenessOfElement.d.ts +2 -0
  130. package/dist/automation/actions/interaction/wait/MOB_WaitTillStalenessOfElement.js +22 -0
  131. package/dist/automation/actions/interaction/wait/waitTillAttributeOfElementIsString.js +1 -1
  132. package/dist/automation/actions/interaction/wait/waitTillPresenceOfAllElements.js +12 -2
  133. package/dist/automation/actions/interface/getActionInterface.d.ts +174 -0
  134. package/dist/automation/actions/interface/setActionInterface.d.ts +12 -0
  135. package/dist/automation/actions/interface/verifyActionInterface.d.ts +62 -0
  136. package/dist/automation/actions/interface/waitActionInterface.d.ts +55 -0
  137. package/dist/core/constants/supportedActions.js +89 -8
  138. package/dist/core/interfaces/actionInterface.d.ts +53 -0
  139. package/dist/core/main/actionHandlerFactory.js +162 -0
  140. package/dist/core/main/executionContext.js +1 -1
  141. package/dist/core/main/runAutomationScript.js +3 -3
  142. package/dist/domAnalysis/searchBest.js +4 -2
  143. package/dist/fireflinkData/fireflinkScript/scriptGenrationData.d.ts +1 -2
  144. package/dist/fireflinkData/fireflinkScript/scriptGenrationData.js +6 -7
  145. package/package.json +1 -1
  146. package/dist/service/scriptRunner.service.d.ts +0 -10
  147. package/dist/service/scriptRunner.service.js +0 -36
  148. package/dist/utils/mobileXpath/findXpathFromIndex.d.ts +0 -2
  149. package/dist/utils/mobileXpath/findXpathFromIndex.js +0 -61
  150. package/dist/utils/mobileXpath/findXpathFromIndexInterface.d.ts +0 -4
  151. package/dist/utils/mobileXpath/findXpathFromIndexInterface.js +0 -1
@@ -0,0 +1,16 @@
1
+ export const MOB_VerifyIfDeviceIsLocked = async (args) => {
2
+ try {
3
+ const _locked = await args.driver.isLocked();
4
+ args.scriptDataAppender.add(async () => {
5
+ return {
6
+ nlpName: "MOB_VerifyIfDeviceIsLocked",
7
+ stepInputs: [],
8
+ elementsData: []
9
+ };
10
+ });
11
+ }
12
+ catch (error) {
13
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfDeviceIsLocked");
14
+ throw new Error("MOB_VerifyIfDeviceIsLocked action failed", { cause: error });
15
+ }
16
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfDeviceIsUnlockedInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfDeviceIsUnlocked: (args: MOB_VerifyIfDeviceIsUnlockedInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfDeviceIsUnlocked = async (args) => {
2
+ try {
3
+ const locked = await args.driver.isLocked();
4
+ const _unlocked = !locked;
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfDeviceIsUnlocked",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfDeviceIsUnlocked");
15
+ throw new Error("MOB_VerifyIfDeviceIsUnlocked action failed", { cause: error });
16
+ }
17
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfGpsOffInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfGpsOff: (args: MOB_VerifyIfGpsOffInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfGpsOff = async (args) => {
2
+ try {
3
+ const location = await args.driver.getGeoLocation();
4
+ const _gpsOff = !location;
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfGpsOff",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfGpsOff");
15
+ throw new Error("MOB_VerifyIfGpsOff action failed", { cause: error });
16
+ }
17
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfGpsOnInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfGpsOn: (args: MOB_VerifyIfGpsOnInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfGpsOn = async (args) => {
2
+ try {
3
+ const location = await args.driver.getGeoLocation();
4
+ const _gpsOn = !!location;
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfGpsOn",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfGpsOn");
15
+ throw new Error("MOB_VerifyIfGpsOn action failed", { cause: error });
16
+ }
17
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfKeyboardIsHiddenInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfKeyboardIsHidden: (args: MOB_VerifyIfKeyboardIsHiddenInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfKeyboardIsHidden = async (args) => {
2
+ try {
3
+ const shown = await args.driver.isKeyboardShown();
4
+ const _hidden = !shown;
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfKeyboardIsHidden",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfKeyboardIsHidden");
15
+ throw new Error("MOB_VerifyIfKeyboardIsHidden action failed", { cause: error });
16
+ }
17
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfKeyboardIsShownInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfKeyboardIsShown: (args: MOB_VerifyIfKeyboardIsShownInterface) => Promise<void>;
@@ -0,0 +1,16 @@
1
+ export const MOB_VerifyIfKeyboardIsShown = async (args) => {
2
+ try {
3
+ const _shown = await args.driver.isKeyboardShown();
4
+ args.scriptDataAppender.add(async () => {
5
+ return {
6
+ nlpName: "MOB_VerifyIfKeyboardIsShown",
7
+ stepInputs: [],
8
+ elementsData: []
9
+ };
10
+ });
11
+ }
12
+ catch (error) {
13
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfKeyboardIsShown");
14
+ throw new Error("MOB_VerifyIfKeyboardIsShown action failed", { cause: error });
15
+ }
16
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfWifiOffInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfWifiOff: (args: MOB_VerifyIfWifiOffInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfWifiOff = async (args) => {
2
+ try {
3
+ const connection = await args.driver.getNetworkConnection();
4
+ const _wifiOff = !(connection === 2 || connection === 6);
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfWifiOff",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfWifiOff");
15
+ throw new Error("MOB_VerifyIfWifiOff action failed", { cause: error });
16
+ }
17
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_VerifyIfWifiOnInterface } from "../../interface/verifyActionInterface";
2
+ export declare const MOB_VerifyIfWifiOn: (args: MOB_VerifyIfWifiOnInterface) => Promise<void>;
@@ -0,0 +1,17 @@
1
+ export const MOB_VerifyIfWifiOn = async (args) => {
2
+ try {
3
+ const connection = await args.driver.getNetworkConnection();
4
+ const _wifiOn = connection === 2 || connection === 6;
5
+ args.scriptDataAppender.add(async () => {
6
+ return {
7
+ nlpName: "MOB_VerifyIfWifiOn",
8
+ stepInputs: [],
9
+ elementsData: []
10
+ };
11
+ });
12
+ }
13
+ catch (error) {
14
+ args.scriptDataAppender.setErrorNLP("MOB_VerifyIfWifiOn");
15
+ throw new Error("MOB_VerifyIfWifiOn action failed", { cause: error });
16
+ }
17
+ };
@@ -1,28 +1,64 @@
1
1
  import { logger } from "../../../../utils/logger/logData.js";
2
2
  export async function verifyAttributeValue(args) {
3
3
  switch (args.platform) {
4
+ // ================= ANDROID =================
4
5
  case "android":
5
6
  try {
6
7
  const element = await args.driver.$(args.selector);
7
- const parts = args.value.split(",");
8
- const attrName = parts[0].trim();
9
- const expectedValue = parts[1].trim();
10
- const caseSensitive = false;
11
- const actualValue = (await element.getAttribute(attrName)) ||
12
- "";
13
- const isMatched = actualValue.toLowerCase() === expectedValue.toLowerCase();
14
- logger.info("Attribute value verification result:", { isMatched, actualValue, expectedValue });
15
- if (isMatched === false) {
16
- throw new Error(`Attribute value does not match. Expected: ${expectedValue}, Actual: ${actualValue}`);
8
+ if (!element) {
9
+ throw new Error("Element not found");
17
10
  }
11
+ // -------- SAFE PARSING --------
12
+ let attrName = "text"; // default for mobile
13
+ let expectedValue = "";
14
+ if (args.value && args.value.includes(",")) {
15
+ const parts = args.value.split(",");
16
+ attrName = parts[0]?.trim() || "text";
17
+ expectedValue = parts[1]?.trim() || "";
18
+ }
19
+ else {
20
+ expectedValue = args.value?.trim() || "";
21
+ }
22
+ // -------- GET ACTUAL VALUE --------
23
+ let actualValue = "";
24
+ switch (attrName.toLowerCase()) {
25
+ case "text":
26
+ actualValue = await element.getText();
27
+ break;
28
+ case "content-desc":
29
+ actualValue = await element.getAttribute("content-desc") || "";
30
+ break;
31
+ case "resource-id":
32
+ actualValue = await element.getAttribute("resource-id") || "";
33
+ break;
34
+ case "enabled":
35
+ actualValue = await element.getAttribute("enabled") || "";
36
+ break;
37
+ default:
38
+ actualValue = await element.getAttribute(attrName) || "";
39
+ }
40
+ // -------- MATCH LOGIC (FLEXIBLE) --------
41
+ const isMatched = actualValue
42
+ .toLowerCase()
43
+ .includes(expectedValue.toLowerCase());
44
+ logger.info("Attribute value verification result:", {
45
+ attrName,
46
+ expectedValue,
47
+ actualValue,
48
+ isMatched
49
+ });
50
+ if (!isMatched) {
51
+ throw new Error(`Attribute value mismatch. Expected to contain: "${expectedValue}", Actual: "${actualValue}"`);
52
+ }
53
+ // -------- APPENDER --------
18
54
  args.scriptDataAppender.add(async () => {
19
55
  return {
20
- nlpName: 'MOB_VerifyAttributeValue',
21
- stepInputs: [attrName, expectedValue, caseSensitive],
56
+ nlpName: "MOB_VerifyAttributeValue",
57
+ stepInputs: [attrName, expectedValue, false],
22
58
  elementsData: [{
23
59
  name: args.elementName,
24
60
  type: args.elementType,
25
- locators: [{ "xpath": args.selector }],
61
+ locators: [{ xpath: args.selector }],
26
62
  platform: args.platform
27
63
  }]
28
64
  };
@@ -30,30 +66,58 @@ export async function verifyAttributeValue(args) {
30
66
  }
31
67
  catch (error) {
32
68
  args.scriptDataAppender.setErrorNLP("MOB_VerifyAttributeValue");
33
- throw new Error(`VerifyAttributeValue action failed `, { cause: error });
69
+ throw new Error(`VerifyAttributeValue action failed`, { cause: error });
34
70
  }
35
71
  break;
72
+ // ================= WEB =================
36
73
  case "web":
37
74
  default:
38
75
  try {
39
76
  const element = await args.driver.$(args.selector);
40
- const parts = args.value.split(",");
41
- const attrName = parts[0].trim();
42
- const expectedValue = parts[1].trim();
43
- const caseSensitive = false;
44
- const actualValue = (await element.getAttribute(attrName)) ||
45
- (await element.getText()) ||
46
- "";
47
- const isMatched = actualValue.toLowerCase() === expectedValue.toLowerCase();
48
- logger.info("Attribute value verification result:", { isMatched, actualValue, expectedValue });
49
- if (isMatched === false) {
50
- throw new Error(`Attribute value does not match. Expected: ${expectedValue}, Actual: ${actualValue}`);
77
+ if (!element) {
78
+ throw new Error("Element not found");
79
+ }
80
+ // -------- SAFE PARSING --------
81
+ let attrName = "text";
82
+ let expectedValue = "";
83
+ if (args.value && args.value.includes(",")) {
84
+ const parts = args.value.split(",");
85
+ attrName = parts[0]?.trim() || "text";
86
+ expectedValue = parts[1]?.trim() || "";
87
+ }
88
+ else {
89
+ expectedValue = args.value?.trim() || "";
90
+ }
91
+ // -------- GET VALUE (ATTRIBUTE OR TEXT FALLBACK) --------
92
+ let actualValue = "";
93
+ if (attrName === "text") {
94
+ actualValue = await element.getText();
95
+ }
96
+ else {
97
+ actualValue =
98
+ (await element.getAttribute(attrName)) ||
99
+ (await element.getText()) ||
100
+ "";
101
+ }
102
+ // -------- MATCH LOGIC --------
103
+ const isMatched = actualValue
104
+ .toLowerCase()
105
+ .includes(expectedValue.toLowerCase());
106
+ logger.info("Attribute value verification result:", {
107
+ attrName,
108
+ expectedValue,
109
+ actualValue,
110
+ isMatched
111
+ });
112
+ if (!isMatched) {
113
+ throw new Error(`Attribute value mismatch. Expected to contain: "${expectedValue}", Actual: "${actualValue}"`);
51
114
  }
115
+ // -------- APPENDER --------
52
116
  args.scriptDataAppender.add(async () => {
53
117
  const ffElement = await args.elementGetter.getFireFlinkElement(args.pageDOM, `[ff-inspect="${args.fireflinkIndex}"]`);
54
118
  return {
55
- nlpName: 'VerifyAttributeValue',
56
- stepInputs: [attrName, expectedValue, caseSensitive],
119
+ nlpName: "VerifyAttributeValue",
120
+ stepInputs: [attrName, expectedValue, false],
57
121
  elementsData: [{
58
122
  name: args.elementName,
59
123
  type: args.elementType,
@@ -65,7 +129,7 @@ export async function verifyAttributeValue(args) {
65
129
  }
66
130
  catch (error) {
67
131
  args.scriptDataAppender.setErrorNLP("VerifyAttributeValue");
68
- throw new Error(`VerifyAttributeValue action failed `, { cause: error });
132
+ throw new Error(`VerifyAttributeValue action failed`, { cause: error });
69
133
  }
70
134
  break;
71
135
  }
@@ -4,8 +4,9 @@ export async function verifyHeightOfWebElement(args) {
4
4
  case "android":
5
5
  try {
6
6
  const element = await args.driver.$(args.selector);
7
- const expectedHeight = parseInt(args.value, 10);
7
+ const expectedHeight = Number(args.value);
8
8
  const size = await element.getSize();
9
+ logger.info(`Expected height :${expectedHeight}`);
9
10
  const isMatched = size.height === expectedHeight;
10
11
  logger.info("Height verification result:", {
11
12
  isMatched,
@@ -2,12 +2,10 @@ import { logger } from "../../../../utils/logger/logData.js";
2
2
  export async function verifyListBoxOptionsAreSorted(args) {
3
3
  try {
4
4
  const element = await args.driver.$(args.selector);
5
- // Get all <option> elements
6
5
  const options = await element.$$("option");
7
6
  if (!options || await options.length === 0) {
8
7
  logger.info("No dropdown options found.");
9
8
  }
10
- // Extract visible text safely (avoids Promise.all typing issue)
11
9
  const optionTexts = [];
12
10
  for (const option of options) {
13
11
  const text = await option.getText();
@@ -1,60 +1,121 @@
1
1
  import { logger } from "../../../../utils/logger/logData.js";
2
2
  export async function verifyPartialAttributeValue(args) {
3
3
  switch (args.platform) {
4
+ // ================= ANDROID =================
4
5
  case "android":
5
6
  try {
6
7
  const element = await args.driver.$(args.selector);
7
- const parts = args.value.split(",");
8
- const attrName = parts[0].trim();
9
- const expectedValue = parts[1].trim();
10
- const caseSensitive = false;
11
- const actualValue = (await element.getAttribute(attrName)) ||
12
- (await element.getText()) ||
13
- "";
14
- const isMatched = actualValue.toLowerCase().includes(expectedValue.toLowerCase());
15
- logger.info("Attribute value verification result:", { isMatched, actualValue, expectedValue });
16
- if (isMatched === false) {
17
- throw new Error(`Attribute "${attrName}" value does not contain expected text. Expected to contain: "${expectedValue}", Actual: "${actualValue}"`);
8
+ if (!element) {
9
+ throw new Error("Element not found");
18
10
  }
19
- args.scriptDataAppender.add(async () => {
20
- return {
21
- nlpName: 'MOB_VerifyPartialAttributeValue',
22
- stepInputs: [attrName, expectedValue, caseSensitive],
23
- elementsData: [{
24
- name: args.elementName,
25
- type: args.elementType,
26
- locators: [{ "xpath": args.selector }],
27
- platform: args.platform
28
- }]
29
- };
11
+ // -------- SAFE PARSING --------
12
+ let attrName = "text";
13
+ let expectedValue = "";
14
+ if (args.value && args.value.includes(",")) {
15
+ const parts = args.value.split(",");
16
+ attrName = parts[0]?.trim() || "text";
17
+ expectedValue = parts[1]?.trim() || "";
18
+ }
19
+ else {
20
+ expectedValue = args.value?.trim() || "";
21
+ }
22
+ // -------- GET VALUE --------
23
+ let actualValue = "";
24
+ switch (attrName.toLowerCase()) {
25
+ case "text":
26
+ actualValue = await element.getText();
27
+ break;
28
+ case "content-desc":
29
+ actualValue = await element.getAttribute("content-desc") || "";
30
+ break;
31
+ case "resource-id":
32
+ actualValue = await element.getAttribute("resource-id") || "";
33
+ break;
34
+ default:
35
+ actualValue =
36
+ (await element.getAttribute(attrName)) ||
37
+ (await element.getText()) ||
38
+ "";
39
+ }
40
+ // -------- PARTIAL MATCH --------
41
+ const isMatched = actualValue
42
+ .toLowerCase()
43
+ .includes(expectedValue.toLowerCase());
44
+ logger.info("Partial attribute verification:", {
45
+ attrName,
46
+ expectedValue,
47
+ actualValue,
48
+ isMatched
30
49
  });
50
+ if (!isMatched) {
51
+ throw new Error(`Attribute "${attrName}" does not contain "${expectedValue}". Actual: "${actualValue}"`);
52
+ }
53
+ // -------- APPENDER --------
54
+ args.scriptDataAppender.add(async () => ({
55
+ nlpName: "MOB_VerifyPartialAttributeValue",
56
+ stepInputs: [attrName, expectedValue, false],
57
+ elementsData: [{
58
+ name: args.elementName,
59
+ type: args.elementType,
60
+ locators: [{ xpath: args.selector }],
61
+ platform: args.platform
62
+ }]
63
+ }));
31
64
  }
32
65
  catch (error) {
33
66
  args.scriptDataAppender.setErrorNLP("MOB_VerifyPartialAttributeValue");
34
- throw new Error(`VerifyPartialAttributeValue action failed `, { cause: error });
67
+ throw new Error(`VerifyPartialAttributeValue action failed`, { cause: error });
35
68
  }
36
69
  break;
70
+ // ================= WEB =================
37
71
  case "web":
38
72
  default:
39
73
  try {
40
74
  const element = await args.driver.$(args.selector);
41
- const parts = args.value.split(",");
42
- const attrName = parts[0].trim();
43
- const expectedValue = parts[1].trim();
44
- const caseSensitive = false;
45
- const actualValue = (await element.getAttribute(attrName)) ||
46
- (await element.getText()) ||
47
- "";
48
- const isMatched = actualValue.toLowerCase().includes(expectedValue.toLowerCase());
49
- logger.info("Attribute value verification result:", { isMatched, actualValue, expectedValue });
50
- if (isMatched === false) {
51
- throw new Error(`Attribute "${attrName}" value does not contain expected text. Expected to contain: "${expectedValue}", Actual: "${actualValue}"`);
75
+ if (!element) {
76
+ throw new Error("Element not found");
77
+ }
78
+ // -------- SAFE PARSING --------
79
+ let attrName = "text";
80
+ let expectedValue = "";
81
+ if (args.value && args.value.includes(",")) {
82
+ const parts = args.value.split(",");
83
+ attrName = parts[0]?.trim() || "text";
84
+ expectedValue = parts[1]?.trim() || "";
85
+ }
86
+ else {
87
+ expectedValue = args.value?.trim() || "";
88
+ }
89
+ // -------- GET VALUE --------
90
+ let actualValue = "";
91
+ if (attrName === "text") {
92
+ actualValue = await element.getText();
93
+ }
94
+ else {
95
+ actualValue =
96
+ (await element.getAttribute(attrName)) ||
97
+ (await element.getText()) ||
98
+ "";
99
+ }
100
+ // -------- PARTIAL MATCH --------
101
+ const isMatched = actualValue
102
+ .toLowerCase()
103
+ .includes(expectedValue.toLowerCase());
104
+ logger.info("Partial attribute verification:", {
105
+ attrName,
106
+ expectedValue,
107
+ actualValue,
108
+ isMatched
109
+ });
110
+ if (!isMatched) {
111
+ throw new Error(`Attribute "${attrName}" does not contain "${expectedValue}". Actual: "${actualValue}"`);
52
112
  }
113
+ // -------- APPENDER --------
53
114
  args.scriptDataAppender.add(async () => {
54
115
  const ffElement = await args.elementGetter.getFireFlinkElement(args.pageDOM, `[ff-inspect="${args.fireflinkIndex}"]`);
55
116
  return {
56
- nlpName: 'VerifyPartialAttributeValue',
57
- stepInputs: [attrName, expectedValue, caseSensitive],
117
+ nlpName: "VerifyPartialAttributeValue",
118
+ stepInputs: [attrName, expectedValue, false],
58
119
  elementsData: [{
59
120
  name: args.elementName,
60
121
  type: args.elementType,
@@ -66,7 +127,7 @@ export async function verifyPartialAttributeValue(args) {
66
127
  }
67
128
  catch (error) {
68
129
  args.scriptDataAppender.setErrorNLP("VerifyPartialAttributeValue");
69
- throw new Error(`VerifyPartialAttributeValue action failed `, { cause: error });
130
+ throw new Error(`VerifyPartialAttributeValue action failed`, { cause: error });
70
131
  }
71
132
  break;
72
133
  }
@@ -6,7 +6,7 @@ export async function verifyPartialText(args) {
6
6
  const element = await args.driver.$(args.selector);
7
7
  const actual = await element.getAttribute("text");
8
8
  const expected = args.value;
9
- if (actual !== expected) {
9
+ if (!actual?.includes(expected)) {
10
10
  throw new Error(`Element does not contain the expected text. Expected to contain: "${args.value}", Actual: "${actual}"`);
11
11
  }
12
12
  const caseSensitive = false;
@@ -7,8 +7,11 @@ export async function verifyText(args) {
7
7
  const text = (await element.getAttribute("text")) || "";
8
8
  const contentDesc = (await element.getAttribute("content-desc")) || "";
9
9
  const expected = (args.value || "").toLowerCase();
10
- const isMatched = text.toLowerCase() === expected ||
11
- contentDesc.toLowerCase() === expected;
10
+ const isMatched = text.toLowerCase().trim() === expected.trim() ||
11
+ contentDesc.toLowerCase().trim() === expected.trim();
12
+ logger.info("text", { text });
13
+ logger.info("contentDesc", { contentDesc });
14
+ logger.info("expected", { expected });
12
15
  logger.info("result of verify text:", { isMatched });
13
16
  const caseSensitive = false; // Assuming case-insensitive for logging
14
17
  if (isMatched === false) {
@@ -0,0 +1,2 @@
1
+ import { MOB_WaitTillAllElementsAreInvisibleInterface } from "../../interface/waitActionInterface";
2
+ export declare const MOB_WaitTillAllElementsAreInvisible: (args: MOB_WaitTillAllElementsAreInvisibleInterface) => Promise<void>;
@@ -0,0 +1,25 @@
1
+ export const MOB_WaitTillAllElementsAreInvisible = async (args) => {
2
+ try {
3
+ const elements = await args.driver.$$("*");
4
+ for (const element of elements) {
5
+ try {
6
+ await element.waitForDisplayed({ reverse: true, timeout: 5000 });
7
+ }
8
+ catch {
9
+ // ignore if element cannot be waited on
10
+ continue;
11
+ }
12
+ }
13
+ args.scriptDataAppender.add(async () => {
14
+ return {
15
+ nlpName: "MOB_WaitTillAllElementsAreInvisible",
16
+ stepInputs: [],
17
+ elementsData: []
18
+ };
19
+ });
20
+ }
21
+ catch (error) {
22
+ args.scriptDataAppender.setErrorNLP("MOB_WaitTillAllElementsAreInvisible");
23
+ throw new Error("MOB_WaitTillAllElementsAreInvisible action failed", { cause: error });
24
+ }
25
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_WaitTillAttributeOfElementContainsStringInterface } from "../../interface/waitActionInterface";
2
+ export declare const MOB_WaitTillAttributeOfElementContainsString: (args: MOB_WaitTillAttributeOfElementContainsStringInterface) => Promise<void>;
@@ -0,0 +1,27 @@
1
+ export const MOB_WaitTillAttributeOfElementContainsString = async (args) => {
2
+ try {
3
+ const attributeName = args.attributeName || "text";
4
+ const expectedValue = args.value;
5
+ const element = await args.driver.$(args.selector);
6
+ await args.driver.waitUntil(async () => {
7
+ const attrValue = await element.getAttribute(attributeName);
8
+ return attrValue && attrValue.includes(expectedValue);
9
+ }, { timeout: 5000 });
10
+ args.scriptDataAppender.add(async () => {
11
+ return {
12
+ nlpName: "MOB_WaitTillAttributeOfElementContainsString",
13
+ stepInputs: [attributeName, expectedValue],
14
+ elementsData: [{
15
+ name: args.elementName,
16
+ type: args.elementType,
17
+ locators: [{ xpath: args.selector }],
18
+ platform: args.platform
19
+ }]
20
+ };
21
+ });
22
+ }
23
+ catch (error) {
24
+ args.scriptDataAppender.setErrorNLP("MOB_WaitTillAttributeOfElementContainsString");
25
+ throw new Error("MOB_WaitTillAttributeOfElementContainsString action failed", { cause: error });
26
+ }
27
+ };
@@ -0,0 +1,2 @@
1
+ import { MOB_WaitTillElementIsEnabledInterface } from "../../interface/waitActionInterface";
2
+ export declare const MOB_WaitTillElementIsEnabled: (args: MOB_WaitTillElementIsEnabledInterface) => Promise<void>;