Skip to content

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

@ghost

Description

Description

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

Environment

  • Java client build version or git revision if you use some snapshot: 9.1.0
  • Appium server version or git revision if you use some snapshot: 2.4.1
  • Desktop OS/version used to run Appium if necessary: MAC OS
  • Node.js version (unless using Appium.app|exe) or Appium CLI or Appium.app|exe: 18.19.0
  • Mobile platform/version under test: android
  • Real device or emulator/simulator: emulator

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions