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,67 @@
|
|
|
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.http
|
|
18
|
+
|
|
19
|
+
import java.util.HashMap
|
|
20
|
+
|
|
21
|
+
import fi.iki.elonen.NanoHTTPD.Method
|
|
22
|
+
import io.appium.espressoserver.lib.handlers.RequestHandler
|
|
23
|
+
import io.appium.espressoserver.lib.model.AppiumParams
|
|
24
|
+
|
|
25
|
+
class RouteDefinition(val method: Method, val routeUri: String,
|
|
26
|
+
val handler: RequestHandler<*, *>,
|
|
27
|
+
val paramClass: Class<out AppiumParams>) {
|
|
28
|
+
|
|
29
|
+
private val testRegex = buildTestRegex(routeUri)
|
|
30
|
+
|
|
31
|
+
fun isMatch(uri: String): Boolean = uri.matches(testRegex)
|
|
32
|
+
|
|
33
|
+
fun getUriParams(uri: String): Map<String, String> {
|
|
34
|
+
val uriParams = HashMap<String, String>()
|
|
35
|
+
val uriTokens = uri.split("/".toRegex())
|
|
36
|
+
.dropLastWhile { it.isEmpty() }
|
|
37
|
+
.toTypedArray()
|
|
38
|
+
for ((index, routeUriToken) in routeUri.split("/".toRegex())
|
|
39
|
+
.dropLastWhile { it.isEmpty() }
|
|
40
|
+
.toTypedArray()
|
|
41
|
+
.withIndex()) {
|
|
42
|
+
// If a token starts with ':', then what's after is an identifier
|
|
43
|
+
if (routeUriToken.startsWith(":")) {
|
|
44
|
+
uriParams[routeUriToken.substring(1)] = uriTokens[index]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return uriParams
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private fun buildTestRegex(uri: String): Regex {
|
|
51
|
+
val testRegex = StringBuilder("^")
|
|
52
|
+
|
|
53
|
+
// Convert route to a regex
|
|
54
|
+
for (uriToken in uri.split("/".toRegex())
|
|
55
|
+
.dropLastWhile { it.isEmpty() }
|
|
56
|
+
.toTypedArray()) {
|
|
57
|
+
if (uriToken.startsWith(":")) {
|
|
58
|
+
testRegex.append("/[^/]*")
|
|
59
|
+
} else if (uriToken.isNotEmpty()) {
|
|
60
|
+
testRegex.append("/")
|
|
61
|
+
testRegex.append(uriToken)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
testRegex.append("/?$")
|
|
65
|
+
return testRegex.toString().toRegex()
|
|
66
|
+
}
|
|
67
|
+
}
|
package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteMap.kt
ADDED
|
@@ -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.http
|
|
18
|
+
|
|
19
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
20
|
+
|
|
21
|
+
import fi.iki.elonen.NanoHTTPD.Method
|
|
22
|
+
import io.appium.espressoserver.lib.handlers.exceptions.DuplicateRouteException
|
|
23
|
+
|
|
24
|
+
class RouteMap {
|
|
25
|
+
|
|
26
|
+
private val routeMap = ConcurrentHashMap<Method, MutableMap<String, RouteDefinition>>()
|
|
27
|
+
|
|
28
|
+
fun addRoute(route: RouteDefinition) {
|
|
29
|
+
var methodMap: MutableMap<String, RouteDefinition>? = routeMap[route.method]
|
|
30
|
+
if (methodMap == null) {
|
|
31
|
+
methodMap = ConcurrentHashMap()
|
|
32
|
+
routeMap[route.method] = methodMap
|
|
33
|
+
}
|
|
34
|
+
if (methodMap.containsKey(route.routeUri)) {
|
|
35
|
+
throw DuplicateRouteException()
|
|
36
|
+
}
|
|
37
|
+
methodMap[route.routeUri] = route
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fun findMatchingRoute(method: Method, uri: String): RouteDefinition? {
|
|
41
|
+
val methodMap = routeMap[method] ?: return null
|
|
42
|
+
for ((_, routeDefinition) in methodMap) {
|
|
43
|
+
if (routeDefinition.isMatch(uri)) {
|
|
44
|
+
return routeDefinition
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
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.http
|
|
18
|
+
|
|
19
|
+
import com.google.gson.Gson
|
|
20
|
+
import com.google.gson.JsonParseException
|
|
21
|
+
import fi.iki.elonen.NanoHTTPD.Method
|
|
22
|
+
import io.appium.espressoserver.lib.handlers.*
|
|
23
|
+
import io.appium.espressoserver.lib.handlers.PointerEventHandler.TouchType.*
|
|
24
|
+
import io.appium.espressoserver.lib.handlers.TouchAction
|
|
25
|
+
import io.appium.espressoserver.lib.handlers.exceptions.*
|
|
26
|
+
import io.appium.espressoserver.lib.helpers.AndroidLogger
|
|
27
|
+
import io.appium.espressoserver.lib.helpers.StringHelpers.abbreviate
|
|
28
|
+
import io.appium.espressoserver.lib.helpers.w3c.models.Actions
|
|
29
|
+
import io.appium.espressoserver.lib.http.response.AppiumResponse
|
|
30
|
+
import io.appium.espressoserver.lib.http.response.BaseResponse
|
|
31
|
+
import io.appium.espressoserver.lib.model.*
|
|
32
|
+
import io.appium.espressoserver.lib.model.web.WebAtomsParams
|
|
33
|
+
|
|
34
|
+
internal class Router {
|
|
35
|
+
private val routeMap: RouteMap
|
|
36
|
+
|
|
37
|
+
init {
|
|
38
|
+
AndroidLogger.debug("Generating routes")
|
|
39
|
+
routeMap = RouteMap()
|
|
40
|
+
|
|
41
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/status", Status(), AppiumParams::class.java))
|
|
42
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session", CreateSession(), SessionParams::class.java))
|
|
43
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId", GetSession(), AppiumParams::class.java))
|
|
44
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/actions", PerformAction(), Actions::class.java))
|
|
45
|
+
routeMap.addRoute(RouteDefinition(Method.DELETE, "/session/:sessionId/actions", ReleaseActions(), Actions::class.java))
|
|
46
|
+
routeMap.addRoute(RouteDefinition(Method.DELETE, "/session/:sessionId", DeleteSession(), AppiumParams::class.java))
|
|
47
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/back", Back(), AppiumParams::class.java))
|
|
48
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/accept_alert", AcceptAlert(), AlertParams::class.java))
|
|
49
|
+
// alias
|
|
50
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/alert/accept", AcceptAlert(), AlertParams::class.java))
|
|
51
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/dismiss_alert", DismissAlert(), AlertParams::class.java))
|
|
52
|
+
// alias
|
|
53
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/alert/dismiss", DismissAlert(), AlertParams::class.java))
|
|
54
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/alert_text", GetAlertText(), AppiumParams::class.java))
|
|
55
|
+
// alias
|
|
56
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/alert/text", GetAlertText(), AppiumParams::class.java))
|
|
57
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/orientation", SetOrientation(), OrientationParams::class.java))
|
|
58
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/orientation", GetOrientation(), AppiumParams::class.java))
|
|
59
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/rotation", SetRotation(), RotationParams::class.java))
|
|
60
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/rotation", GetRotation(), AppiumParams::class.java))
|
|
61
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/source", Source(), AppiumParams::class.java))
|
|
62
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/screenshot", ScreenshotHandler(), AppiumParams::class.java))
|
|
63
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element", FindElement(), Locator::class.java))
|
|
64
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/active", FindActive(), AppiumParams::class.java))
|
|
65
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/active", FindActive(), AppiumParams::class.java))
|
|
66
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/attribute/:name", GetAttribute(), AppiumParams::class.java))
|
|
67
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/clear", Clear(), AppiumParams::class.java))
|
|
68
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/click", Click(), AppiumParams::class.java))
|
|
69
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/displayed", GetDisplayed(), AppiumParams::class.java))
|
|
70
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/element", FindElement(), Locator::class.java))
|
|
71
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/elements", FindElements(), Locator::class.java))
|
|
72
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/enabled", GetEnabled(), AppiumParams::class.java))
|
|
73
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/location", GetLocation(), AppiumParams::class.java))
|
|
74
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/location_in_view", GetLocationInView(), AppiumParams::class.java))
|
|
75
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/name", GetName(), AppiumParams::class.java))
|
|
76
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/rect", GetRect(), AppiumParams::class.java))
|
|
77
|
+
// W3C endpoint
|
|
78
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/screenshot", ElementScreenshot(), AppiumParams::class.java))
|
|
79
|
+
// JSONWP endpoint
|
|
80
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/screenshot/:elementId", ElementScreenshot(), AppiumParams::class.java))
|
|
81
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/selected", GetSelected(), AppiumParams::class.java))
|
|
82
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/size", GetSize(), AppiumParams::class.java))
|
|
83
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/text", Text(), AppiumParams::class.java))
|
|
84
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/value", ElementValue(false), TextValueParams::class.java))
|
|
85
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/keys", Keys(), TextValueParams::class.java))
|
|
86
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/window/:windowHandle/size", GetWindowSize(), AppiumParams::class.java))
|
|
87
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/window/rect", GetWindowRect(), AppiumParams::class.java))
|
|
88
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/elements", FindElements(), Locator::class.java))
|
|
89
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/sessions", GetSessions(), AppiumParams::class.java))
|
|
90
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/appium/device/info", GetDeviceInfo(), AppiumParams::class.java))
|
|
91
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/hide_keyboard", HideKeyboard(), AppiumParams::class.java))
|
|
92
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/start_activity", StartActivity(), StartActivityParams::class.java))
|
|
93
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/press_keycode", PressKeyCode(false), KeyEventParams::class.java))
|
|
94
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/long_press_keycode", PressKeyCode(true), KeyEventParams::class.java))
|
|
95
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/perform_editor_action", PerformEditorAction(), EditorActionParams::class.java))
|
|
96
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/equals/:otherId", ElementEquals(), AppiumParams::class.java))
|
|
97
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/element/:elementId/value", ElementValue(false), TextValueParams::class.java))
|
|
98
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/element/:elementId/replace_value", ElementValue(true), TextValueParams::class.java))
|
|
99
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/get_clipboard", GetClipboard(), GetClipboardParams::class.java))
|
|
100
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/set_clipboard", SetClipboard(), SetClipboardParams::class.java))
|
|
101
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/device/open_notifications", OpenNotifications(), AppiumParams::class.java))
|
|
102
|
+
|
|
103
|
+
// touch events
|
|
104
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/click", PointerEventHandler(CLICK), MotionEventParams::class.java))
|
|
105
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/longclick", PointerEventHandler(LONG_CLICK), MotionEventParams::class.java))
|
|
106
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/doubleclick", PointerEventHandler(DOUBLE_CLICK), MotionEventParams::class.java))
|
|
107
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/down", PointerEventHandler(TOUCH_DOWN), MotionEventParams::class.java))
|
|
108
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/up", PointerEventHandler(TOUCH_UP), MotionEventParams::class.java))
|
|
109
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/move", PointerEventHandler(TOUCH_MOVE), MotionEventParams::class.java))
|
|
110
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/scroll", PointerEventHandler(TOUCH_SCROLL), MotionEventParams::class.java))
|
|
111
|
+
|
|
112
|
+
// mouse events
|
|
113
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/buttondown", PointerEventHandler(MOUSE_DOWN), MotionEventParams::class.java))
|
|
114
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/buttonup", PointerEventHandler(MOUSE_UP), MotionEventParams::class.java))
|
|
115
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/moveto", MoveTo(), MoveToParams::class.java))
|
|
116
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/click", PointerEventHandler(MOUSE_CLICK), AppiumParams::class.java))
|
|
117
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/doubleclick", PointerEventHandler(MOUSE_DOUBLECLICK), AppiumParams::class.java))
|
|
118
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/perform", TouchAction(), TouchActionsParams::class.java))
|
|
119
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/multi/perform", MultiTouchAction(), MultiTouchActionsParams::class.java))
|
|
120
|
+
|
|
121
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/settings", UpdateSettings(), SettingsParams::class.java))
|
|
122
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/appium/settings", GetSettings(), AppiumParams::class.java))
|
|
123
|
+
|
|
124
|
+
// 'execute mobile' commands
|
|
125
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/swipe", MobileSwipe(), MobileSwipeParams::class.java))
|
|
126
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/is_toast_displayed", GetToastVisibility(), ToastLookupParams::class.java))
|
|
127
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/open_drawer", DrawerActionHandler(true), DrawerActionParams::class.java))
|
|
128
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/close_drawer", DrawerActionHandler(false), DrawerActionParams::class.java))
|
|
129
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/set_date", SetDate(), SetDateParams::class.java))
|
|
130
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/set_time", SetTime(), SetTimeParams::class.java))
|
|
131
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/scroll_to_page", ScrollToPage(), ScrollToPageParams::class.java))
|
|
132
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/navigate_to", NavigateTo(), NavigateToParams::class.java))
|
|
133
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/backdoor", MobileBackdoor(), MobileBackdoorParams::class.java))
|
|
134
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/flash", MobileViewFlash(), ViewFlashParams::class.java))
|
|
135
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/uiautomator", Uiautomator(), UiautomatorParams::class.java))
|
|
136
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/appium/execute_mobile/uiautomator_page_source", UiautomatorPageSource(), AppiumParams::class.java))
|
|
137
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/click_action", MobileClickAction(), MobileClickActionParams::class.java))
|
|
138
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/web_atoms", WebAtoms(), WebAtomsParams::class.java))
|
|
139
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/:elementId/dismiss_autofill", PerformAutofillDismissal(), AppiumParams::class.java))
|
|
140
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/start_service", StartService(), StartServiceParams::class.java))
|
|
141
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/stop_service", StopService(), StopServiceParams::class.java))
|
|
142
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/register_idling_resources", RegisterIdlingResources(), IdlingResourcesParams::class.java))
|
|
143
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/unregister_idling_resources", UnregisterIdlingResources(), IdlingResourcesParams::class.java))
|
|
144
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/appium/execute_mobile/list_idling_resources", ListIdlingResources(), AppiumParams::class.java))
|
|
145
|
+
|
|
146
|
+
// Not implemented
|
|
147
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/flick", NotYetImplemented(), AppiumParams::class.java))
|
|
148
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/alert_text", NotYetImplemented(), AppiumParams::class.java))
|
|
149
|
+
|
|
150
|
+
// Probably will never implement
|
|
151
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/context", NotYetImplemented(), AppiumParams::class.java))
|
|
152
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/contexts", NotYetImplemented(), AppiumParams::class.java))
|
|
153
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/contexts", NotYetImplemented(), AppiumParams::class.java))
|
|
154
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/timeouts", NotYetImplemented(), AppiumParams::class.java))
|
|
155
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/timeouts/async_script", NotYetImplemented(), AppiumParams::class.java))
|
|
156
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/timeouts/implicit_wait", NotYetImplemented(), AppiumParams::class.java))
|
|
157
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/window_handle", NotYetImplemented(), AppiumParams::class.java))
|
|
158
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/window_handles", NotYetImplemented(), AppiumParams::class.java))
|
|
159
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/url", NotYetImplemented(), AppiumParams::class.java))
|
|
160
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/url", NotYetImplemented(), AppiumParams::class.java))
|
|
161
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/forward", NotYetImplemented(), AppiumParams::class.java))
|
|
162
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/refresh", NotYetImplemented(), AppiumParams::class.java))
|
|
163
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/execute", NotYetImplemented(), AppiumParams::class.java))
|
|
164
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/execute_async", NotYetImplemented(), AppiumParams::class.java))
|
|
165
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/ime/available_engines", NotYetImplemented(), AppiumParams::class.java))
|
|
166
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/ime/active_engine", NotYetImplemented(), AppiumParams::class.java))
|
|
167
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/ime/activated", NotYetImplemented(), AppiumParams::class.java))
|
|
168
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/ime/deactivate", NotYetImplemented(), AppiumParams::class.java))
|
|
169
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/ime/activate", NotYetImplemented(), AppiumParams::class.java))
|
|
170
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/frame", NotYetImplemented(), AppiumParams::class.java))
|
|
171
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/window", NotYetImplemented(), AppiumParams::class.java))
|
|
172
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/window/:windowhandle/maximize", NotYetImplemented(), AppiumParams::class.java))
|
|
173
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/cookie", NotYetImplemented(), AppiumParams::class.java))
|
|
174
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/cookie", NotYetImplemented(), AppiumParams::class.java))
|
|
175
|
+
routeMap.addRoute(RouteDefinition(Method.DELETE, "/session/:sessionId/cookie", NotYetImplemented(), AppiumParams::class.java))
|
|
176
|
+
routeMap.addRoute(RouteDefinition(Method.DELETE, "/session/:sessionId/cookie/:name", NotYetImplemented(), AppiumParams::class.java))
|
|
177
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/title", NotYetImplemented(), AppiumParams::class.java))
|
|
178
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/element/:elementId/submit", NotYetImplemented(), AppiumParams::class.java))
|
|
179
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/element/:elementId/css/:propertyName", NotYetImplemented(), AppiumParams::class.java))
|
|
180
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/location", NotYetImplemented(), AppiumParams::class.java))
|
|
181
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/location", NotYetImplemented(), AppiumParams::class.java))
|
|
182
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/log", NotYetImplemented(), AppiumParams::class.java))
|
|
183
|
+
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/log/types", NotYetImplemented(), AppiumParams::class.java))
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
fun route(uri: String, method: Method, files: Map<String, String>): BaseResponse {
|
|
187
|
+
AndroidLogger.debug("Started processing $method request for '$uri'")
|
|
188
|
+
|
|
189
|
+
// Look for a route that matches this URL
|
|
190
|
+
val matchingRoute = routeMap.findMatchingRoute(method, uri)
|
|
191
|
+
?: return AppiumResponse(AppiumException("No such route: $uri"))
|
|
192
|
+
|
|
193
|
+
// If no route found, return a 404 Error Response
|
|
194
|
+
AndroidLogger.debug("Matched route definition: ${matchingRoute.javaClass}")
|
|
195
|
+
|
|
196
|
+
// Get the handler, parameter class and URI parameters
|
|
197
|
+
val handler = matchingRoute.handler
|
|
198
|
+
AndroidLogger.debug("Matched route handler: ${handler.javaClass}")
|
|
199
|
+
val paramClass = matchingRoute.paramClass
|
|
200
|
+
val uriParams = matchingRoute.getUriParams(uri)
|
|
201
|
+
|
|
202
|
+
// Get the appium params
|
|
203
|
+
val postJson = files["postData"]
|
|
204
|
+
|
|
205
|
+
var sessionId: String? = null
|
|
206
|
+
try {
|
|
207
|
+
// Parse the parameters
|
|
208
|
+
val appiumParams: AppiumParams = postJson?.let {
|
|
209
|
+
AndroidLogger.debug("Got raw post data: ${abbreviate(it, 300)}")
|
|
210
|
+
try {
|
|
211
|
+
paramClass.cast(Gson().fromJson<AppiumParams>(it, paramClass))
|
|
212
|
+
?: return AppiumResponse(InvalidArgumentException("Could not parse JSON: $it"))
|
|
213
|
+
} catch (e: JsonParseException) {
|
|
214
|
+
// If failed to parse params, throw an invalid argument exception
|
|
215
|
+
return AppiumResponse(InvalidArgumentException(e))
|
|
216
|
+
}
|
|
217
|
+
} ?: AppiumParams()
|
|
218
|
+
appiumParams.initUriMapping(uriParams)
|
|
219
|
+
|
|
220
|
+
// Validate the sessionId
|
|
221
|
+
if (appiumParams.sessionId != null
|
|
222
|
+
&& GlobalSession.exists && appiumParams.sessionId != GlobalSession.sessionId) {
|
|
223
|
+
return AppiumResponse(NoSuchDriverException("Invalid session ID ${appiumParams.sessionId!!}"))
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Execute the matching handler
|
|
227
|
+
sessionId = appiumParams.sessionId
|
|
228
|
+
val handlerResult = handler.handle(appiumParams)
|
|
229
|
+
|
|
230
|
+
// If it's a new session, pull out the newly created Session ID
|
|
231
|
+
if (handlerResult is GlobalSession) {
|
|
232
|
+
sessionId = handlerResult.sessionId
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Construct the response and serve it
|
|
236
|
+
val appiumResponse = AppiumResponse(handlerResult, sessionId)
|
|
237
|
+
AndroidLogger.debug("Finished processing $method request for '$uri'")
|
|
238
|
+
return appiumResponse
|
|
239
|
+
} catch (e: Throwable) {
|
|
240
|
+
var err = e
|
|
241
|
+
if (e is NoClassDefFoundError) {
|
|
242
|
+
err = IllegalStateException("${e.message} " +
|
|
243
|
+
"Consider adding the appropriate dependency containing the missing class into " +
|
|
244
|
+
"'additionalAndroidTestDependencies' and/or 'additionalAppDependencies' property values of " +
|
|
245
|
+
"'espressoBuildConfig' capability", e)
|
|
246
|
+
}
|
|
247
|
+
return AppiumResponse(err, sessionId)
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
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.http
|
|
18
|
+
|
|
19
|
+
import com.google.gson.GsonBuilder
|
|
20
|
+
import fi.iki.elonen.NanoHTTPD
|
|
21
|
+
import io.appium.espressoserver.lib.helpers.AndroidLogger
|
|
22
|
+
import io.appium.espressoserver.lib.helpers.StringHelpers
|
|
23
|
+
import io.appium.espressoserver.lib.helpers.setAccessibilityServiceState
|
|
24
|
+
import io.appium.espressoserver.lib.http.response.AppiumResponse
|
|
25
|
+
import io.appium.espressoserver.lib.http.response.BaseResponse
|
|
26
|
+
import java.io.IOException
|
|
27
|
+
import java.net.SocketException
|
|
28
|
+
import java.util.*
|
|
29
|
+
|
|
30
|
+
const val DEFAULT_PORT = 6791
|
|
31
|
+
|
|
32
|
+
object Server : NanoHTTPD(DEFAULT_PORT) {
|
|
33
|
+
|
|
34
|
+
private var router: Router? = null
|
|
35
|
+
|
|
36
|
+
@Volatile
|
|
37
|
+
var isStopRequestReceived: Boolean = false
|
|
38
|
+
private set
|
|
39
|
+
|
|
40
|
+
private fun buildFixedLengthResponse(response: BaseResponse): Response {
|
|
41
|
+
val gsonBuilder = GsonBuilder()
|
|
42
|
+
.serializeNulls()
|
|
43
|
+
return newFixedLengthResponse(response.httpStatus,
|
|
44
|
+
"application/json", gsonBuilder.create().toJson(response))
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
override fun serve(session: IHTTPSession): Response {
|
|
48
|
+
val files = LinkedHashMap<String, String>()
|
|
49
|
+
val response = try {
|
|
50
|
+
session.parseBody(files)
|
|
51
|
+
router!!.route(session.uri, session.method, files)
|
|
52
|
+
} catch (e: Exception) {
|
|
53
|
+
when (e) {
|
|
54
|
+
is RuntimeException, is IOException, is ResponseException ->
|
|
55
|
+
AppiumResponse(e)
|
|
56
|
+
else -> throw e
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (response is AppiumResponse) {
|
|
61
|
+
if (response.httpStatus === Response.Status.OK) {
|
|
62
|
+
AndroidLogger.info("Responding to server with value: " +
|
|
63
|
+
StringHelpers.abbreviate(response.value?.toString(), 300))
|
|
64
|
+
} else {
|
|
65
|
+
AndroidLogger.info("Responding to server with error: ${response.value}")
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return try {
|
|
70
|
+
buildFixedLengthResponse(response)
|
|
71
|
+
} catch (e: RuntimeException) {
|
|
72
|
+
buildFixedLengthResponse(AppiumResponse(e))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@Throws(IOException::class)
|
|
78
|
+
override fun start() {
|
|
79
|
+
if (super.isAlive()) {
|
|
80
|
+
//kill the server if its already running
|
|
81
|
+
try {
|
|
82
|
+
super.stop()
|
|
83
|
+
} catch (e: Exception) {
|
|
84
|
+
//ignore the exception
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setAccessibilityServiceState()
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
super.start(SOCKET_READ_TIMEOUT, false)
|
|
92
|
+
} catch (e: SocketException) {
|
|
93
|
+
throw IllegalStateException("The application under test must require android.permission.INTERNET " +
|
|
94
|
+
"permission in its manifest", e)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
AndroidLogger.info("\nRunning Appium Espresso Server at port $DEFAULT_PORT\n")
|
|
98
|
+
router = Router()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
override fun stop() {
|
|
102
|
+
super.stop()
|
|
103
|
+
AndroidLogger.info("\nStopping Appium Espresso at port $DEFAULT_PORT\n")
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
fun makeRequestForServerToStop() {
|
|
107
|
+
isStopRequestReceived = true
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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.http.response
|
|
18
|
+
|
|
19
|
+
import android.util.Log
|
|
20
|
+
import java.util.UUID
|
|
21
|
+
import fi.iki.elonen.NanoHTTPD.Response.Status
|
|
22
|
+
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
23
|
+
import io.appium.espressoserver.lib.handlers.exceptions.MESSAGE_UNKNOWN_ERROR
|
|
24
|
+
|
|
25
|
+
class AppiumResponse : BaseResponse {
|
|
26
|
+
internal var value: Any? = null
|
|
27
|
+
var sessionId: String? = null
|
|
28
|
+
private set
|
|
29
|
+
// Unique Appium transaction ID
|
|
30
|
+
var id: String? = null
|
|
31
|
+
private set
|
|
32
|
+
|
|
33
|
+
constructor(value: Any?) {
|
|
34
|
+
init(value, null)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
constructor(value: Any?, sessionId: String?) {
|
|
38
|
+
init(value, sessionId)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private fun formatError(e: AppiumException,
|
|
42
|
+
originalStacktrace: String): Map<String, String> = mapOf(
|
|
43
|
+
"error" to e.error(),
|
|
44
|
+
"message" to (e.message ?: MESSAGE_UNKNOWN_ERROR),
|
|
45
|
+
"stacktrace" to originalStacktrace
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
private fun init(value: Any?, sessionId: String?) {
|
|
49
|
+
if (value is Throwable) {
|
|
50
|
+
val e = if (value is AppiumException) value else AppiumException(value)
|
|
51
|
+
this.value = formatError(e, Log.getStackTraceString(value))
|
|
52
|
+
this.httpStatus = e.status()
|
|
53
|
+
} else {
|
|
54
|
+
this.value = value
|
|
55
|
+
this.httpStatus = Status.OK
|
|
56
|
+
}
|
|
57
|
+
this.sessionId = sessionId
|
|
58
|
+
this.id = UUID.randomUUID().toString()
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
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.http.response
|
|
18
|
+
|
|
19
|
+
import fi.iki.elonen.NanoHTTPD.Response.Status
|
|
20
|
+
|
|
21
|
+
abstract class BaseResponse {
|
|
22
|
+
@Transient
|
|
23
|
+
var httpStatus: Status? = null
|
|
24
|
+
protected set
|
|
25
|
+
}
|
package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AlertParams.kt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
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.model
|
|
18
|
+
|
|
19
|
+
data class AlertParams(
|
|
20
|
+
var buttonLabel: String? = null
|
|
21
|
+
) : AppiumParams()
|
package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AppiumParams.kt
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
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.model
|
|
18
|
+
|
|
19
|
+
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const val SESSION_ID_PARAM_NAME = "sessionId"
|
|
23
|
+
const val ELEMENT_ID_PARAM_NAME = "elementId"
|
|
24
|
+
|
|
25
|
+
open class AppiumParams {
|
|
26
|
+
var uriParams:MutableMap<String, String>? = null
|
|
27
|
+
|
|
28
|
+
val sessionId: String?
|
|
29
|
+
get() = getUriParameterValue(SESSION_ID_PARAM_NAME)
|
|
30
|
+
|
|
31
|
+
var elementId: String?
|
|
32
|
+
get() = getUriParameterValue(ELEMENT_ID_PARAM_NAME)
|
|
33
|
+
set(elementId) = setUriParameterValue(ELEMENT_ID_PARAM_NAME, elementId ?:
|
|
34
|
+
throw AppiumException("Cannot set 'elementId' to null"))
|
|
35
|
+
|
|
36
|
+
fun initUriMapping(params: Map<String, String>) {
|
|
37
|
+
uriParams = params.toMutableMap()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fun getUriParameterValue(name: String): String? {
|
|
41
|
+
uriParams?.let {
|
|
42
|
+
return it[name]
|
|
43
|
+
}
|
|
44
|
+
return null
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private fun setUriParameterValue(name: String, value: String) {
|
|
48
|
+
uriParams?.let {
|
|
49
|
+
it[name] = value
|
|
50
|
+
} ?: run {
|
|
51
|
+
uriParams = mutableMapOf(Pair(name, value))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
}
|