appium / java-client

Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol
Apache License 2.0
1.18k stars 752 forks source link

setLocation with "io.appium.java_client.Location" throws "Error: longitude must be provided" #2108

Closed tukrachun closed 5 months ago

tukrachun commented 5 months ago

Description

Failed to setLocation with "io.appium.java_client.Location"

Environment

Details

The issue might be from "SupportsLocation"

default void setLocation(io.appium.java_client.Location location) {
        ImmutableMap.Builder<String, Object> locationParameters = ImmutableMap.builder();
        locationParameters.put("latitude", location.getLatitude());
        locationParameters.put("longitude", location.getLongitude());
        Optional.ofNullable(location.getAltitude()).ifPresent(altitude -> locationParameters.put("altitude", altitude));
        execute(MobileCommand.SET_LOCATION, Map.of("location", locationParameters));
    }

Should it be "locationParameters.build()" instead of "locationParameters" in execute method call?

Appium Server Log

 --> POST /wd/hub/session/18706d75-ea01-4f72-b15e-3861c384e47d/location
[HTTP] {"location":{"class":"com.google.common.collect.ImmutableMap$Builder"}}
[AndroidUiautomator2Driver@b8a0 (18706d75)] Calling AppiumDriver.setGeoLocation() with args: [{"class":"com.google.common.collect.ImmutableMap$Builder"},"18706d75-ea01-4f72-b15e-3861c384e47d"]
[AndroidUiautomator2Driver@b8a0 (18706d75)] Encountered internal error running command: Error: longitude must be provided
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at formatLocationValue (/Users/rachun/.appium/node_modules/appium-uiautomator2-driver/node_modules/io.appium.settings/lib/commands/geolocation.js:46:15)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at SettingsApp.setGeoLocation (/Users/rachun/.appium/node_modules/appium-uiautomator2-driver/node_modules/io.appium.settings/lib/commands/geolocation.js:60:44)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AndroidUiautomator2Driver.setGeoLocation (/Users/rachun/.appium/node_modules/appium-uiautomator2-driver/node_modules/appium-android-driver/lib/commands/geolocation.js:22:26)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at commandExecutor (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/@appium/base-driver/lib/basedriver/driver.ts:106:18)
[AndroidUiautomator2Driver@b8a0 (18706d75)] From previous event:
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at commandExecutor (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/@appium/base-driver/lib/basedriver/driver.ts:105:15)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at /Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/async-lock/lib/index.js:171:12
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AsyncLock._promiseTry (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/async-lock/lib/index.js:306:31)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at exec (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/async-lock/lib/index.js:170:9)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AsyncLock.acquire (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/async-lock/lib/index.js:189:3)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AndroidUiautomator2Driver.executeCommand (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/@appium/base-driver/lib/basedriver/driver.ts:122:39)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at processTicksAndRejections (node:internal/process/task_queues:95:5)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at defaultBehavior (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/lib/appium.js:1109:14)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AppiumDriver.executeWrappedCommand (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/lib/appium.js:1215:16)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at AppiumDriver.executeCommand (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/lib/appium.js:1121:17)
[AndroidUiautomator2Driver@b8a0 (18706d75)]     at asyncHandler (/Users/rachun/.nvm/versions/node/v18.19.0/lib/node_modules/appium/node_modules/@appium/base-driver/lib/protocol/protocol.js:393:19)
[HTTP] <-- POST /wd/hub/session/18706d75-ea01-4f72-b15e-3861c384e47d/location 500 8 ms - 614

Code To Reproduce Issue [ Good To Have ]

((SupportsLocation) driver).setLocation(new Location(42.999141, -78.8210775));

Exception Stacktraces

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: longitude must be provided
Build info: version: '4.17.0', revision: 'e52b1be057*'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '14.2.1', java.version: '17.0.5'
Driver info: io.appium.java_client.android.AndroidDriver
Command: [18706d75-ea01-4f72-b15e-3861c384e47d, setLocation {location=com.google.common.collect.ImmutableMap$Builder@5e610ed7}]

    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:185)
    at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:134)
    at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:51)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:190)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:237)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:519)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:592)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:302)
    at io.appium.java_client.remote.SupportsLocation.setLocation(SupportsLocation.java:93)

Link To Appium Logs

N/A