java - perdido - localizar iphone por gps
Appium: ¿cómo establecer la ubicación geográfica en el dispositivo iOS? (4)
Meta: -
- iOS emulador dispositivo v10.3
- Appium java-client v5.0.0 BETA8
- Selenio v3.4.0
En realidad, estoy tratando de configurar GeoLocation
en un dispositivo iOS
usando la automatización de Appium
XCUITest
. He intentado con el código siguiente, que está funcionando bien en el dispositivo Android
mientras lanzo una excepción en iOS
:
import org.openqa.selenium.html5.Location;
AppiumServiceBuilder builder = new AppiumServiceBuilder().usingAnyFreePort().withAppiumJS("path/to/appium/main.js");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("automationName", "XCUITest");
IOSDriver driver= new IOSDriver(builder, capabilities);
//Here this code working fine with AndroidDriver
Location location = new Location(latitude, longitude, altitude);
driver.setLocation(location);
Excepción:
org.openqa.selenium.WebDriverException: El método aún no se ha implementado (ADVERTENCIA: el servidor no proporcionó ninguna información de pila)
Y cuando intento usar JavascriptExecutor como:
Map<String, String> args = new HashMap<String, String>();
args.put("address", "Address");
((JavascriptExecutor)webDriver).executeScript("mobile:setLocation", args);
Excepción:
org.openqa.selenium.UnsupportedCommandException: comando móvil desconocido "setLocation". Solo desplazarse, deslizar, pellizcar, doblePasar, dosPegarTap, tocarEncontrar y tocar, tocar, arrastrar desdeAlaDuración, seleccionarPederWheelValue, los comandos de alerta son compatibles. (ADVERTENCIA: el servidor no proporcionó ninguna información de pila)
Y cuando intento como:
import org.openqa.selenium.remote.DriverCommand;
Map<String, String> args = new HashMap<String, String>();
args.put("location", "Address");
driver.execute(DriverCommand.SET_LOCATION, args);
Excepción:
org.openqa.selenium.WebDriverException: El método aún no se ha implementado (ADVERTENCIA: el servidor no proporcionó ninguna información de pila)
¿Hay alguna forma de configurar GeoLocation
en iOS
usando appium?
Appium Log:
[debug] [JSONWP Proxy] Obtuve una respuesta con el estado 200: "{/ n /" value / ": {/ n /" state / ": /" success / ", / n /" os / ": {/ n / "nombre /": / "iOS /", / n / "versión /": / "10.3.1 /" / n}, / n / "ios /": {/ n / "simulatorVersion /": / "10.3 .1 / ", / n /" ip / ": /" 192.168.1.17 / "/ n}, / n /" build / ": {/ n /" time / ": /" 29 de agosto de 2017 15:40: 09 / "/ n} / n}, / n /" sessionId / ": /" 10A97A93-D13A-4888-A536-0D62E0674A2B / ", / n /" estado / ": 0 / n}"
[debug] [XCUITest] WebDriverAgent ejecutándose en ip ''192.168.1.17'' [debug] [XCUITest] WebDriverAgent se inició correctamente después de 16121ms [debug] [BaseDriver] Evento ''wdaSessionAttempted'' registrado en 1504013035278 (18:53:55 GMT + 0530 (IST) )) [debug] [XCUITest] Enviando el comando createSession a WDA [debug] [JSONWP Proxy] Proxying [POST / session] a [POST http: // localhost: 8100 / session] con body: {"desiredCapabilities": {"bundleId ":" com.example.apple-samplecode.UICatalog "," arguments ": []," environment ": {}," shouldWaitForQuiescence ": true," shouldUseTestManagerForVisibilityDetection ": false," maxTypingFrequency ": 120," shouldUseSingletonTestManager ": true}} [debug] [JSONWP Proxy] Obtuve respuesta con el estado 200: {"value": {"sessionId": "43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C", "capabilities": {"device": "iphone" , "browserName": "UICatalog", "sdkVersion": "10.3.1", "CFBundleIdentifier": "com.example.apple-samplecode.UICatalog"}}, "sessionId": "43710C7E-2FDE-4A35-A2E0- 4D309EE2CE9C "," estado ": 0} [depuración] [BaseDriver] Evento ''wdaSessio nIniciado ''registrado en 1504013038184 (18:53:58 GMT + 0530 (IST)) [depuración] [XCUITest] Se encontró la carpeta de datos derivados de WDA:'' /Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-dikkwtrisltbeobjmfvpthwwekvs '' [XCUITest] Estableciendo los permisos ''555'' en la carpeta ''/Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-dikkwtrisltbeobjmfvpthwwekvs/Logs/Test/Attachments'' [debug] [XCUITest] Se encontró la carpeta de datos derivados de WDA: ''/ Users / omprakash.mishra / Library / Developer / Xcode / DerivedData / WebDriverAgent-folfazwwukpzfkegdblpnfuwlvfn ''[XCUITest] Configurando'' 555 ''permisos para'' /Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-folfazwwukpzfkegdblpnfuwlvfn/Logs/Test / Carpeta de archivos adjuntos [depuración] [BaseDriver] Evento ''wdaPermsAdjusted'' registrado en 1504013038192 (18:53:58 GMT + 0530 (IST)) [depuración] [BaseDriver] Evento ''wdaStarted'' registrado en 1504013038193 (18:53:58 GMT) +0530 (IST)) [depuración] [XCUITest] Configuración de la orientación inicial a ''PORTRAIT'' [depuración] [Proxy JSONWP] [POST / orientación] a [POST http: // localhost: 8100 / session / 43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C / orientation] con body: {"orientation": "PORTRAIT"} [debug] [JSONWP Proxy] Got respuesta con estado 200: {"value": {}, "sessionId": "43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C", "estado": 0} [depuración] [BaseDriver] Evento ''orientationSet'' registrado en 1504013038453 (18 : 53: 58 GMT + 0530 (IST)) [Appium] Nueva sesión de XCUITestDriver creada con éxito, sesión 6909c363-12a5-4a21-9298-c7f750ba7e09 agregada a la lista de sesiones maestras [depuración] [BaseDriver] Evento ''newSessionStarted'' registrada en 1504013038456 (18 : 53: 58 GMT + 0530 (IST)) [debug] [MJSONWP] Respondiendo al cliente con driver.createSession () result: {"webStorageEnabled": falso, "locationContextEnabled": falso, "browserName": "", "plataforma ":" MAC "," javascriptEnabled ": true," databaseEnabled ": falso," takesScreenshot ": true," networkConnectionEnabled ": falso," aplicación ":" src / test / resources / executor / UICatalog.app "," maxTypingFrequency " ":" 120 "," newCommandTimeout ": 0," platformVersion ":" 10.3 "," auto mationName ":" XCUITest "," platformName ":" iOS "," udid ":" 0A41ECE4-6D03-4FEA-A82A-858FDBA6620E "," deviceName ":" iPhone 6 "} [HTTP] <- POST / wd / hub / session 200 46915 ms - 512 [HTTP] -> GET / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 {} [depurar] [MJSONWP] Llamar a AppiumDriver.getSession () con args: [" 6909c363-12a5-4a21-9298-c7f750ba7e09 "] [debug] [XCUITest] Ejecutando el comando ''getSession'' [debug] [JSONWP Proxy] Proxying [GET /] a [GET http: // localhost: 8100 / session / 43710C7E-2FDE -4A35-A2E0-4D309EE2CE9C] sin cuerpo [depuración] [Proxy JSONWP] Obtuve respuesta con el estado 200: "{/ n /" valor / ": {/ n /" sessionId / ": /" 43710C7E-2FDE-4A35- A2E0-4D309EE2CE9C / ", / n /" capacidades / ": {/ n /" dispositivo / ": /" iphone / ", / n /" browserName / ": /" UICatalog / ", / n
/ "sdkVersion /": / "10.3.1 /", / n / "CFBundleIdentifier /": / "com.example.apple-samplecode.UICatalog /" / n} / n}, / n / "sessionId /": / "43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C /", / n / "status /": 0 / n} "[XCUITest] Fusionando casquetes WDA sobre tapas de Appium para la respuesta detallada de sesión [depuración] [MJSONWP] Respondiendo al cliente con driver.getSession () result: {"udid": "", "app": "src / test / resources / executor / UICatalog.app", "maxTypingFrequency": 120, "newCommandTimeout": 0, "platformVersion": " 10.3 "," nombre de automatización ":" XCUITest "," nombre de plataforma ":" iOS "," nombre de dispositivo ":" iPhone 6 "," dispositivo ":" iphone "," browserName ":" UICatalog "," sdkVersion ":" 10.3 .1 "," CFBundleIdentifier ":" com.example.apple-samplecode.UICatalog "} [HTTP] <- GET / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 200 110 ms - 406 [HTTP ] -> GET / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 {} [debug] [MJSONWP] Llamando a AppiumDriver.getSession () con args: ["6909c363-12a5-4a21-9298-c7f750ba7e09" ] [debug] [XCUITest] Ejecutando el comando ''getSession'' [debug] [JSONWP Proxy ] Proxying [GET /] a [GET http: // localhost: 8100 / session / 43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C] sin cuerpo [debug] [JSONWP Proxy] Obtuve respuesta con el estado 200: "{/ n / "value /": {/ n / "sessionId /": / "43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C /", / n / "capacidades /": {/ n / "dispositivo /": / "iphone /" , / n / "browserName /": / "UICatalog /", / n
/ "sdkVersion /": / "10.3.1 /", / n / "CFBundleIdentifier /": / "com.example.apple-samplecode.UICatalog /" / n} / n}, / n / "sessionId /": / "43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C /", / n / "status /": 0 / n} "[XCUITest] Fusionando casquetes WDA sobre tapas de Appium para la respuesta detallada de sesión [depuración] [MJSONWP] Respondiendo al cliente con driver.getSession () result: {"udid": "", "app": "src / test / resources / executor / UICatalog.app", "maxTypingFrequency": 120, "newCommandTimeout": 0, "platformVersion": " 10.3 "," nombre de automatización ":" XCUITest "," nombre de plataforma ":" iOS "," nombre de dispositivo ":" iPhone 6 "," dispositivo ":" iphone "," browserName ":" UICatalog "," sdkVersion ":" 10.3 .1 "," CFBundleIdentifier ":" com.example.apple-samplecode.UICatalog "} [HTTP] <- GET / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 200 103 ms - 406 [HTTP ] -> POST / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 / location {"location": {"altitude": 0, "latitude": 20.672267, "hCode": 1751403001, "class" : "org.openqa.selenium.html5.Location", "longitude": 83.1649}} [debug] [MJSONWP] Llamando a AppiumDri ver.setGeoLocation () con args: [{"altitude": 0, "latitude": 20.672267, "hCode": 1751403001, "class": "org.openqa.selenium.html5.Location", "longitude": 83.1649} , "6909c363-12a5-4a21-9298-c7f750ba7e09"] [debug] [XCUITest] Ejecutando el comando ''setGeoLocation'' [HTTP] <- POST / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 / location 501 30 ms - 122 org.openqa.selenium.WebDriverException: El método aún no se ha implementado (ADVERTENCIA: El servidor no proporcionó ninguna información de la pila) Duración o tiempo de espera del comando: 58 milisegundos Información de compilación: versión: ''3.4.0'', revisión: ''desconocido'', tiempo: ''desconocido'' Información del sistema: host: ''Abhays-MacBook-Air.local'', ip: ''fe80: 0: 0: 0: 4fc: aa3c: d673: 369e% en0'', os.nombre: ''Mac OS X'', os.arch: ''x86_64'', os.version: ''10 .12.5 '', java.version:'' 1.8.0_131 ''Información del controlador: io.appium.java_client.ios.IOSDriver Capabilities [{app = src / test / resources / executor / UICatalog.app, networkConnectionEnabled = false, databaseEnabled = false, deviceName = iPhone 6, plataforma = MAC, maxTypingFrequency = 120, newC ommandTimeout = 0, platformVersion = 10.3, webStorageEnabled = false, locationContextEnabled = false, automationName = XCUITest, browserName =, takesScreenshot = true, javascriptEnabled = true, platformName = iOS, udid = 0A41ECE4-6D03-4FEA-A82A-858FDBA6620E}] ID de sesión : 6909c363-12a5-4a21-9298-c7f750ba7e09 en sun.reflect.NativeConstructorAccessorImpl.newInstance0 (método nativo) en sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) en sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java: 45) en java.lang.reflect.Constructor.newInstance (Constructor.java:423) en org.openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:215) en org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed (ErrorHandler.java:167) en org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:671) en io.appium.java_client.DefaultGenericMobileDriver.execute (DefaultGenericMobileDriver.java:42) en io.appium.java_client .AppiumDriver.execute (AppiumDriver.java:1) en io.appium.java_client.ios.IOSDriver.execute (IOSDriver.java:1) en io.appium.java_client.AppiumExecutionMethod.execute (AppiumExecutionMethod.java:46) en org. openqa.selenium.remote.html5.RemoteLocationContext.setLocation (RemoteLocationContext.java:50) en io.appium.java_client.AppiumDriver.setLocation (AppiumDriver.java:400) en org.openqa.selenium.html5.LocationContext $ setLocation.call ( Fuente desconocida) en org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:45) en org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:110) en org.codehaus. groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:122) en executor.com.bqurious.keyword.mobile.ios.BqIosSetLocationTest.setLocation (BqIosSetLocationTest.groovy: 72) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo) ) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) en sun.reflect.DelegatingMethodAcc essorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:498) en org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) en org. junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) en org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) en org.junit.internal.runners.statements.InvokeMethod. evalúa (InvokeMethod.java:17) en org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) en org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78) en org.junit.runners.BlockJUnit4ClassRunner .runChild (BlockJUnit4ClassRunner.java:57) en org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) en org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) en org.junit. runners.ParentRunner.runChildren (ParentRunner.java:288) en org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) en org.junit.runners.ParentRunner $ 2.evaluar (P arentRunner.java:268) en org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:26) en org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:27) en org .junit.runners.ParentRunner.run (ParentRunner.java:363) en org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:50) en org.eclipse.jdt.internal.junit.runner .TestExecution.run (TestExecution.java:38) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382) en org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java) : 192) [HTTP] -> DELETE / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 {} [debug] [MJSONWP] Llamando a AppiumDriver.deleteSession () con args: ["6909c363-12a5-4a21 -9298-c7f750ba7e09 "] [debug] [BaseDriver] Event ''quit SessionRequested ''registrado en 1504013038955 (18:53:58 GMT + 0530 (IST)) [depuración] [Proxy JSONWP] Reencaminando [DELETE / session / 6909c363-12a5-4a21-9298-c7f750ba7e09] a [DELETE http: // localhost: 8100 / session / 43710C7E-2FDE-4A35-A2E0-4D309EE2CE9C] sin cuerpo [debug] [JSONWP Proxy] Obtuve respuesta con el estado 200: "{/ n /" value / ": {/ n / n}, / n / "sessionId /": / "28E97E0B-DF47-4325-8991-A28B77134EDB /", / n / "status /": 0 / n} "[XCUITest] Apagando los subprocesos [XCUITest] Apagando el proceso de xcodebuild (pid 37304 ) [XCUITest] xcodebuild salió con el código ''nulo'' y la señal ''SIGTERM'' [depuración] [XCUITest] Se encontró la carpeta de datos derivados WDA: ''/Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-dikkwtrisltbeobjmfvpthwwekvs'' [XCUITest ] Establecer los permisos ''755'' en la carpeta ''/Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-dikkwtrisltbeobjmfvpthwwekvs/Logs/Test/Attachments'' [debug] [XCUITest] Se encontró la carpeta de datos derivados de WDA: ''/ Users / omprakash.mishra / Library / Developer / Xcode / D erivedData / WebDriverAgent-folfazwwukpzfkegdblpnfuwlvfn ''[XCUITest] Establecimiento de permisos'' 755 ''en la carpeta'' /Users/omprakash.mishra/Library/Developer/Xcode/DerivedData/WebDriverAgent-folfazwwukpzfkegdblpnfuwlvfn/Logs/Test/Attachments ''[depuración] [XCUITest] Sin borrar archivos de registro. Use la funciónclearSystemFiles
para encenderse. [debug] [iOSLog] Deteniendo la captura de registro de iOS [Appium] Eliminando la sesión 6909c363-12a5-4a21-9298-c7f750ba7e09 de nuestra lista de sesiones maestra [debug] [BaseDriver] Evento ''quitSessionFinished'' registrado en 1504013039408 (18:53:59 GMT + 0530 (IST)) [debug] [MJSONWP] Respuesta recibida: null [debug] [MJSONWP] Pero eliminando sesión, por lo que no devuelve [debug] [MJSONWP] Respondiendo al cliente con driver.deleteSession () result: null [HTTP] < - DELETE / wd / hub / session / 6909c363-12a5-4a21-9298-c7f750ba7e09 200 461 ms - 76
Parece que necesitas un AppiumDriver en su lugar. De acuerdo con este comentario
Puede usar el método setLocation para establecer la latitud y longitud en el emulador de Android o el simulador de iOS:
import org.openqa.selenium.html5.Location;
Ubicación loc = new Ubicación (20.0, 12.5, 1000); // latitud, longitud, altitud driver.setLocation (loc);
Este AppleScript funcionará.
public static void setLocation(Location loc) {
try {
String[] cmd = {"osascript", "-e",
"on menu_click(mList)/n" +
" local appName, topMenu, r/n" +
"/n" +
" -- Validate our input/n" +
" if mList''s length < 3 then error /"Menu list is not long enough/"/n" +
"/n" +
" -- Set these variables for clarity and brevity later on/n" +
" set {appName, topMenu} to (items 1 through 2 of mList)/n" +
" set r to (items 3 through (mList''s length) of mList)/n" +
"/n" +
" -- This overly-long line calls the menu_recurse function with/n" +
" -- two arguments: r, and a reference to the top-level menu/n" +
" tell application /"System Events/" to my menu_click_recurse(r, ((process appName)''s ¬/n" +
" (menu bar 1)''s (menu bar item topMenu)''s (menu topMenu)))/n" +
"end menu_click/n" +
"/n" +
"on menu_click_recurse(mList, parentObject)/n" +
" local f, r/n" +
"/n" +
" -- `f` = first item, `r` = rest of items/n" +
" set f to item 1 of mList/n" +
" if mList''s length > 1 then set r to (items 2 through (mList''s length) of mList)/n" +
"/n" +
" -- either actually click the menu item, or recurse again/n" +
" tell application /"System Events/"/n" +
" if mList''s length is 1 then/n" +
" click parentObject''s menu item f/n" +
" else/n" +
" my menu_click_recurse(r, (parentObject''s (menu item f)''s (menu f)))/n" +
" end if/n" +
" end tell/n" +
"end menu_click_recurse/n" +
"/n" +
"application /""+simulatorAppName()+"/" activate /n" +
"delay 0.2/n" +
"menu_click({/""+simulatorAppName()+"/",/"Debug/", /"Location/", /"None/"})/n" +
"/n" +
"delay 0.2/n" +
"menu_click({/""+simulatorAppName()+"/",/"Debug/", /"Location/", /"Custom Location…/"})/n" +
"/n" +
"delay 0.2/n" +
"tell application /"System Events/"/n" +
" tell process /""+simulatorAppName()+"/"/n" +
" set value of text field 1 of window /"Custom Location/" to /""+loc.getLatitude()+"/"/n" +
" set value of text field 2 of window /"Custom Location/" to /""+loc.getLongitude()+"/"/n" +
" click UI Element /"OK/" of window /"Custom Location/"/n" +
" end tell/n" +
"end tell"
};
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
String lsString;
while ((lsString = bufferedReader.readLine()) != null) {
System.out.println(lsString);
}
try{Thread.sleep(10000);}catch (Exception e1){}
} catch (Exception e) {}
}
public static String simulatorAppName() {
return "Simulator";
}
Estoy de acuerdo con la solución de usar el script de Apple para establecer la geolocalización personalizada para el simulador de iOS porque Appium no admite dicho método para iOS (Apple no proporciona API para el marco XCTest para simular la ubicación del GPS)
Guión de Apple:
#!/usr/bin/env bash
osascript -e ''tell application "System Events"
tell process "Simulator"
set frontmost to true
click menu item "Custom Location…" of menu of menu item "Location" of menu "Debug" of menu bar 1
set popup to window "Custom Location"
set value of text field 1 of popup to (system attribute "Latitude")
set value of text field 2 of popup to (system attribute "Longitude")
click button "OK" of popup
end tell
end tell''
Estoy usando Python así que aquí está mi solución para Android e iOS:
def set_geo_location(self, latitude, longitude, altitude):
logging.info("set geo location")
try:
# Currently Apple does not provide any API for XCTest framework to simulate GPS location
self.driver.set_location(latitude=latitude, longitude=longitude, altitude=altitude)
except WebDriverException:
# this will launch Apple Script to automatically set custom GPS location on iOS simulator
subprocess.call([os.path.join(PROJECT_ROOT, "set_geolocation_for_iOS.sh")],
env={"Latitude": latitude, "Longitude": longitude}) # bash cli command for iOS simulator
sleep(2)
Y estoy pasando GPS cordinates en ese método:
set_geo_location("-77.85", "166.66", "10")