appium-espresso-driver 1.46.0
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/CHANGELOG.md +23 -0
- package/LICENSE +201 -0
- package/README.md +864 -0
- package/build/index.js +48 -0
- package/build/lib/commands/execute.js +67 -0
- package/build/lib/commands/general.js +337 -0
- package/build/lib/commands/idling-resources.js +31 -0
- package/build/lib/commands/index.js +26 -0
- package/build/lib/commands/services.js +27 -0
- package/build/lib/desired-caps.js +65 -0
- package/build/lib/driver.js +475 -0
- package/build/lib/espresso-runner.js +381 -0
- package/build/lib/logger.js +18 -0
- package/build/lib/server-builder.js +213 -0
- package/build/lib/server.js +39 -0
- package/build/lib/utils.js +85 -0
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build/outputs/apk/androidTest/debug/output-metadata.json +18 -0
- package/espresso-server/app/build.gradle.kts +153 -0
- package/espresso-server/app/proguard-rules.pro +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/EspressoServerRunnerTest.kt +93 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/AppDriver.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/ComposeDriver.kt +73 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/DriverContext.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/EspressoDriver.kt +70 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/AcceptAlert.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Back.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Click.kt +27 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/CreateSession.kt +58 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DismissAlert.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DrawerActionHandler.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +85 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAlertText.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +101 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetClipboard.kt +65 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDeviceInfo.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetOrientation.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRotation.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSession.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSessions.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSettings.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetToastVisibility.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowRect.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowSize.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/HideKeyboard.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +82 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ListIdlingResources.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MoveTo.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MultiTouchAction.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NavigateTo.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NoSessionCommandHandler.kt +4 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NotYetImplemented.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/OpenNotifications.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAction.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAutofillDismissal.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformEditorAction.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +281 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PressKeyCode.kt +90 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RegisterIdlingResources.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ReleaseActions.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RequestHandler.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScreenshotHandler.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScrollToPage.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetDate.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetOrientation.kt +61 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetRotation.kt +46 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetTime.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Source.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartActivity.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartService.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Status.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StopService.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Text.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/TouchAction.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Uiautomator.kt +68 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UiautomatorPageSource.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UnregisterIdlingResources.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UpdateSettings.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +69 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/AppiumException.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/DuplicateRouteException.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ElementNotVisibleException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidArgumentException.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidElementStateException.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidSelectorException.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/MoveTargetOutOfBoundsException.kt +39 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoAlertOpenException.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchDriverException.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchElementException.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NotYetImplementedException.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ScreenCaptureException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/SessionNotCreatedException.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/StaleElementException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/XPathLookupException.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AccessibilityServiceState.kt +15 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityHelpers.kt +125 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityOptionsHelpers.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AlertHelpers.kt +170 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AndroidLogger.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AssertHelpers.kt +17 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AutofillHelpers.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/BackdoorUtils.java +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ClipboardHelper.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ComposeNodeFinder.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/DeviceInfoHelper.kt +148 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +57 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/GsonParserHelpers.kt +72 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IMEHelpers.kt +88 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IntentHelpers.kt +336 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InteractionHelper.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InvocationOperation.java +80 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/LocaleHelpers.kt +46 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Logger.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/NotificationListener.kt +87 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Rect.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ReflectionUtils.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ScreenshotsHelper.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/StringHelpers.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ThreadHelpers.kt +15 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/UiAutomationWrapper.kt +48 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +316 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/XMLHelpers.kt +56 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/extensions/Semaphore.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ArrayUtils.java +110 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ClassUtils.java +180 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/MethodUtils.java +155 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/Validate.java +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/BaseW3CActionAdapter.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/DummyW3CActionAdapter.kt +133 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/W3CActionAdapter.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidKeyEvent.kt +271 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidMotionEvent.kt +90 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +147 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/Helpers.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MotionEventBuilder.kt +153 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MultiTouchState.kt +132 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/TouchState.kt +7 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/caps/CapsUtils.kt +96 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/BaseDispatchResult.kt +14 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/DispatchPointerMoveResult.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/KeyDispatch.kt +151 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/PointerDispatch.kt +286 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/W3CKeyEvent.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyCodeMapper.kt +169 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyLocationMapper.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyNormalizer.kt +84 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/NormalizedKeys.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionObject.kt +138 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionSequence.kt +112 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Actions.kt +89 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/InputSource.kt +173 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Origin.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/OriginDeserializer.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Tick.kt +62 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ActionsProcessor.kt +93 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/KeyProcessor.kt +57 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PauseProcessor.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PointerProcessor.kt +115 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ProcessorHelpers.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/ActiveInputSources.kt +62 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputState.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputStateTable.kt +95 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/KeyInputState.kt +82 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/PointerInputState.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteDefinition.kt +67 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteMap.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt +250 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Server.kt +109 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/AppiumResponse.kt +61 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/BaseResponse.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AlertParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AppiumParams.kt +55 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/BackdoorMethodArg.kt +3 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt +18 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/DrawerActionParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/EditorActionParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +169 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt +27 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GlobalSession.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/HamcrestMatcher.kt +144 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/IdlingResourcesParams.kt +66 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/KeyEventParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/LocaleParams.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Location.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Locator.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MatcherJson.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorMethod.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorParams.kt +20 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileClickActionParams.kt +81 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileSwipeParams.kt +106 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MotionEventParams.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MoveToParams.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MultiTouchActionsParams.kt +5 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/NavigateToParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationType.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Rect.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/RotationParams.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ScrollToPageParams.kt +36 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SessionParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetDateParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetTimeParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SettingsParams.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Size.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SourceDocument.kt +286 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartActivityParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartServiceParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StopServiceParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Strategy.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TextValueParams.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ToastLookupParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchAction.kt +178 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchActionsParams.kt +5 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/UiautomatorParams.kt +123 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewAttributesEnum.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewElement.kt +204 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewFlashParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewText.kt +12 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowRect.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowSize.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/AbstractSetting.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/DriverSetting.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/SettingType.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtom.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomDeserializer.kt +99 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsMethods.kt +4 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/OrientationChange.kt +47 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ScrollTo.kt +48 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerPerformer.kt +67 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerRunnable.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewGetter.kt +79 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewTextGetter.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/RegexpTextMatcher.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithView.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithXPath.kt +55 -0
- package/espresso-server/app/src/main/AndroidManifest.xml +7 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/Helpers.kt +20 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/backdoor-methods.json +51 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/key-actions.json +15 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/multi-touch-actions.json +28 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/GsonParserHelpersTest.kt +41 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/IntentCreationTests.kt +115 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/InvocationOperationTest.java +97 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/KReflectionUtilsTest.kt +108 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/XpathQueryParserTests.kt +42 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionSequenceTest.kt +220 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionsTest.kt +76 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/CapsUtilsTest.kt +76 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/Helpers.kt +7 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputSourceTest.kt +153 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputStateTableTest.kt +72 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyDispatchTest.kt +133 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyInputStateTest.kt +74 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/PointerDispatchTest.kt +370 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ProcessorTest.kt +320 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/TickTest.kt +265 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/AndroidKeyEventTest.kt +114 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/HelpersTest.kt +31 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/http/RouteDefinitionTest.kt +74 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt +112 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MatcherJsonTest.kt +20 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileBackdoorMethodTest.java +110 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileClickTest.kt +46 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileSwipeTest.kt +68 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/TouchActionTest.kt +56 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomTest.kt +68 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomsTest.kt +96 -0
- package/espresso-server/build.gradle.kts +33 -0
- package/espresso-server/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/espresso-server/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/espresso-server/gradle.properties +26 -0
- package/espresso-server/gradlew +185 -0
- package/espresso-server/gradlew.bat +89 -0
- package/espresso-server/lint.xml +4 -0
- package/espresso-server/settings.gradle.kts +1 -0
- package/index.js +29 -0
- package/lib/commands/execute.js +72 -0
- package/lib/commands/general.js +321 -0
- package/lib/commands/idling-resources.js +52 -0
- package/lib/commands/index.js +16 -0
- package/lib/commands/services.js +50 -0
- package/lib/desired-caps.js +55 -0
- package/lib/driver.js +566 -0
- package/lib/espresso-runner.js +340 -0
- package/lib/logger.js +6 -0
- package/lib/server-builder.js +194 -0
- package/lib/server.js +18 -0
- package/lib/utils.js +74 -0
- package/package.json +105 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import android.os.Build
|
|
20
|
+
import android.view.View
|
|
21
|
+
import android.view.autofill.AutofillManager
|
|
22
|
+
|
|
23
|
+
import androidx.test.espresso.UiController
|
|
24
|
+
import androidx.test.espresso.ViewAction
|
|
25
|
+
|
|
26
|
+
import org.hamcrest.Matcher
|
|
27
|
+
import org.hamcrest.Matchers
|
|
28
|
+
|
|
29
|
+
class DisableAutofillAction : ViewAction {
|
|
30
|
+
|
|
31
|
+
override fun getConstraints(): Matcher<View> {
|
|
32
|
+
return Matchers.any(View::class.java)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
override fun getDescription(): String {
|
|
36
|
+
return "Dismissing autofill picker"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun perform(uiController: UiController, view: View) {
|
|
40
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
41
|
+
view.context.getSystemService(AutofillManager::class.java)?.cancel()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
package io.appium.espressoserver.lib.helpers;
|
|
2
|
+
|
|
3
|
+
public class BackdoorUtils {
|
|
4
|
+
|
|
5
|
+
public static Object parseValue(Object o, Class<?> c) {
|
|
6
|
+
if (o == null) return null;
|
|
7
|
+
String value = o.toString();
|
|
8
|
+
if (c.equals(boolean.class) || c.equals(Boolean.class)) return Boolean.parseBoolean(value);
|
|
9
|
+
if (c.equals(byte.class) || c.equals(Byte.class)) return Byte.parseByte(value);
|
|
10
|
+
if (c.equals(short.class) || c.equals(Short.class)) return Short.parseShort(value);
|
|
11
|
+
if (c.equals(int.class) || c.equals(Integer.class)) return Integer.parseInt(value);
|
|
12
|
+
if (c.equals(long.class) || c.equals(Long.class)) return Long.parseLong(value);
|
|
13
|
+
if (c.equals(float.class) || c.equals(Float.class)) return Float.parseFloat(value);
|
|
14
|
+
if (c.equals(double.class) || c.equals(Double.class)) return Double.parseDouble(value);
|
|
15
|
+
if (c.equals(char.class) || c.equals(Character.class)) return value.charAt(0);
|
|
16
|
+
return o;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public static Class<?> parseType(final String className) {
|
|
20
|
+
switch (className) {
|
|
21
|
+
case "boolean":
|
|
22
|
+
return boolean.class;
|
|
23
|
+
case "byte":
|
|
24
|
+
return byte.class;
|
|
25
|
+
case "short":
|
|
26
|
+
return short.class;
|
|
27
|
+
case "int":
|
|
28
|
+
return int.class;
|
|
29
|
+
case "long":
|
|
30
|
+
return long.class;
|
|
31
|
+
case "float":
|
|
32
|
+
return float.class;
|
|
33
|
+
case "double":
|
|
34
|
+
return double.class;
|
|
35
|
+
case "char":
|
|
36
|
+
return char.class;
|
|
37
|
+
case "void":
|
|
38
|
+
return void.class;
|
|
39
|
+
default:
|
|
40
|
+
String fqn = className.contains(".") ? className : "java.lang." + className;
|
|
41
|
+
try {
|
|
42
|
+
return Class.forName(fqn);
|
|
43
|
+
} catch (ClassNotFoundException ex) {
|
|
44
|
+
throw new IllegalArgumentException("Class not found: " + fqn, ex);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import android.content.ClipData
|
|
20
|
+
import android.content.ClipboardManager
|
|
21
|
+
import android.content.Context
|
|
22
|
+
|
|
23
|
+
class ClipboardHelper(private val context: Context) {
|
|
24
|
+
private val DEFAULT_LABEL_LEN = 10
|
|
25
|
+
|
|
26
|
+
private val manager: ClipboardManager
|
|
27
|
+
get() = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
|
28
|
+
|
|
29
|
+
val textData: String
|
|
30
|
+
get() {
|
|
31
|
+
val cm = manager
|
|
32
|
+
if (!cm.hasPrimaryClip()) {
|
|
33
|
+
return ""
|
|
34
|
+
}
|
|
35
|
+
val cd = cm.primaryClip
|
|
36
|
+
if (cd == null || cd.itemCount == 0) {
|
|
37
|
+
return ""
|
|
38
|
+
}
|
|
39
|
+
val text = cd.getItemAt(0).coerceToText(context)
|
|
40
|
+
return text?.toString() ?: ""
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fun setTextData(label: String?, data: String) {
|
|
44
|
+
val cm = manager
|
|
45
|
+
val labelToSet = label ?: if (data.length >= DEFAULT_LABEL_LEN)
|
|
46
|
+
data.substring(0, DEFAULT_LABEL_LEN)
|
|
47
|
+
else
|
|
48
|
+
data
|
|
49
|
+
cm.setPrimaryClip(ClipData.newPlainText(labelToSet, data))
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import androidx.compose.ui.semantics.SemanticsNode
|
|
20
|
+
import androidx.compose.ui.test.*
|
|
21
|
+
import io.appium.espressoserver.lib.handlers.exceptions.InvalidSelectorException
|
|
22
|
+
import io.appium.espressoserver.lib.model.Strategy
|
|
23
|
+
import io.appium.espressoserver.EspressoServerRunnerTest
|
|
24
|
+
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
25
|
+
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
|
|
26
|
+
import io.appium.espressoserver.lib.handlers.exceptions.StaleElementException
|
|
27
|
+
import io.appium.espressoserver.lib.model.Locator
|
|
28
|
+
import java.util.NoSuchElementException
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Retrieve cached node and return the SemanticsNodeInteraction
|
|
32
|
+
*/
|
|
33
|
+
fun getNodeInteractionById(elementId: String?): SemanticsNodeInteraction =
|
|
34
|
+
elementId?.let { ComposeViewCache.get(it) ?: throw StaleElementException(it) }
|
|
35
|
+
?: throw InvalidArgumentException("Cannot find 'null' element")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
fun SemanticsNodeInteraction.findDescendantNodeInteractions(locator: Locator): SemanticsNodeInteractionCollection =
|
|
39
|
+
this.onChildren().filter(semanticsMatcherForLocator(locator))
|
|
40
|
+
|
|
41
|
+
fun semanticsMatcherForLocator(locator: Locator): SemanticsMatcher =
|
|
42
|
+
when (locator.using) {
|
|
43
|
+
Strategy.VIEW_TAG -> hasTestTag(locator.value!!)
|
|
44
|
+
Strategy.TEXT -> hasText(locator.value!!)
|
|
45
|
+
Strategy.LINK_TEXT -> hasText(locator.value!!)
|
|
46
|
+
Strategy.ACCESSIBILITY_ID -> hasContentDescription(locator.value!!)
|
|
47
|
+
else -> throw InvalidSelectorException(
|
|
48
|
+
"Can't use non-Compose selectors. " +
|
|
49
|
+
"Only ${Strategy.VIEW_TAG}, ${Strategy.TEXT}, ${Strategy.LINK_TEXT} and " +
|
|
50
|
+
"${Strategy.ACCESSIBILITY_ID} are supported"
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
fun getSemanticsNode(elementId: String): SemanticsNode =
|
|
55
|
+
try {
|
|
56
|
+
getNodeInteractionById(elementId).fetchSemanticsNode()
|
|
57
|
+
} catch (e: AssertionError) {
|
|
58
|
+
throw StaleElementException(elementId)
|
|
59
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import android.annotation.SuppressLint
|
|
20
|
+
import android.content.Context
|
|
21
|
+
import android.os.Build
|
|
22
|
+
import android.provider.Settings.Secure
|
|
23
|
+
import android.telephony.TelephonyManager
|
|
24
|
+
import android.util.DisplayMetrics
|
|
25
|
+
import android.view.Display
|
|
26
|
+
import android.view.WindowManager
|
|
27
|
+
import java.util.TimeZone
|
|
28
|
+
import java.util.Locale
|
|
29
|
+
|
|
30
|
+
class DeviceInfoHelper(private val context: Context) {
|
|
31
|
+
|
|
32
|
+
private val defaultDisplay: Display?
|
|
33
|
+
get() {
|
|
34
|
+
val windowManager = context.getSystemService(Context.WINDOW_SERVICE)
|
|
35
|
+
return (windowManager as? WindowManager)?.defaultDisplay;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A unique serial number identifying a device, if a device has multiple users, each user appears as a
|
|
40
|
+
* completely separate device, so the ANDROID_ID value is unique to each user.
|
|
41
|
+
* See https://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
|
|
42
|
+
* for more info.
|
|
43
|
+
*
|
|
44
|
+
* @return ANDROID_ID A 64-bit number (as a hex string) that is uniquely generated when the user
|
|
45
|
+
* first sets up the device and should remain constant for the lifetime of the user's device. The value
|
|
46
|
+
* may change if a factory reset is performed on the device.
|
|
47
|
+
*/
|
|
48
|
+
val androidId: String
|
|
49
|
+
@SuppressLint("HardwareIds")
|
|
50
|
+
get() = Secure.getString(context.contentResolver, Secure.ANDROID_ID)
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @return Build.MANUFACTURER value
|
|
54
|
+
*/
|
|
55
|
+
val manufacturer: String
|
|
56
|
+
get() = Build.MANUFACTURER
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @return Build.MODEL value
|
|
60
|
+
*/
|
|
61
|
+
val modelName: String
|
|
62
|
+
get() = Build.MODEL
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @return Build.BRAND value
|
|
66
|
+
*/
|
|
67
|
+
val brand: String
|
|
68
|
+
get() = Build.BRAND
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Current running OS's API VERSION
|
|
72
|
+
*
|
|
73
|
+
* @return the os version as String
|
|
74
|
+
*/
|
|
75
|
+
val apiVersion: String
|
|
76
|
+
get() = Integer.toString(Build.VERSION.SDK_INT)
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @return The current version string, for example "1.0" or "3.4b5"
|
|
80
|
+
*/
|
|
81
|
+
val platformVersion: String
|
|
82
|
+
get() = Build.VERSION.RELEASE
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @return The logical density of the display in Density Independent Pixel units.
|
|
86
|
+
*/
|
|
87
|
+
val displayDensity: Int?
|
|
88
|
+
get() {
|
|
89
|
+
val display = defaultDisplay ?: return null
|
|
90
|
+
val metrics = DisplayMetrics()
|
|
91
|
+
display.getRealMetrics(metrics)
|
|
92
|
+
return (metrics.density * 160).toInt()
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Retrievs the name of the current celluar network carrier
|
|
97
|
+
*
|
|
98
|
+
* @return carrier name or null if it cannot be retrieved
|
|
99
|
+
*/
|
|
100
|
+
val carrierName: String?
|
|
101
|
+
get() {
|
|
102
|
+
val telephonyManager = context
|
|
103
|
+
.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
|
104
|
+
try {
|
|
105
|
+
return telephonyManager?.networkOperatorName
|
|
106
|
+
} catch (e: Exception) {
|
|
107
|
+
e.printStackTrace()
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Retrieves the real size of the default display
|
|
115
|
+
*
|
|
116
|
+
* @return The display size in 'WxH' format
|
|
117
|
+
*/
|
|
118
|
+
val realDisplaySize: String?
|
|
119
|
+
get() {
|
|
120
|
+
val display = defaultDisplay ?: return null
|
|
121
|
+
val p = android.graphics.Point()
|
|
122
|
+
display.getRealSize(p)
|
|
123
|
+
return "${p.x}x${p.y}"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Get current system locale
|
|
128
|
+
*
|
|
129
|
+
* @return The locale as string
|
|
130
|
+
*/
|
|
131
|
+
val locale: String
|
|
132
|
+
get() = Locale.getDefault().toString()
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get current system timezone
|
|
136
|
+
* e.g. "Asia/Tokyo", "America/Caracas"
|
|
137
|
+
*
|
|
138
|
+
* @return The timezone as string
|
|
139
|
+
*/
|
|
140
|
+
val timeZone: String
|
|
141
|
+
get() {
|
|
142
|
+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
143
|
+
TimeZone.getDefault().toZoneId().id
|
|
144
|
+
} else {
|
|
145
|
+
TimeZone.getDefault().id
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import android.util.LruCache
|
|
20
|
+
import android.view.View
|
|
21
|
+
import androidx.compose.ui.test.SemanticsNodeInteraction
|
|
22
|
+
|
|
23
|
+
const val MAX_CACHE_SIZE = 500
|
|
24
|
+
|
|
25
|
+
data class ViewState(val view: View, val initialContentDescription: CharSequence?)
|
|
26
|
+
|
|
27
|
+
object EspressoViewsCache {
|
|
28
|
+
private val cache = LruCache<String, ViewState>(MAX_CACHE_SIZE)
|
|
29
|
+
|
|
30
|
+
fun put(id: String, view: View) {
|
|
31
|
+
cache.put(id, ViewState(view, view.contentDescription))
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
fun get(id: String): ViewState? = cache.get(id)
|
|
35
|
+
|
|
36
|
+
fun has(id: String): Boolean = cache.get(id) != null
|
|
37
|
+
|
|
38
|
+
fun reset() {
|
|
39
|
+
cache.evictAll()
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Compose does not have stable instances, use locator again. */
|
|
44
|
+
object ComposeViewCache {
|
|
45
|
+
private val cache = LruCache<String, SemanticsNodeInteraction>(MAX_CACHE_SIZE)
|
|
46
|
+
|
|
47
|
+
fun put(id: String, composeNode: SemanticsNodeInteraction) {
|
|
48
|
+
cache.put(id, composeNode)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
fun get(id: String?): SemanticsNodeInteraction? =
|
|
52
|
+
cache.get(id)
|
|
53
|
+
|
|
54
|
+
fun reset() {
|
|
55
|
+
cache.evictAll()
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import com.google.gson.JsonArray
|
|
20
|
+
import com.google.gson.JsonObject
|
|
21
|
+
import com.google.gson.JsonParseException
|
|
22
|
+
import com.google.gson.JsonPrimitive
|
|
23
|
+
|
|
24
|
+
object GsonParserHelpers {
|
|
25
|
+
|
|
26
|
+
inline fun <reified T : Enum<T>> parseEnum(jsonObj: JsonObject, propName: String,
|
|
27
|
+
helperMessage: String = "", defaultValue: T? = null): T? {
|
|
28
|
+
val property = jsonObj.get(propName)
|
|
29
|
+
if (property != null) {
|
|
30
|
+
val propValueAsString = property.asString.toUpperCase()
|
|
31
|
+
try {
|
|
32
|
+
return enumValueOf<T>(propValueAsString)
|
|
33
|
+
} catch (e: IllegalArgumentException) {
|
|
34
|
+
throw JsonParseException(""""
|
|
35
|
+
'${propValueAsString}' is not a valid '${propName}' type. $helperMessage
|
|
36
|
+
""".trimIndent())
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return defaultValue
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fun parsePrimitive(jsonPrimitive: JsonPrimitive): Any = when {
|
|
43
|
+
jsonPrimitive.isNumber -> {
|
|
44
|
+
val hasDecimal = jsonPrimitive.asString.contains(".")
|
|
45
|
+
if (hasDecimal) {
|
|
46
|
+
jsonPrimitive.asDouble
|
|
47
|
+
} else {
|
|
48
|
+
val candidate = jsonPrimitive.asLong
|
|
49
|
+
if (Int.MIN_VALUE <= candidate && candidate <= Int.MAX_VALUE) {
|
|
50
|
+
candidate.toInt()
|
|
51
|
+
} else {
|
|
52
|
+
candidate
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
jsonPrimitive.isBoolean -> jsonPrimitive.asBoolean
|
|
57
|
+
jsonPrimitive.isString -> jsonPrimitive.asString
|
|
58
|
+
else -> throw JsonParseException("Could not parse primitive '${jsonPrimitive}'")
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
fun asArray (jsonObj: JsonObject, key: String): JsonArray {
|
|
62
|
+
jsonObj.get(key)?.let {
|
|
63
|
+
if (it.isJsonArray) {
|
|
64
|
+
return it.asJsonArray
|
|
65
|
+
}
|
|
66
|
+
val jsonArr = JsonArray()
|
|
67
|
+
jsonArr.add(it)
|
|
68
|
+
return jsonArr
|
|
69
|
+
}
|
|
70
|
+
return JsonArray()
|
|
71
|
+
}
|
|
72
|
+
}
|
package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IMEHelpers.kt
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.helpers
|
|
18
|
+
|
|
19
|
+
import android.view.inputmethod.EditorInfo
|
|
20
|
+
import androidx.test.espresso.Espresso.onView
|
|
21
|
+
import androidx.test.espresso.NoMatchingViewException
|
|
22
|
+
import androidx.test.espresso.PerformException
|
|
23
|
+
import androidx.test.espresso.ViewInteraction
|
|
24
|
+
import androidx.test.espresso.action.ViewActions.pressImeActionButton
|
|
25
|
+
import androidx.test.espresso.matcher.ViewMatchers.hasFocus
|
|
26
|
+
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
27
|
+
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
|
|
28
|
+
import io.appium.espressoserver.lib.handlers.exceptions.InvalidElementStateException
|
|
29
|
+
import io.appium.espressoserver.lib.viewaction.ViewGetter
|
|
30
|
+
|
|
31
|
+
object IMEHelpers {
|
|
32
|
+
private val ACTION_CODES_MAP = mapOf(
|
|
33
|
+
"normal" to 0,
|
|
34
|
+
"unspecified" to 0,
|
|
35
|
+
"none" to 1,
|
|
36
|
+
"go" to 2,
|
|
37
|
+
"search" to 3,
|
|
38
|
+
"send" to 4,
|
|
39
|
+
"next" to 5,
|
|
40
|
+
"done" to 6,
|
|
41
|
+
"previous" to 7
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@Throws(AppiumException::class)
|
|
45
|
+
private fun toActionCode(action: Any): Int {
|
|
46
|
+
if (action is Long) {
|
|
47
|
+
return action.toInt()
|
|
48
|
+
}
|
|
49
|
+
if (action is String) {
|
|
50
|
+
return ACTION_CODES_MAP[action.toLowerCase()]
|
|
51
|
+
?: throw InvalidArgumentException(
|
|
52
|
+
"The action value can be one of ${ACTION_CODES_MAP.keys}. '$action' is given instead")
|
|
53
|
+
}
|
|
54
|
+
throw InvalidArgumentException(
|
|
55
|
+
"The action value can be either an integer action code or one of ${ACTION_CODES_MAP.keys}. " +
|
|
56
|
+
"'$action' is given instead")
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Throws(AppiumException::class)
|
|
60
|
+
fun performEditorAction(action: Any?) {
|
|
61
|
+
val viewInteraction: ViewInteraction
|
|
62
|
+
try {
|
|
63
|
+
viewInteraction = onView(hasFocus())
|
|
64
|
+
} catch (e: NoMatchingViewException) {
|
|
65
|
+
throw InvalidElementStateException(
|
|
66
|
+
"Currently there is no focused element to perform ${action
|
|
67
|
+
?: "the default"} editor action on", e)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (action == null) {
|
|
71
|
+
AndroidLogger.debug("Performing the default editor action on the focused element")
|
|
72
|
+
try {
|
|
73
|
+
viewInteraction.perform(pressImeActionButton())
|
|
74
|
+
return
|
|
75
|
+
} catch (e: PerformException) {
|
|
76
|
+
throw InvalidElementStateException("Cannot perform the default action on the focused element")
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
val actionCode = toActionCode(action)
|
|
81
|
+
AndroidLogger.debug("Performing editor action $actionCode on the focused element")
|
|
82
|
+
val view = ViewGetter().getView(viewInteraction)
|
|
83
|
+
val ic = view.onCreateInputConnection(EditorInfo())
|
|
84
|
+
if (!ic.performEditorAction(actionCode)) {
|
|
85
|
+
throw InvalidElementStateException("Cannot perform editor action $action on the focused element")
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|