ff-automationv2 2.2.27 → 2.2.29
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/dist/ai/llmcalls/llmAction.d.ts +9 -4
- package/dist/ai/llmcalls/llmAction.js +173 -37
- package/dist/ai/llmcalls/parseLlmOputput.js +18 -6
- package/dist/ai/llmprompts/promptRegistry.js +11 -0
- package/dist/ai/llmprompts/systemPrompts/actionExtractorPrompt.js +19 -10
- package/dist/ai/llmprompts/systemPrompts/combinedActionExtractorPrompt.js +7 -6
- package/dist/ai/llmprompts/systemPrompts/combinedActionExtractorPromptMob.js +14 -13
- package/dist/ai/llmprompts/systemPrompts/errorDescriptionPrompt.js +6 -4
- package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtactors.js +120 -62
- package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtractor_Mob.js +33 -28
- package/dist/ai/llmprompts/systemPrompts/getActionExtractorPrompt.js +18 -16
- package/dist/ai/llmprompts/systemPrompts/getActionExtractorPromptMob.js +13 -13
- package/dist/ai/llmprompts/systemPrompts/mobileKeywordExtractor.js +13 -11
- package/dist/ai/llmprompts/systemPrompts/userStoryToListPrompt.js +1 -1
- package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPrompt.js +20 -18
- package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPromptMob.js +9 -9
- package/dist/ai/llmprompts/systemPrompts/visionPrompt.js +4 -2
- package/dist/ai/llmprompts/systemPrompts/visionPromptMobile.js +1 -0
- package/dist/ai/llmprompts/systemPrompts/waitActionExtractorPrompt.js +10 -9
- package/dist/ai/llmprompts/systemPrompts/waitActionExtractorPromptMob.js +8 -7
- package/dist/ai/llmprompts/userPrompts/userPrompt.js +7 -8
- package/dist/automation/actions/executor.d.ts +38 -34
- package/dist/automation/actions/executor.js +280 -166
- package/dist/automation/actions/interaction/alert/clickCancelOnAlertPopup.js +4 -4
- package/dist/automation/actions/interaction/alert/clickOkOnAlertPopup.js +4 -4
- package/dist/automation/actions/interaction/alert/enterDataToAlert.js +4 -3
- package/dist/automation/actions/interaction/alert/getTextPresentOnAlertPopup.js +4 -4
- package/dist/automation/actions/interaction/alert/verifyAlertPopUpMessageContainsString.js +4 -3
- package/dist/automation/actions/interaction/alert/verifyAlertPopupIsDisplayed.js +10 -4
- package/dist/automation/actions/interaction/alert/verifyTextPresentOnAlertPopup.js +4 -3
- package/dist/automation/actions/interaction/alert/waitTillAlertIsPresent.js +5 -5
- package/dist/automation/actions/interaction/clear/clear.js +33 -26
- package/dist/automation/actions/interaction/clear/clearAndEnter.js +33 -26
- package/dist/automation/actions/interaction/click/MOB_DoubleTapAtSpecifiedLocation.js +5 -6
- package/dist/automation/actions/interaction/click/click.js +57 -25
- package/dist/automation/actions/interaction/click/clickNtimes.js +29 -24
- package/dist/automation/actions/interaction/click/clickUsingJs.js +12 -12
- package/dist/automation/actions/interaction/click/doubleClick.js +32 -25
- package/dist/automation/actions/interaction/click/rightClick.js +18 -13
- package/dist/automation/actions/interaction/click/tapOnSpecifiedLocation.js +7 -5
- package/dist/automation/actions/interaction/click/waitAndClick.js +29 -27
- package/dist/automation/actions/interaction/dragAndDrop/dragAndDrop.js +2 -2
- package/dist/automation/actions/interaction/elementLessAction/MobCheckIfAppIsClosed.js +14 -9
- package/dist/automation/actions/interaction/elementLessAction/MobRunAppInBackgroundInterface.js +9 -9
- package/dist/automation/actions/interaction/elementlessActions/activateAppUsingAppPackage.d.ts +0 -3
- package/dist/automation/actions/interaction/elementlessActions/activateAppUsingAppPackage.js +8 -9
- package/dist/automation/actions/interaction/elementlessActions/installAPK.js +74 -33
- package/dist/automation/actions/interaction/elementlessActions/isAppInstalled.js +10 -8
- package/dist/automation/actions/interaction/elementlessActions/openAppWithApkFilePath.js +87 -68
- package/dist/automation/actions/interaction/elementlessActions/openMobileApplication.js +8 -6
- package/dist/automation/actions/interaction/elementlessActions/receiveMessageOnEmulator.js +4 -3
- package/dist/automation/actions/interaction/elementlessActions/terminateAppUsingAppPackage.js +8 -6
- package/dist/automation/actions/interaction/elementlessActions/uninstallAPK.js +76 -32
- package/dist/automation/actions/interaction/enterActions/EnterInputIntoElementFromClipBoardInterface_mob.js +17 -13
- package/dist/automation/actions/interaction/enterActions/enterInput.js +50 -30
- package/dist/automation/actions/interaction/enterActions/enterInputAndPress.js +32 -24
- package/dist/automation/actions/interaction/enterActions/enterUrl.js +22 -17
- package/dist/automation/actions/interaction/enterActions/enterusingJs.js +19 -13
- package/dist/automation/actions/interaction/enterActions/waitAndEnter.js +33 -26
- package/dist/automation/actions/interaction/find/MOB_FindElement.js +37 -21
- package/dist/automation/actions/interaction/find/findElements.js +49 -32
- package/dist/automation/actions/interaction/get/MOB_GetADBLogsForGivenAppPackage.js +5 -6
- package/dist/automation/actions/interaction/get/MOB_GetAllContexts.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetAllWindowHandles.js +8 -9
- package/dist/automation/actions/interaction/get/MOB_GetAltitude.js +20 -10
- package/dist/automation/actions/interaction/get/MOB_GetBatteryPercentage.js +7 -9
- package/dist/automation/actions/interaction/get/MOB_GetBatteryStatus.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetClipBoardText.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentActivity.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentAppPackage.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentContext.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceDate.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSettings.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceStatus.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSystemBars.js +5 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceTime.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentOrientation.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetCurrentSessionId.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetDeviceLocation.js +20 -9
- package/dist/automation/actions/interaction/get/MOB_GetDeviceName.js +7 -8
- package/dist/automation/actions/interaction/get/MOB_GetDeviceOsVersion.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetDeviceUdid.js +7 -8
- package/dist/automation/actions/interaction/get/MOB_GetHeightOfElement.js +12 -11
- package/dist/automation/actions/interaction/get/MOB_GetHeightOfScreen.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetHourFromCurrentDeviceTime.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetLatitude.js +20 -12
- package/dist/automation/actions/interaction/get/MOB_GetLongitude.js +20 -12
- package/dist/automation/actions/interaction/get/MOB_GetMinuteFromCurrentDeviceTime.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetSecondFromCurrentDeviceTime.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetSizeOfScreen.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetSupportedPerformanceDataTypes.js +4 -6
- package/dist/automation/actions/interaction/get/MOB_GetTextFromElementAndSetToClipBoard.js +11 -8
- package/dist/automation/actions/interaction/get/MOB_GetWidthOfElement.js +12 -11
- package/dist/automation/actions/interaction/get/MOB_GetWidthOfScreen.js +4 -6
- package/dist/automation/actions/interaction/get/browserWindowGetPosition.js +4 -4
- package/dist/automation/actions/interaction/get/getAllBrokenImages.js +4 -4
- package/dist/automation/actions/interaction/get/getAllBrokenLinkCount.js +4 -4
- package/dist/automation/actions/interaction/get/getAllBrokenLinks.js +5 -5
- package/dist/automation/actions/interaction/get/getAllConsoleErrors.js +4 -4
- package/dist/automation/actions/interaction/get/getAllConsoleInformation.js +5 -5
- package/dist/automation/actions/interaction/get/getAllConsoleLogs.js +5 -5
- package/dist/automation/actions/interaction/get/getAllConsoleWarnings.js +5 -5
- package/dist/automation/actions/interaction/get/getAllCookieNames.js +5 -5
- package/dist/automation/actions/interaction/get/getAllCookieValues.js +5 -5
- package/dist/automation/actions/interaction/get/getAllSelectedOptions.js +12 -12
- package/dist/automation/actions/interaction/get/getAllTheOptionsFromListBoxAsText.js +12 -12
- package/dist/automation/actions/interaction/get/getAllTheOptionsFromListBoxAsTextInSortedOrder.js +12 -12
- package/dist/automation/actions/interaction/get/getAllTheSelectedOptionsFromListBoxAsText.js +12 -12
- package/dist/automation/actions/interaction/get/getAllWindowHandles.js +5 -5
- package/dist/automation/actions/interaction/get/getAttribute.js +27 -25
- package/dist/automation/actions/interaction/get/getAudioCurrentPlaybackRate.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioCurrentSeekTime.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioCurrentVolume.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioDecodedByte.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioDefaultPlaybackRate.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioMediaLength.js +12 -12
- package/dist/automation/actions/interaction/get/getAudioMediaSource.js +12 -12
- package/dist/automation/actions/interaction/get/getBestPracticesScore.js +4 -3
- package/dist/automation/actions/interaction/get/getBrowserCount.js +4 -4
- package/dist/automation/actions/interaction/get/getBrowserVersion.js +4 -4
- package/dist/automation/actions/interaction/get/getCapabilityNames.js +4 -4
- package/dist/automation/actions/interaction/get/getClipBoardText.js +4 -4
- package/dist/automation/actions/interaction/get/getCollectiveApiResponseTime.js +5 -4
- package/dist/automation/actions/interaction/get/getCollectiveApiStatusCode.js +5 -4
- package/dist/automation/actions/interaction/get/getCssValue.js +12 -12
- package/dist/automation/actions/interaction/get/getCurrentDayOfTheWeek.js +4 -4
- package/dist/automation/actions/interaction/get/getCurrentSecondsFromCurrentSystemTime.js +5 -5
- package/dist/automation/actions/interaction/get/getCurrentSystemDate.js +4 -4
- package/dist/automation/actions/interaction/get/getCurrentSystemDay.js +5 -5
- package/dist/automation/actions/interaction/get/getCurrentSystemMonth.js +5 -5
- package/dist/automation/actions/interaction/get/getCurrentSystemTime.js +5 -5
- package/dist/automation/actions/interaction/get/getCurrentSystemYear.js +5 -5
- package/dist/automation/actions/interaction/get/getCurrentWindowHandle.js +9 -10
- package/dist/automation/actions/interaction/get/getDataFromApiRequestHeaderForJsonPath.js +5 -4
- package/dist/automation/actions/interaction/get/getDataFromApiResponseForJsonPath.js +5 -4
- package/dist/automation/actions/interaction/get/getDateWithGivenFormat.js +5 -4
- package/dist/automation/actions/interaction/get/getDriverInstance.js +12 -11
- package/dist/automation/actions/interaction/get/getFirstContentfulPaint.js +5 -5
- package/dist/automation/actions/interaction/get/getFirstSelectedOption.js +12 -12
- package/dist/automation/actions/interaction/get/getFullPaintTime.js +5 -5
- package/dist/automation/actions/interaction/get/getHTMLCodeOfPage.js +4 -4
- package/dist/automation/actions/interaction/get/getHeightOfBrowserWindow.js +4 -4
- package/dist/automation/actions/interaction/get/getHeightOfWebElement.js +12 -12
- package/dist/automation/actions/interaction/get/getHourFromCurrentSystemTime.js +4 -4
- package/dist/automation/actions/interaction/get/getImplicitTimeOut.js +11 -10
- package/dist/automation/actions/interaction/get/getLargestContentfulPaint.js +4 -4
- package/dist/automation/actions/interaction/get/getListBoxSize.js +12 -12
- package/dist/automation/actions/interaction/get/getListOfElementsFromLocatorTypeLocatorValue.js +90 -44
- package/dist/automation/actions/interaction/get/getLocation.js +32 -31
- package/dist/automation/actions/interaction/get/getMinuteFromCurrentSystemTime.js +4 -4
- package/dist/automation/actions/interaction/get/getNetworkRouteTime.js +4 -4
- package/dist/automation/actions/interaction/get/getNumberOfBrokenImages.js +4 -4
- package/dist/automation/actions/interaction/get/getNumberOfLinksPresentInCurrentPage.js +4 -4
- package/dist/automation/actions/interaction/get/getNumberOfWorkingLinksFromCurrentPage.js +4 -4
- package/dist/automation/actions/interaction/get/getOptions.js +12 -12
- package/dist/automation/actions/interaction/get/getPageTitle.js +5 -5
- package/dist/automation/actions/interaction/get/getPerformanceMetrics.js +5 -5
- package/dist/automation/actions/interaction/get/getPwaScore.js +5 -4
- package/dist/automation/actions/interaction/get/getRect.js +26 -23
- package/dist/automation/actions/interaction/get/getScreenshot.js +12 -18
- package/dist/automation/actions/interaction/get/getScreenshotAs.js +27 -32
- package/dist/automation/actions/interaction/get/getSeoScore.js +5 -4
- package/dist/automation/actions/interaction/get/getSingleApiRequestPayload.js +7 -6
- package/dist/automation/actions/interaction/get/getSingleApiResponse.js +12 -14
- package/dist/automation/actions/interaction/get/getSingleApiResponseTime.js +13 -13
- package/dist/automation/actions/interaction/get/getSingleApiStatusCode.d.ts +1 -1
- package/dist/automation/actions/interaction/get/getSingleApiStatusCode.js +21 -17
- package/dist/automation/actions/interaction/get/getSize.js +26 -24
- package/dist/automation/actions/interaction/get/getSizeOfBrowserWindow.js +5 -5
- package/dist/automation/actions/interaction/get/getStringDataFromLocalFile.js +11 -13
- package/dist/automation/actions/interaction/get/getSystemProperty.js +7 -33
- package/dist/automation/actions/interaction/get/getTagName.js +26 -24
- package/dist/automation/actions/interaction/get/getText.js +28 -25
- package/dist/automation/actions/interaction/get/getTheFirstSelectedOptionFromListBoxAsText.js +12 -12
- package/dist/automation/actions/interaction/get/getTotalNumberOfCookies.js +5 -5
- package/dist/automation/actions/interaction/get/getTunnelIdentifier.js +5 -4
- package/dist/automation/actions/interaction/get/getURLPresentInAddressBar.js +5 -5
- package/dist/automation/actions/interaction/get/getUserHomeDirectory.js +5 -5
- package/dist/automation/actions/interaction/get/getValueByCookieName.js +7 -11
- package/dist/automation/actions/interaction/get/getValueFromLocalStorage.js +7 -10
- package/dist/automation/actions/interaction/get/getValueOfSystemVariable.js +8 -6
- package/dist/automation/actions/interaction/get/getVideoCurrentPlaybackRate.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoCurrentSeekTime.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoCurrentVolume.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoDecodedByte.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoDefaultPlaybackRate.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoMediaLength.js +12 -12
- package/dist/automation/actions/interaction/get/getVideoMediaSource.js +12 -12
- package/dist/automation/actions/interaction/get/getWidthOfBrowser.js +5 -5
- package/dist/automation/actions/interaction/get/getWidthOfWebElement.js +12 -12
- package/dist/automation/actions/interaction/get/getWorkingLinksFromCurrentPage.js +5 -5
- package/dist/automation/actions/interaction/get/getWrappedElement.js +12 -12
- package/dist/automation/actions/interaction/get/getWrappedOptionFromListBoxAsText.js +14 -14
- package/dist/automation/actions/interaction/get/getXLocationOfBrowserWindow.js +5 -4
- package/dist/automation/actions/interaction/get/getXLocationOfWebElement.js +26 -24
- package/dist/automation/actions/interaction/get/getYLocationOfBrowserWindow.js +5 -5
- package/dist/automation/actions/interaction/get/getYLocationOfWebElement.js +26 -24
- package/dist/automation/actions/interaction/iframe/switchToDefaultContent.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOff.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/AirplaneModeSwitchOn.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/Break.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/Continue.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOff.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/GpsSwitchOn.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/HideKeyboard.js +13 -7
- package/dist/automation/actions/interaction/inputlessActions/LockDevice.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/OpenChromeBrowser.js +18 -6
- package/dist/automation/actions/interaction/inputlessActions/OpenNotification.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/ResetApp.js +14 -7
- package/dist/automation/actions/interaction/inputlessActions/RestartCurrentDevice.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsLandscape.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/SetDeviceOrientationAsPortrait.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOff.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/SetEmulatorPowerStateOn.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOff.js +5 -5
- package/dist/automation/actions/interaction/inputlessActions/WifiSwitchOn.js +5 -5
- package/dist/automation/actions/interaction/maximize/maximize.js +5 -5
- package/dist/automation/actions/interaction/maximize/minimize.js +5 -5
- package/dist/automation/actions/interaction/mouse/mouseClickOnCurrentCursorNTImes.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/mouseClickOnCurrentCursorNTImes.js +31 -0
- package/dist/automation/actions/interaction/mouse/mouseClickOnCurrentCursorPoint.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/mouseClickOnCurrentCursorPoint.js +27 -0
- package/dist/automation/actions/interaction/mouse/mouseDoubleClickAtCursorPoint.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/mouseDoubleClickAtCursorPoint.js +31 -0
- package/dist/automation/actions/interaction/mouse/mouseHover.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/mouseHover.js +36 -0
- package/dist/automation/actions/interaction/mouse/mouseReleaseLeftMouseButton.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/mouseReleaseLeftMouseButton.js +42 -0
- package/dist/automation/actions/interaction/mouse/pressAndHold.d.ts +2 -0
- package/dist/automation/actions/interaction/mouse/pressAndHold.js +47 -0
- package/dist/automation/actions/interaction/navigation/goBack.js +5 -5
- package/dist/automation/actions/interaction/navigation/navigate.js +5 -4
- package/dist/automation/actions/interaction/navigation/refresh.js +5 -5
- package/dist/automation/actions/interaction/pinch/PinchInByPercentMob.js +12 -13
- package/dist/automation/actions/interaction/pinch/PinchOutByPercentMob.js +12 -11
- package/dist/automation/actions/interaction/press/longPress.js +15 -11
- package/dist/automation/actions/interaction/press/mobPressBackKey.js +4 -6
- package/dist/automation/actions/interaction/press/mobPressBackSpaceKey.js +12 -8
- package/dist/automation/actions/interaction/press/mobPressSpaceKey.js +12 -8
- package/dist/automation/actions/interaction/press/pressAnyKey.js +25 -16
- package/dist/automation/actions/interaction/press/pressAnyKeyNTimes.js +23 -14
- package/dist/automation/actions/interaction/press/pressEnterKey.js +21 -14
- package/dist/automation/actions/interaction/press/pressHomeKey.js +16 -9
- package/dist/automation/actions/interaction/scroll/scrollHorizontallyTillElementIsVisible.js +20 -15
- package/dist/automation/actions/interaction/scroll/scrollPageToSpecificLocation.js +8 -7
- package/dist/automation/actions/interaction/scroll/scrollToElement.js +18 -13
- package/dist/automation/actions/interaction/scroll/scrollVerticallyTillElementIsVisible.js +20 -15
- package/dist/automation/actions/interaction/set/MOB_SetContext.js +5 -6
- package/dist/automation/actions/interaction/set/MOB_SetEmulatorPowerPercentage.js +5 -6
- package/dist/automation/actions/interaction/set/setClipBoardText.js +13 -13
- package/dist/automation/actions/interaction/shadowDom/shadowDomClick.js +5 -4
- package/dist/automation/actions/interaction/shadowDom/shadowDomEnter.js +5 -4
- package/dist/automation/actions/interaction/shadowDom/shadowDomGetText.js +6 -5
- package/dist/automation/actions/interaction/shadowDom/shadowDomUpload.js +13 -9
- package/dist/automation/actions/interaction/shadowDom/shadowDomVerifyPartialText.js +6 -5
- package/dist/automation/actions/interaction/shadowDom/shadowDomVerifyText.js +6 -5
- package/dist/automation/actions/interaction/swipe/swipeDirectionNTimes.js +12 -10
- package/dist/automation/actions/interaction/swipe/swipeDownToElement.js +13 -10
- package/dist/automation/actions/interaction/swipe/swipeIos.d.ts +2 -0
- package/dist/automation/actions/interaction/swipe/swipeIos.js +52 -0
- package/dist/automation/actions/interaction/swipe/swipeLeftToElement.js +16 -11
- package/dist/automation/actions/interaction/swipe/swipeRightToElement.js +15 -10
- package/dist/automation/actions/interaction/swipe/swipeUpToElement.js +12 -10
- package/dist/automation/actions/interaction/swipe/swipeUpToElementForMWeb.js +16 -13
- package/dist/automation/actions/interaction/swipe/swipeUsingReferenceElement.js +19 -16
- package/dist/automation/actions/interaction/switch/switchToNewTabBasedOnTitle.js +7 -6
- package/dist/automation/actions/interaction/switch/switchToNewWindowBasedOnTitle.js +6 -5
- package/dist/automation/actions/interaction/switch/switchToParentWindow.js +6 -6
- package/dist/automation/actions/interaction/switch/switchToTabBasedOnUrl.js +6 -5
- package/dist/automation/actions/interaction/switch/switchToWindowBasedOnURL.js +5 -4
- package/dist/automation/actions/interaction/switch/switchToWindowIfTitleContainsString.js +7 -6
- package/dist/automation/actions/interaction/switch/switchToWindowIfUrlContainsString.js +6 -5
- package/dist/automation/actions/interaction/upload/uploadfile.js +21 -18
- package/dist/automation/actions/interaction/verify/MOB_VerifyBatteryLevel.js +8 -8
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOff.js +7 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfAirplaneModeOn.js +7 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfAppIsClosed.js +19 -10
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsLocked.js +7 -6
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfDeviceIsUnlocked.js +7 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOff.js +12 -8
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfGpsOn.js +12 -8
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsHidden.js +7 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfKeyboardIsShown.js +8 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOff.js +8 -7
- package/dist/automation/actions/interaction/verify/MOB_VerifyIfWifiOn.js +8 -7
- package/dist/automation/actions/interaction/verify/VerifyAccessibilityScore.js +8 -7
- package/dist/automation/actions/interaction/verify/VerifyAllBrokenImages.js +6 -6
- package/dist/automation/actions/interaction/verify/VerifyAllBrowserWindowsClosed.js +12 -10
- package/dist/automation/actions/interaction/verify/VerifyAllOptionsAreDeSelected.js +19 -19
- package/dist/automation/actions/interaction/verify/VerifyAllOptionsAreSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyAttributeValue.js +35 -53
- package/dist/automation/actions/interaction/verify/VerifyBestPracticesScore.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyBrowserHtmlCodeContainsString.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowHeight.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowTitleContainsString.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowTitleIsString.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowUrlContainsExpectedUrl.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowUrlIsString.js +5 -4
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowWidth.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowXLocation.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyBrowserWindowYLocation.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyCheckBoxIsNotSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyCheckBoxIsSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyCssAttributeValue.js +20 -14
- package/dist/automation/actions/interaction/verify/VerifyElementIsClickable.js +28 -25
- package/dist/automation/actions/interaction/verify/VerifyElementIsDisabled.js +29 -27
- package/dist/automation/actions/interaction/verify/VerifyElementIsDisplayed.js +26 -24
- package/dist/automation/actions/interaction/verify/VerifyElementIsEnabled.js +26 -24
- package/dist/automation/actions/interaction/verify/VerifyElementIsEnabledInSpecifiedTime.d.ts +2 -0
- package/dist/automation/actions/interaction/verify/VerifyElementIsEnabledInSpecifiedTime.js +84 -0
- package/dist/automation/actions/interaction/verify/VerifyElementIsNotDisplayed.js +51 -28
- package/dist/automation/actions/interaction/verify/VerifyElementIsSelected.js +39 -27
- package/dist/automation/actions/interaction/verify/VerifyElementIsSelectedInSpecifiedTime.d.ts +2 -0
- package/dist/automation/actions/interaction/verify/VerifyElementIsSelectedInSpecifiedTime.js +83 -0
- package/dist/automation/actions/interaction/verify/VerifyElementNotContainsText.js +23 -23
- package/dist/automation/actions/interaction/verify/VerifyHeightOfWebElement.js +23 -23
- package/dist/automation/actions/interaction/verify/VerifyHexCodeForGivenXYCoordinates.js +44 -14
- package/dist/automation/actions/interaction/verify/VerifyIfAllCookiesAreDeleted.js +4 -4
- package/dist/automation/actions/interaction/verify/VerifyIfAudioEnded.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfAudioIsMuted.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfAudioIsPaused.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfAudioIsPlaying.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfBrowserWindowIsClosed.js +8 -9
- package/dist/automation/actions/interaction/verify/VerifyIfCookieNameIsAdded.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyIfCookieNameIsDeleted.js +5 -4
- package/dist/automation/actions/interaction/verify/VerifyIfCookieObjectIsPresent.js +5 -5
- package/dist/automation/actions/interaction/verify/VerifyIfGivenOptionIsDuplicate.js +14 -14
- package/dist/automation/actions/interaction/verify/VerifyIfImageIsBroken.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyIfLinkIsBroken.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyIfLinkIsWorking.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyIfLinksAreBroken.js +5 -4
- package/dist/automation/actions/interaction/verify/VerifyIfLinksAreWorking.js +5 -4
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithIndexIsDeselectedInElement.js +13 -13
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithIndexIsSelectedInListBox.js +13 -13
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithTextIsDeselected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithValueIsDeselected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithValueIsSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfOptionWithVisibleTextIsSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfSpecifiedOptionIsSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfStatusCodeOfALinkIsStatusCode.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyIfStatusCodesOfLinks.js +30 -22
- package/dist/automation/actions/interaction/verify/VerifyIfVideoEnded.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfVideoIsMuted.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfVideoIsPaused.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfVideoIsPlaying.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfVideoPlayingInMute.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfVideoPlayingInUnmute.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyIfXAndYCoordinateOfElement.js +25 -23
- package/dist/automation/actions/interaction/verify/VerifyLinkNavigatesToTitle.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyListBoxOptionsAreSorted.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyNavigateURL.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyNumberOfElementsByTagName.js +7 -5
- package/dist/automation/actions/interaction/verify/VerifyNumberOfElementsByXpath.js +13 -7
- package/dist/automation/actions/interaction/verify/VerifyPartialAttributeValue.js +33 -42
- package/dist/automation/actions/interaction/verify/VerifyPartialTitleOfCurrentPage.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyPerformanceScore.js +7 -6
- package/dist/automation/actions/interaction/verify/VerifyPwaScore.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyRadioButtonIsNotSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyRadioButtonIsSelected.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifySeoScore.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyTagName.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyThatSpecifiedOptionIsNotSelected.js +20 -31
- package/dist/automation/actions/interaction/verify/VerifyTitleInAllPage.js +8 -7
- package/dist/automation/actions/interaction/verify/VerifyTitleOfCurrentPage.js +6 -5
- package/dist/automation/actions/interaction/verify/VerifyValueOfElementContainsString.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyValueOfElementIsCleared.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyValueOfElementIsString.js +12 -12
- package/dist/automation/actions/interaction/verify/VerifyWidthOfElement.js +23 -23
- package/dist/automation/actions/interaction/verify/VerifyXLocationOfElement.js +23 -23
- package/dist/automation/actions/interaction/verify/VerifyYLocationOfElement.js +26 -23
- package/dist/automation/actions/interaction/verify/checkIfElementIsDisplayed.js +26 -22
- package/dist/automation/actions/interaction/verify/verifyElementIsDisplayedWithinSpecifiedTime.d.ts +2 -0
- package/dist/automation/actions/interaction/verify/verifyElementIsDisplayedWithinSpecifiedTime.js +85 -0
- package/dist/automation/actions/interaction/verify/verifypartialtext.js +28 -25
- package/dist/automation/actions/interaction/verify/verifytext.js +30 -30
- package/dist/automation/actions/interaction/wait/MOB_WaitTillAllElementsAreInvisible.ts.js +5 -6
- package/dist/automation/actions/interaction/wait/MOB_WaitTillAttributeOfElementContainsString.js +17 -14
- package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsEnabled.js +12 -11
- package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsInvisible.js +14 -12
- package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsSelected.js +12 -11
- package/dist/automation/actions/interaction/wait/MOB_WaitTillElementIsVisible.js +15 -13
- package/dist/automation/actions/interaction/wait/MOB_WaitTillStalenessOfElement.js +12 -11
- package/dist/automation/actions/interaction/wait/wait.js +5 -4
- package/dist/automation/actions/interaction/wait/waitTillAttributeOfElementIsString.js +26 -24
- package/dist/automation/actions/interaction/wait/waitTillElementContainsText.js +26 -24
- package/dist/automation/actions/interaction/wait/waitTillElementHasText.js +26 -24
- package/dist/automation/actions/interaction/wait/waitTillElementIsClickable.js +28 -25
- package/dist/automation/actions/interaction/wait/waitTillPresenceOfAllElements.js +32 -22
- package/dist/automation/actions/interaction/wait/waitTillPresenceOfElement.js +26 -24
- package/dist/automation/actions/interface/FireFlinkResponseSchema.d.ts +148 -0
- package/dist/automation/actions/interface/FireFlinkResponseSchema.js +209 -0
- package/dist/automation/actions/interface/alertActionInterface.d.ts +1 -0
- package/dist/automation/actions/interface/findActionInterface.d.ts +3 -0
- package/dist/automation/actions/interface/getActionInterface.d.ts +76 -66
- package/dist/automation/actions/interface/interactionActionInterface.d.ts +5 -0
- package/dist/automation/actions/interface/mouseActionsinterface.d.ts +51 -0
- package/dist/automation/actions/interface/mouseActionsinterface.js +2 -0
- package/dist/automation/actions/interface/pinchActionInterface.d.ts +7 -0
- package/dist/automation/actions/interface/pressActionInterface.d.ts +4 -0
- package/dist/automation/actions/interface/swipeActionInterface.d.ts +25 -10
- package/dist/automation/actions/interface/verifyActionInterface.d.ts +36 -0
- package/dist/automation/actions/interface/waitActionInterface.d.ts +19 -0
- package/dist/automation/browserSession/initiateBrowserSession.d.ts +1 -1
- package/dist/automation/browserSession/initiateBrowserSession.js +4 -4
- package/dist/automation/cloudSession/initiateCloudSession.js +3 -1
- package/dist/automation/mobileSession/initiateMobileSession.d.ts +25 -1
- package/dist/automation/mobileSession/initiateMobileSession.js +23 -10
- package/dist/core/constants/allAction.js +2 -1
- package/dist/core/constants/supportedActions.d.ts +1 -0
- package/dist/core/constants/supportedActions.js +17 -9
- package/dist/core/interfaces/actionInterface.d.ts +34 -33
- package/dist/core/interfaces/errorInfoInterface.d.ts +1 -1
- package/dist/core/interfaces/fireflinkScriptPayloadInterface.d.ts +4 -1
- package/dist/core/interfaces/llmConfigurationInterface.d.ts +3 -2
- package/dist/core/interfaces/llmResponseInterface.d.ts +10 -10
- package/dist/core/interfaces/scriptGenrationDataInterface.d.ts +14 -0
- package/dist/core/interfaces/simplifyAndFlattenInterface.d.ts +5 -0
- package/dist/core/main/actionHandlerFactory.js +134 -64
- package/dist/core/main/executionContext.d.ts +1 -1
- package/dist/core/main/executionContext.js +1 -1
- package/dist/core/main/runAutomationScript.d.ts +1 -0
- package/dist/core/main/runAutomationScript.js +209 -90
- package/dist/core/main/stepProcessor.d.ts +2 -1
- package/dist/core/main/stepProcessor.js +2 -2
- package/dist/core/types/scriptTypesType.d.ts +1 -1
- package/dist/core/types/visionllmInputType.d.ts +4 -5
- package/dist/domAnalysis/getRelaventElements.d.ts +5 -1
- package/dist/domAnalysis/getRelaventElements.js +14 -5
- package/dist/domAnalysis/relativeElementsFromDom.d.ts +2 -1
- package/dist/domAnalysis/relativeElementsFromDom.js +66 -1
- package/dist/domAnalysis/searchBest.d.ts +5 -1
- package/dist/domAnalysis/searchBest.js +153 -50
- package/dist/domAnalysis/simplifyAndFlatten.d.ts +3 -2
- package/dist/domAnalysis/simplifyAndFlatten.js +109 -16
- package/dist/fireflinkData/fireflinkLocators/getListOfLocators.js +17 -11
- package/dist/fireflinkData/fireflinkLocators/{elementsFromHTML.d.ts → parser/getElementsFromHTML.d.ts} +3 -9
- package/dist/fireflinkData/fireflinkLocators/parser/getElementsFromHTML.js +557 -0
- package/dist/fireflinkData/fireflinkLocators/types/locator.d.ts +17 -0
- package/dist/fireflinkData/fireflinkLocators/types/locator.js +2 -0
- package/dist/fireflinkData/fireflinkLocators/utils/androidSelector.d.ts +2 -0
- package/dist/fireflinkData/fireflinkLocators/utils/androidSelector.js +31 -0
- package/dist/fireflinkData/fireflinkLocators/utils/cssSelector.d.ts +19 -0
- package/dist/fireflinkData/fireflinkLocators/utils/cssSelector.js +192 -0
- package/dist/fireflinkData/fireflinkLocators/utils/iosSelector.d.ts +2 -0
- package/dist/fireflinkData/fireflinkLocators/utils/iosSelector.js +159 -0
- package/dist/fireflinkData/fireflinkLocators/utils/referenceXpath.d.ts +35 -0
- package/dist/fireflinkData/fireflinkLocators/utils/referenceXpath.js +590 -0
- package/dist/fireflinkData/fireflinkLocators/utils/xpath.d.ts +38 -0
- package/dist/fireflinkData/fireflinkLocators/utils/xpath.js +1182 -0
- package/dist/fireflinkData/fireflinkLocators/utils/xpathHelpers.d.ts +137 -0
- package/dist/fireflinkData/fireflinkLocators/utils/xpathHelpers.js +1647 -0
- package/dist/fireflinkData/fireflinkScript/appendScriptData.d.ts +2 -0
- package/dist/fireflinkData/fireflinkScript/appendScriptData.js +51 -0
- package/dist/fireflinkData/fireflinkScript/scriptGenrationData.js +4 -0
- package/dist/imageAnalysisMobile/annotatedScreenshotMobile.d.ts +4 -0
- package/dist/imageAnalysisMobile/annotatedScreenshotMobile.js +115 -7
- package/dist/imageAnalysisWeb/annotateScreenshot.js +4 -4
- package/dist/imageAnalysisWeb/generateAnnotatedScreenshots.d.ts +4 -1
- package/dist/imageAnalysisWeb/generateAnnotatedScreenshots.js +15 -17
- package/dist/llmConfig/llmConfiguration.d.ts +4 -3
- package/dist/llmConfig/llmConfiguration.js +41 -18
- package/dist/service/fireflink.service.d.ts +1 -1
- package/dist/service/fireflink.service.js +4 -4
- package/dist/tests/poc.d.ts +0 -1
- package/dist/tests/poc.js +211 -226
- package/dist/tests/test.d.ts +1 -0
- package/dist/tests/test.js +26 -0
- package/dist/tests/test12.d.ts +1 -0
- package/dist/tests/test12.js +78 -73
- package/dist/tests/testss.d.ts +1 -0
- package/dist/tests/testss.js +23 -0
- package/dist/utils/DomExtraction/jsForAttributeInjection.d.ts +2 -0
- package/dist/utils/DomExtraction/jsForAttributeInjection.js +220 -8
- package/dist/utils/InstancesDetails/getInstancesInfo.d.ts +26 -1
- package/dist/utils/InstancesDetails/getInstancesInfo.js +11 -5
- package/dist/utils/browserCap/capability.d.ts +10 -10
- package/dist/utils/browserCap/capability.js +21 -16
- package/dist/utils/frameWorkDetector/frameWorkDetector.d.ts +6 -0
- package/dist/utils/frameWorkDetector/frameWorkDetector.js +43 -0
- package/dist/utils/frameWorkDetector/frameWorkDetectorInterface.d.ts +10 -0
- package/dist/utils/frameWorkDetector/frameWorkDetectorInterface.js +2 -0
- package/dist/utils/helpers/enterActionHelper.d.ts +1 -0
- package/dist/utils/helpers/enterActionHelper.js +2 -1
- package/dist/utils/helpers/platformContext.d.ts +3 -0
- package/dist/utils/helpers/platformContext.js +11 -0
- package/dist/utils/helpers/platformSyntax.d.ts +1 -0
- package/dist/utils/helpers/platformSyntax.js +17 -0
- package/dist/utils/helpers/sameActionsHelper.js +7 -2
- package/dist/utils/helpers/xpathcreation.d.ts +5 -1
- package/dist/utils/helpers/xpathcreation.js +43 -4
- package/dist/utils/iframesExtraction/findElementUsingFF.js +12 -9
- package/dist/utils/iframesExtraction/iframeInterface.d.ts +4 -0
- package/dist/utils/javascript/jsForShadowRoot.d.ts +1 -1
- package/dist/utils/javascript/jsForShadowRoot.js +4 -0
- package/dist/utils/javascript/jsForVision.d.ts +2 -2
- package/dist/utils/javascript/jsForVision.js +17 -5
- package/dist/utils/logger/logData.d.ts +1 -0
- package/dist/utils/logger/logData.js +19 -0
- package/dist/utils/sslConfig/apiCallPatch.d.ts +1 -0
- package/dist/utils/sslConfig/apiCallPatch.js +33 -0
- package/dist/utils/sslConfig/getSecureAgent.d.ts +2 -0
- package/dist/utils/sslConfig/getSecureAgent.js +30 -0
- package/dist/utils/swipe/domSearchHelper.d.ts +1 -1
- package/dist/utils/swipe/domSearchHelper.js +43 -42
- package/dist/utils/swipe/swipeMovement.js +28 -19
- package/package.json +21 -6
- package/dist/automation/actions/interaction/get/getAudioDimension.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getAudioDimension.js +0 -34
- package/dist/automation/actions/interaction/get/getAudioHeight.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getAudioHeight.js +0 -30
- package/dist/automation/actions/interaction/get/getAudioWidth.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getAudioWidth.js +0 -30
- package/dist/automation/actions/interaction/get/getVideoDimension.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getVideoDimension.js +0 -31
- package/dist/automation/actions/interaction/get/getVideoHeight.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getVideoHeight.js +0 -28
- package/dist/automation/actions/interaction/get/getVideoWidth.d.ts +0 -2
- package/dist/automation/actions/interaction/get/getVideoWidth.js +0 -28
- package/dist/fireflinkData/fireflinkLocators/elementsFromHTML.js +0 -514
- package/dist/fireflinkData/fireflinkLocators/typeList.d.ts +0 -1
- package/dist/fireflinkData/fireflinkLocators/typeList.js +0 -33
|
@@ -18,11 +18,20 @@ class DomProcessingEngine {
|
|
|
18
18
|
const structured = this.relationshipBuilder.build(searched);
|
|
19
19
|
return structured;
|
|
20
20
|
}
|
|
21
|
-
mobileProcess(request) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
async mobileProcess(request) {
|
|
22
|
+
let grouped;
|
|
23
|
+
if (request.platform.toLowerCase() === "ios") {
|
|
24
|
+
const { flatNodes, parentMap, runtimeElements } = await this.simplifier.simplifyIosDom(request.rawDom, request.driver);
|
|
25
|
+
logData_js_1.logger.saveJSON(flatNodes, `flat-dom-ios-${request.stepCount}`);
|
|
26
|
+
const { results, indexMap } = await this.searcher.searchBestIos(flatNodes, request.keywords);
|
|
27
|
+
grouped = await this.relationshipBuilder.buildGroupedResultsIos(results, flatNodes, indexMap, parentMap, runtimeElements);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const { flatNodes, parentMap } = await this.simplifier.simplifyAndroidDom(request.rawDom, request.stepAction, request.step);
|
|
31
|
+
logData_js_1.logger.saveJSON(flatNodes, `flat-dom-android-${request.stepCount}`);
|
|
32
|
+
const { results, indexMap } = await this.searcher.searchBestAndroid(flatNodes, request.keywords);
|
|
33
|
+
grouped = await this.relationshipBuilder.buildGroupedResultsAndroid(results, flatNodes, indexMap, parentMap);
|
|
34
|
+
}
|
|
26
35
|
return grouped;
|
|
27
36
|
}
|
|
28
37
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare class DomRelationshipBuilder {
|
|
2
2
|
build(nodes: any[]): any[];
|
|
3
|
-
|
|
3
|
+
buildGroupedResultsAndroid(results: Record<string, any[]>, nodes: any[], indexMap: Record<string, number>, parentMap: Map<Element, Element | null>): any[][];
|
|
4
|
+
buildGroupedResultsIos(results: Record<string, any[]>, nodes: any[], indexMap: Record<string, number>, parentMap: Map<any, any>, runtimeElements: Record<number, any>): any[][];
|
|
4
5
|
}
|
|
@@ -61,7 +61,7 @@ class DomRelationshipBuilder {
|
|
|
61
61
|
}
|
|
62
62
|
return structured;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
buildGroupedResultsAndroid(results, nodes, indexMap, parentMap) {
|
|
65
65
|
const groupedResults = [];
|
|
66
66
|
const usedNodes = new Set();
|
|
67
67
|
const slim = (n) => {
|
|
@@ -193,5 +193,70 @@ class DomRelationshipBuilder {
|
|
|
193
193
|
});
|
|
194
194
|
return finalResults;
|
|
195
195
|
}
|
|
196
|
+
buildGroupedResultsIos(results, nodes, indexMap, parentMap, runtimeElements) {
|
|
197
|
+
const grouped = new Map();
|
|
198
|
+
const slimIOS = (n) => {
|
|
199
|
+
const keys = [
|
|
200
|
+
"tag",
|
|
201
|
+
"FF-inspecter",
|
|
202
|
+
"value",
|
|
203
|
+
"name",
|
|
204
|
+
"label",
|
|
205
|
+
"class",
|
|
206
|
+
"pane-title",
|
|
207
|
+
"accessible",
|
|
208
|
+
"editable",
|
|
209
|
+
"enabled",
|
|
210
|
+
"traits"
|
|
211
|
+
];
|
|
212
|
+
const out = {};
|
|
213
|
+
for (const k of keys) {
|
|
214
|
+
if (k in n)
|
|
215
|
+
out[k] = n[k];
|
|
216
|
+
}
|
|
217
|
+
return out;
|
|
218
|
+
};
|
|
219
|
+
for (const matchedNodes of Object.values(results)) {
|
|
220
|
+
for (const node of matchedNodes) {
|
|
221
|
+
const ff = node["FF-inspecter"];
|
|
222
|
+
if (!ff || !(ff in indexMap))
|
|
223
|
+
continue;
|
|
224
|
+
const item = nodes[indexMap[ff]];
|
|
225
|
+
const element = runtimeElements[item.id];
|
|
226
|
+
const parent = parentMap.get(element);
|
|
227
|
+
const parentKey = parent ? parent : ff;
|
|
228
|
+
if (!grouped.has(parentKey)) {
|
|
229
|
+
grouped.set(parentKey, []);
|
|
230
|
+
}
|
|
231
|
+
grouped.get(parentKey).push(slimIOS(node));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const groupedResults = [];
|
|
235
|
+
for (const group of grouped.values()) {
|
|
236
|
+
const seenFF = new Set();
|
|
237
|
+
const uniqueGroup = [];
|
|
238
|
+
for (const node of group) {
|
|
239
|
+
const ff = node["FF-inspecter"];
|
|
240
|
+
if (!ff || seenFF.has(ff))
|
|
241
|
+
continue;
|
|
242
|
+
seenFF.add(ff);
|
|
243
|
+
uniqueGroup.push(node);
|
|
244
|
+
}
|
|
245
|
+
if (uniqueGroup.length) {
|
|
246
|
+
groupedResults.push(uniqueGroup);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const ffNumber = (node) => {
|
|
250
|
+
const ff = node["FF-inspecter"] || "";
|
|
251
|
+
const parts = ff.split("-");
|
|
252
|
+
return parseInt(parts[parts.length - 1]) || 0;
|
|
253
|
+
};
|
|
254
|
+
groupedResults.sort((a, b) => {
|
|
255
|
+
const minA = Math.min(...a.map(ffNumber));
|
|
256
|
+
const minB = Math.min(...b.map(ffNumber));
|
|
257
|
+
return minA - minB;
|
|
258
|
+
});
|
|
259
|
+
return groupedResults;
|
|
260
|
+
}
|
|
196
261
|
}
|
|
197
262
|
exports.DomRelationshipBuilder = DomRelationshipBuilder;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { FlatNode } from "../core/interfaces/simplifyAndFlattenInterface";
|
|
2
2
|
export declare class DomSearcher {
|
|
3
3
|
search(nodes: FlatNode[], keywords: string[] | string, topN?: number, threshold?: number): any[];
|
|
4
|
-
|
|
4
|
+
searchBestAndroid(nodes: FlatNode[], keywords: string[] | string, topN?: number, threshold?: number): {
|
|
5
|
+
results: Record<string, any[]>;
|
|
6
|
+
indexMap: Record<string, number>;
|
|
7
|
+
};
|
|
8
|
+
searchBestIos(nodes: any[], keywords: string[] | string, topN?: number, threshold?: number): {
|
|
5
9
|
results: Record<string, any[]>;
|
|
6
10
|
indexMap: Record<string, number>;
|
|
7
11
|
};
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DomSearcher = void 0;
|
|
4
|
+
const fastest_levenshtein_1 = require("fastest-levenshtein");
|
|
4
5
|
const fast_fuzzy_1 = require("fast-fuzzy");
|
|
6
|
+
// import { logger } from "../utils/logger/logData";
|
|
5
7
|
class DomSearcher {
|
|
6
8
|
search(nodes, keywords, topN = 20, threshold = 40) {
|
|
7
9
|
if (typeof keywords === "string") {
|
|
8
10
|
keywords = keywords.replace(/[\[\]]/g, "");
|
|
9
11
|
keywords = keywords.split(",").map(k => k.trim());
|
|
10
12
|
}
|
|
11
|
-
keywords = keywords.map(k =>
|
|
13
|
+
keywords = keywords.map(k => (typeof k === "string" ? k : String(k))
|
|
14
|
+
.replace(/[^a-zA-Z0-9\s]/g, " ")
|
|
15
|
+
.trim()
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.replace(/\s+/g, ""));
|
|
12
18
|
const ffNumber = (val) => {
|
|
13
19
|
if (!val)
|
|
14
20
|
return 0;
|
|
@@ -51,31 +57,23 @@ class DomSearcher {
|
|
|
51
57
|
}
|
|
52
58
|
};
|
|
53
59
|
const results = {};
|
|
60
|
+
const tempResults = {};
|
|
61
|
+
let hasAnyMatch = false;
|
|
54
62
|
for (const kw of keywords) {
|
|
55
63
|
const exact = [];
|
|
56
64
|
const strong = [];
|
|
57
|
-
const fuzzyList = [];
|
|
58
65
|
const tagMatches = [];
|
|
59
66
|
for (let i = 0; i < nodes.length; i++) {
|
|
60
67
|
const node = nodes[i].node;
|
|
61
68
|
const searchText = (node.search || "").toLowerCase();
|
|
62
69
|
const tagName = (node.tag || "").toLowerCase();
|
|
63
|
-
|
|
64
|
-
if (searchText == kw) {
|
|
70
|
+
if (searchText === kw) {
|
|
65
71
|
exact.push(i);
|
|
66
|
-
matched = true;
|
|
67
72
|
}
|
|
68
73
|
if (searchText.includes(kw)) {
|
|
69
74
|
strong.push(i);
|
|
70
|
-
matched = true;
|
|
71
75
|
}
|
|
72
|
-
if (
|
|
73
|
-
const score = (0, fast_fuzzy_1.fuzzy)(kw, searchText);
|
|
74
|
-
if (score >= threshold / 100) {
|
|
75
|
-
fuzzyList.push([score * 100, i]);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (kw == tagName || tagName.includes(kw)) {
|
|
76
|
+
if (kw === tagName || tagName.includes(kw)) {
|
|
79
77
|
tagMatches.push(i);
|
|
80
78
|
}
|
|
81
79
|
}
|
|
@@ -90,7 +88,48 @@ class DomSearcher {
|
|
|
90
88
|
if (collected.length >= topN * 4)
|
|
91
89
|
break;
|
|
92
90
|
}
|
|
93
|
-
|
|
91
|
+
for (const idx of tagMatches) {
|
|
92
|
+
addWithContext(idx, collected);
|
|
93
|
+
if (collected.length >= topN * 4)
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
if (collected.length > 0) {
|
|
97
|
+
hasAnyMatch = true;
|
|
98
|
+
}
|
|
99
|
+
tempResults[kw] = collected;
|
|
100
|
+
}
|
|
101
|
+
if (!hasAnyMatch) {
|
|
102
|
+
for (const kw of keywords) {
|
|
103
|
+
const fuzzyList = [];
|
|
104
|
+
const tokens1 = Array.from(new Set(kw.toLowerCase().split(/\s+/)));
|
|
105
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
106
|
+
const node = nodes[i].node;
|
|
107
|
+
const searchText = (node.search || "").toLowerCase();
|
|
108
|
+
const tokens2 = searchText.split(/\s+/);
|
|
109
|
+
// For each kw token, find best matching token in searchText
|
|
110
|
+
const tokenScores = tokens1.map(t1 => {
|
|
111
|
+
let best = 0;
|
|
112
|
+
for (const t2 of tokens2) {
|
|
113
|
+
if (t1 === t2) {
|
|
114
|
+
best = 100;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
const sim = (1 - (0, fastest_levenshtein_1.distance)(t1, t2) / Math.max(t1.length, t2.length))
|
|
118
|
+
* 100;
|
|
119
|
+
if (sim > best)
|
|
120
|
+
best = sim;
|
|
121
|
+
}
|
|
122
|
+
return best;
|
|
123
|
+
});
|
|
124
|
+
const allMatched = tokenScores.every(s => s >= 50);
|
|
125
|
+
if (!allMatched)
|
|
126
|
+
continue;
|
|
127
|
+
const score = tokenScores.reduce((a, b) => a + b, 0) / tokenScores.length;
|
|
128
|
+
if (score >= threshold) {
|
|
129
|
+
fuzzyList.push([score, i]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const collected = [];
|
|
94
133
|
fuzzyList
|
|
95
134
|
.sort((a, b) => b[0] - a[0])
|
|
96
135
|
.forEach(([_, idx]) => {
|
|
@@ -98,16 +137,14 @@ class DomSearcher {
|
|
|
98
137
|
addWithContext(idx, collected);
|
|
99
138
|
}
|
|
100
139
|
});
|
|
140
|
+
results[kw] = Array.from(new Set(collected)).map(i => nodes[i].node);
|
|
101
141
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
for (const kw of keywords) {
|
|
145
|
+
const uniqueIdx = Array.from(new Set(tempResults[kw]));
|
|
146
|
+
results[kw] = uniqueIdx.map(i => nodes[i].node);
|
|
108
147
|
}
|
|
109
|
-
const uniqueIdx = Array.from(new Set(collected));
|
|
110
|
-
results[kw] = uniqueIdx.map(i => nodes[i].node);
|
|
111
148
|
}
|
|
112
149
|
const seen = new Set();
|
|
113
150
|
const unique = Object.values(results)
|
|
@@ -122,13 +159,13 @@ class DomSearcher {
|
|
|
122
159
|
unique.sort((a, b) => ffNumber(a["FF-inspecter"]) - ffNumber(b["FF-inspecter"]));
|
|
123
160
|
return unique;
|
|
124
161
|
}
|
|
125
|
-
|
|
162
|
+
searchBestAndroid(nodes, keywords, topN = 5, threshold = 40) {
|
|
126
163
|
if (typeof keywords === "string") {
|
|
127
164
|
keywords = keywords.replace(/[\[\]]/g, "")
|
|
128
165
|
.split(",")
|
|
129
166
|
.map(k => k.trim());
|
|
130
167
|
}
|
|
131
|
-
keywords = keywords.map(k => String(k).toLowerCase());
|
|
168
|
+
keywords = keywords.map(k => String(k).toLowerCase().replace(/\s+/g, ""));
|
|
132
169
|
const slim = (n) => {
|
|
133
170
|
const allowed = [
|
|
134
171
|
"tag",
|
|
@@ -157,58 +194,124 @@ class DomSearcher {
|
|
|
157
194
|
indexMap[ff] = i;
|
|
158
195
|
});
|
|
159
196
|
const results = {};
|
|
197
|
+
const tempResults = {};
|
|
198
|
+
let hasAnyMatch = false;
|
|
160
199
|
for (const kw of keywords) {
|
|
161
200
|
const exact = [];
|
|
162
201
|
const strong = [];
|
|
163
|
-
const fuzzyMatches = [];
|
|
164
202
|
for (const item of nodes) {
|
|
165
203
|
const node = item.node;
|
|
166
204
|
const text = (item.search || "").toLowerCase();
|
|
167
|
-
const t = (node["text"] || "").toLowerCase();
|
|
168
|
-
const cd = (node["content-desc"] || "").toLowerCase();
|
|
169
|
-
const rid = (node["resource-id"] || "").toLowerCase();
|
|
170
205
|
const hint = (node["hint"] || "").toLowerCase();
|
|
171
206
|
// EXACT MATCH
|
|
172
|
-
if (text === kw ||
|
|
173
|
-
t === kw ||
|
|
174
|
-
cd === kw ||
|
|
175
|
-
rid === kw ||
|
|
176
|
-
hint === kw) {
|
|
207
|
+
if (text === kw || hint === kw) {
|
|
177
208
|
exact.push(node);
|
|
178
|
-
continue;
|
|
179
209
|
}
|
|
180
|
-
// STRONG
|
|
181
|
-
if (text.includes(kw) ||
|
|
182
|
-
t.includes(kw) ||
|
|
183
|
-
cd.includes(kw) ||
|
|
184
|
-
rid.includes(kw) ||
|
|
185
|
-
hint.includes(kw)) {
|
|
210
|
+
// STRONG MATCH
|
|
211
|
+
else if (text.includes(kw) || hint.includes(kw)) {
|
|
186
212
|
strong.push(node);
|
|
187
|
-
continue;
|
|
188
|
-
}
|
|
189
|
-
// FUZZY MATCH
|
|
190
|
-
const score = (0, fast_fuzzy_1.fuzzy)(kw, text) * 100;
|
|
191
|
-
if (score >= threshold) {
|
|
192
|
-
fuzzyMatches.push([score, node]);
|
|
193
213
|
}
|
|
194
214
|
}
|
|
195
|
-
let selected;
|
|
215
|
+
let selected = [];
|
|
196
216
|
if (exact.length) {
|
|
197
217
|
selected = exact.slice(0, topN);
|
|
198
218
|
}
|
|
199
219
|
else if (strong.length) {
|
|
200
220
|
selected = strong.slice(0, topN);
|
|
201
221
|
}
|
|
202
|
-
|
|
222
|
+
if (selected.length > 0) {
|
|
223
|
+
hasAnyMatch = true;
|
|
224
|
+
}
|
|
225
|
+
tempResults[kw] = selected;
|
|
226
|
+
}
|
|
227
|
+
if (!hasAnyMatch) {
|
|
228
|
+
for (const kw of keywords) {
|
|
229
|
+
const fuzzyMatches = [];
|
|
230
|
+
for (const item of nodes) {
|
|
231
|
+
const node = item.node;
|
|
232
|
+
const text = (item.search || "").toLowerCase();
|
|
233
|
+
const score = (0, fast_fuzzy_1.fuzzy)(kw, text) * 100;
|
|
234
|
+
if (score >= threshold) {
|
|
235
|
+
fuzzyMatches.push([score, node]);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
203
238
|
fuzzyMatches.sort((a, b) => b[0] - a[0]);
|
|
204
|
-
selected = fuzzyMatches
|
|
239
|
+
const selected = fuzzyMatches
|
|
240
|
+
.slice(0, topN)
|
|
241
|
+
.map(f => f[1]);
|
|
242
|
+
results[kw] = selected.map(slim);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
for (const kw of keywords) {
|
|
247
|
+
results[kw] = tempResults[kw].map(slim);
|
|
205
248
|
}
|
|
206
|
-
results[kw] = selected.map(slim);
|
|
207
249
|
}
|
|
208
250
|
return {
|
|
209
251
|
results,
|
|
210
252
|
indexMap
|
|
211
253
|
};
|
|
212
254
|
}
|
|
255
|
+
searchBestIos(nodes, keywords, topN = 5, threshold = 40) {
|
|
256
|
+
if (typeof keywords === "string") {
|
|
257
|
+
keywords = keywords.replace(/[\[\]]/g, "")
|
|
258
|
+
.split(",")
|
|
259
|
+
.map(k => k.trim());
|
|
260
|
+
}
|
|
261
|
+
keywords = keywords.map(k => k.toLowerCase().replace(/\s+/g, ""));
|
|
262
|
+
const slim = (n) => {
|
|
263
|
+
const allowed = [
|
|
264
|
+
"tag", "FF-inspecter", "value", "name",
|
|
265
|
+
"label", "class", "pane-title",
|
|
266
|
+
"accessible", "editable", "enabled", "traits"
|
|
267
|
+
];
|
|
268
|
+
const res = {};
|
|
269
|
+
for (const k of allowed)
|
|
270
|
+
if (k in n)
|
|
271
|
+
res[k] = n[k];
|
|
272
|
+
return res;
|
|
273
|
+
};
|
|
274
|
+
const indexMap = {};
|
|
275
|
+
nodes.forEach((item, i) => {
|
|
276
|
+
const ff = item.node?.["FF-inspecter"];
|
|
277
|
+
if (ff)
|
|
278
|
+
indexMap[ff] = i;
|
|
279
|
+
});
|
|
280
|
+
const results = {};
|
|
281
|
+
for (const kw of keywords) {
|
|
282
|
+
const exact = [];
|
|
283
|
+
const strong = [];
|
|
284
|
+
const fuzzyMatches = [];
|
|
285
|
+
for (const item of nodes) {
|
|
286
|
+
const node = item.node || {};
|
|
287
|
+
const text = (item.search || "").toLowerCase();
|
|
288
|
+
const value = (node["value"] || "").toLowerCase();
|
|
289
|
+
const name = (node["name"] || "").toLowerCase();
|
|
290
|
+
const label = (node["label"] || "").toLowerCase();
|
|
291
|
+
if (text === kw || value === kw || name === kw || label === kw) {
|
|
292
|
+
exact.push(node);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (text.includes(kw) || value.includes(kw) || name.includes(kw) || label.includes(kw)) {
|
|
296
|
+
strong.push(node);
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const score = (0, fast_fuzzy_1.fuzzy)(kw, text) * 100;
|
|
300
|
+
if (score >= threshold)
|
|
301
|
+
fuzzyMatches.push([score, node]);
|
|
302
|
+
}
|
|
303
|
+
let selected;
|
|
304
|
+
if (exact.length)
|
|
305
|
+
selected = exact.slice(0, topN);
|
|
306
|
+
else if (strong.length)
|
|
307
|
+
selected = strong.slice(0, topN);
|
|
308
|
+
else {
|
|
309
|
+
fuzzyMatches.sort((a, b) => b[0] - a[0]);
|
|
310
|
+
selected = fuzzyMatches.slice(0, topN).map(f => f[1]);
|
|
311
|
+
}
|
|
312
|
+
results[kw] = selected.map(slim);
|
|
313
|
+
}
|
|
314
|
+
return { results, indexMap };
|
|
315
|
+
}
|
|
213
316
|
}
|
|
214
317
|
exports.DomSearcher = DomSearcher;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { FlatNode, SimplifiedDomResult } from "../core/interfaces/simplifyAndFlattenInterface.js";
|
|
1
|
+
import { FlatNode, SimplifiedDomResult, SimplifiedDomResultIos } from "../core/interfaces/simplifyAndFlattenInterface.js";
|
|
2
2
|
export declare class DomSimplifier {
|
|
3
3
|
simplify(rawDom: string): FlatNode[];
|
|
4
|
-
|
|
4
|
+
simplifyAndroidDom(rawDom: string, stepAction: string, step: string): SimplifiedDomResult;
|
|
5
|
+
simplifyIosDom(rawDom: string, driver: WebdriverIO.Browser): Promise<SimplifiedDomResultIos>;
|
|
5
6
|
}
|
|
@@ -48,7 +48,7 @@ class DomSimplifier {
|
|
|
48
48
|
if (!tag || tag === "meta")
|
|
49
49
|
return;
|
|
50
50
|
const attribs = el.attribs ?? {};
|
|
51
|
-
if (tag !== "select" && tag !== "option") {
|
|
51
|
+
if (tag !== "select" && tag !== "option" && tag !== "mat-select" && tag !== "mat-option") {
|
|
52
52
|
if ((attribs["element-visibility"] === "hidden" ||
|
|
53
53
|
attribs["element-covered"] === "true")) {
|
|
54
54
|
return;
|
|
@@ -82,7 +82,7 @@ class DomSimplifier {
|
|
|
82
82
|
"style", "onclick", "onchange", "href",
|
|
83
83
|
"oninput", "onmouseover", "onfocus",
|
|
84
84
|
"ff-inspect", "element-visibility",
|
|
85
|
-
"element-pointer-events", "element-zindex", "element-covered"
|
|
85
|
+
"element-pointer-events", "element-zindex", "element-covered", "width", "height"
|
|
86
86
|
]);
|
|
87
87
|
Object.entries(attribs).forEach(([key, val]) => {
|
|
88
88
|
if (!EXCLUDED_ATTRS.has(key.toLowerCase())) {
|
|
@@ -94,7 +94,7 @@ class DomSimplifier {
|
|
|
94
94
|
// -----------------
|
|
95
95
|
const parts = new Set();
|
|
96
96
|
if (cleanText && cleanText.length <= 70) {
|
|
97
|
-
parts.add(cleanText.toLowerCase());
|
|
97
|
+
parts.add(cleanText.toLowerCase().replace(/\s+/g, ""));
|
|
98
98
|
}
|
|
99
99
|
const SEARCH_EXCLUDED = new Set([
|
|
100
100
|
"class", "style", "onclick", "onchange",
|
|
@@ -113,7 +113,7 @@ class DomSimplifier {
|
|
|
113
113
|
.trim()
|
|
114
114
|
.toLowerCase();
|
|
115
115
|
if (v)
|
|
116
|
-
parts.add(v);
|
|
116
|
+
parts.add(v.replace(/\s+/g, ""));
|
|
117
117
|
});
|
|
118
118
|
simplified["search"] = Array.from(parts).join(" ").trim();
|
|
119
119
|
flatNodes.push({
|
|
@@ -123,7 +123,7 @@ class DomSimplifier {
|
|
|
123
123
|
});
|
|
124
124
|
return flatNodes;
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
simplifyAndroidDom(rawDom, stepAction, step) {
|
|
127
127
|
const parser = new xmldom_1.DOMParser();
|
|
128
128
|
const xmlDoc = parser.parseFromString(rawDom, "text/xml");
|
|
129
129
|
const root = xmlDoc.documentElement;
|
|
@@ -181,7 +181,7 @@ class DomSimplifier {
|
|
|
181
181
|
}
|
|
182
182
|
const searchParts = [];
|
|
183
183
|
if (simplified.text && simplified.text.trim()) {
|
|
184
|
-
searchParts.push(simplified.text);
|
|
184
|
+
searchParts.push(simplified.text.replace(/\s+/g, ""));
|
|
185
185
|
}
|
|
186
186
|
for (const key of [
|
|
187
187
|
"content-desc",
|
|
@@ -191,33 +191,126 @@ class DomSimplifier {
|
|
|
191
191
|
]) {
|
|
192
192
|
const val = simplified[key];
|
|
193
193
|
if (val && typeof val === "string" && val.trim()) {
|
|
194
|
-
searchParts.push(val);
|
|
194
|
+
searchParts.push(val.replace(/\s+/g, ""));
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
simplified["search"] = searchParts.join(" ").trim().toLowerCase();
|
|
198
|
-
if (
|
|
198
|
+
if (stepAction === "verify" && (step.toLowerCase().includes("disable") || step.toLowerCase().includes("disabled"))) {
|
|
199
199
|
flatNodes.push({
|
|
200
200
|
node: simplified,
|
|
201
201
|
search: simplified["search"],
|
|
202
202
|
element: node._element
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
205
|
+
else {
|
|
206
|
+
if (!skipNode) {
|
|
207
|
+
flatNodes.push({
|
|
208
|
+
node: simplified,
|
|
209
|
+
search: simplified["search"],
|
|
210
|
+
element: node._element
|
|
211
|
+
});
|
|
210
212
|
}
|
|
211
213
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
+
for (const child of node.children || []) {
|
|
215
|
+
simplifyAndFlatten(child);
|
|
214
216
|
}
|
|
215
|
-
return simplified;
|
|
216
217
|
}
|
|
217
218
|
simplifyAndFlatten(xmlTree);
|
|
218
219
|
return {
|
|
219
220
|
flatNodes, parentMap
|
|
220
221
|
};
|
|
221
222
|
}
|
|
223
|
+
async simplifyIosDom(rawDom, driver) {
|
|
224
|
+
const { width: screenWidth, height: screenHeight } = await driver.getWindowSize();
|
|
225
|
+
const parser = new xmldom_1.DOMParser();
|
|
226
|
+
const xmlDoc = parser.parseFromString(rawDom, "text/xml");
|
|
227
|
+
const root = xmlDoc.documentElement;
|
|
228
|
+
const flatNodes = [];
|
|
229
|
+
const runtimeElements = {};
|
|
230
|
+
const parentMap = new Map();
|
|
231
|
+
function xmlToTree(elem) {
|
|
232
|
+
const children = [];
|
|
233
|
+
for (let i = 0; i < elem.childNodes.length; i++) {
|
|
234
|
+
const child = elem.childNodes[i];
|
|
235
|
+
if (child.nodeType === 1) {
|
|
236
|
+
const childElement = child;
|
|
237
|
+
// store parent relationship
|
|
238
|
+
parentMap.set(childElement, elem);
|
|
239
|
+
children.push(xmlToTree(childElement));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const attributes = {};
|
|
243
|
+
for (let i = 0; i < elem.attributes.length; i++) {
|
|
244
|
+
const attr = elem.attributes[i];
|
|
245
|
+
attributes[attr.name] = attr.value;
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
tag: elem.tagName,
|
|
249
|
+
attributes,
|
|
250
|
+
text: (elem.textContent || "").trim(),
|
|
251
|
+
_element: elem,
|
|
252
|
+
children
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
const xmlTree = xmlToTree(root);
|
|
256
|
+
function isOnScreen(x, y, w, h) {
|
|
257
|
+
return ((x + w) > 0 && x < screenWidth &&
|
|
258
|
+
(y + h) > 0 && y < screenHeight);
|
|
259
|
+
}
|
|
260
|
+
function simplifyAndFlatten(node) {
|
|
261
|
+
const attrs = node.attributes || {};
|
|
262
|
+
const x = parseInt(attrs["x"] || "0");
|
|
263
|
+
const y = parseInt(attrs["y"] || "0");
|
|
264
|
+
const w = parseInt(attrs["width"] || "0");
|
|
265
|
+
const h = parseInt(attrs["height"] || "0");
|
|
266
|
+
const skipNode = attrs["enabled"] === "false" ||
|
|
267
|
+
attrs["traits"] === "PlaysSound, KeyboardKey" ||
|
|
268
|
+
!isOnScreen(x, y, w, h);
|
|
269
|
+
const simplified = {};
|
|
270
|
+
simplified["tag"] = node.tag;
|
|
271
|
+
simplified["class"] = node.tag;
|
|
272
|
+
if (attrs["FF-inspecter"]) {
|
|
273
|
+
simplified["FF-inspecter"] = attrs["FF-inspecter"];
|
|
274
|
+
}
|
|
275
|
+
simplified["value"] = attrs["value"] || "";
|
|
276
|
+
const importantAttrs = [
|
|
277
|
+
"label", "name", "class", "accessible", "enabled", "traits"
|
|
278
|
+
];
|
|
279
|
+
for (const attr of importantAttrs) {
|
|
280
|
+
if (attrs[attr]) {
|
|
281
|
+
simplified[attr] = attrs[attr];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const searchParts = [];
|
|
285
|
+
if (simplified["value"]?.trim()) {
|
|
286
|
+
searchParts.push(simplified["value"].replace(/\s+/g, ""));
|
|
287
|
+
}
|
|
288
|
+
for (const key of ["name", "label"]) {
|
|
289
|
+
const val = simplified[key];
|
|
290
|
+
if (val?.trim()) {
|
|
291
|
+
searchParts.push(val.replace(/\s+/g, ""));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
simplified["search"] = searchParts.join(" ").toLowerCase();
|
|
295
|
+
if (!skipNode) {
|
|
296
|
+
const id = flatNodes.length;
|
|
297
|
+
flatNodes.push({
|
|
298
|
+
node: simplified,
|
|
299
|
+
search: simplified["search"],
|
|
300
|
+
element: node._element
|
|
301
|
+
});
|
|
302
|
+
runtimeElements[id] = node._element;
|
|
303
|
+
}
|
|
304
|
+
for (const child of node.children || []) {
|
|
305
|
+
simplifyAndFlatten(child);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
simplifyAndFlatten(xmlTree);
|
|
309
|
+
return {
|
|
310
|
+
flatNodes,
|
|
311
|
+
parentMap,
|
|
312
|
+
runtimeElements
|
|
313
|
+
};
|
|
314
|
+
}
|
|
222
315
|
}
|
|
223
316
|
exports.DomSimplifier = DomSimplifier;
|
|
@@ -2,24 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ElementGetter = void 0;
|
|
4
4
|
const logData_js_1 = require("../../utils/logger/logData.js");
|
|
5
|
-
const
|
|
5
|
+
const getElementsFromHTML_js_1 = require("./parser/getElementsFromHTML.js");
|
|
6
|
+
const platformContext_js_1 = require("../../utils/helpers/platformContext.js");
|
|
6
7
|
class ElementGetter {
|
|
7
8
|
async getFireFlinkElement(html, attribute) {
|
|
9
|
+
const platform = (0, platformContext_js_1.getPlatform)();
|
|
8
10
|
const formattedAttribute = attribute.replace('[', '//*[@');
|
|
9
11
|
try {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
// logger.info("formattedAttribute", formattedAttribute);
|
|
13
|
+
const result = (0, getElementsFromHTML_js_1.getElementsFromHTML)({
|
|
14
|
+
locators: [
|
|
15
|
+
{
|
|
16
|
+
name: "xpath",
|
|
17
|
+
type: "Static",
|
|
18
|
+
value: formattedAttribute,
|
|
19
|
+
reference: "local",
|
|
20
|
+
status: "NOT_USED",
|
|
21
|
+
isRecorded: "Y",
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}, html, platform);
|
|
20
25
|
return Array.isArray(result) && result.length > 0 ? JSON.parse(JSON.stringify(result[0], null, 4)) : null;
|
|
21
26
|
}
|
|
22
27
|
catch (error) {
|
|
28
|
+
logData_js_1.logger.info("failed to get element from dom");
|
|
23
29
|
logData_js_1.logger.error(`[${Object.getPrototypeOf(this).constructor.name}] : `, "Unable to find the element", error);
|
|
24
30
|
return "";
|
|
25
31
|
}
|