TestComplete samples (both built-in and additional) are located in the <Users>\Public\Public Documents\TestComplete 14 Samples folder.
Some file managers display the Public Documents folder as Documents.
In TestComplete, you can retrieve and emulate data obtained from a GPS receiver of your mobile device.
Note: | For detailed information on Android geolocation technologies, see the Location and Maps and Location Strategies sections of the Android Developer documentation.
For detailed information on iOS geolocation technologies, see the About Location Services sections of the iOS Developer documentation. |
Requirements
Android Requirements
-
Currently, TestComplete supports only GPS data providers, it cannot access network location providers that obtain location data from cell towers or Wi-Fi access points.
-
To access geolocation information:
-
The device must be connected to Android Debug Bridge.
-
The Android Agent service must be installed and running on the device.
-
-
To emulate location data, enable the Allow mock locations developer option on the mobile device. You can enable it from your tests using the
Mobile.Device("MyDevice").GPS.AllowMockLocations
property, or in one of the following ways:-
Launch the Android Agent on your device.
-
Click Open Settings to Enable It in the Geolocation testing section and enable the setting in the subsequent window.
– or –
-
Open the Settings | Developer options screen.
Note: On Android 4.2 and later, the Developer options screen is hidden by default. To make it available, go to Settings | About phone and tap Build number 7 times. -
Find the Allow mock locations option and enable it.
Remember to disable the Allow mock locations setting and reboot the device after the testing is over. Else, you will not be able to use the GPS sensor.
-
iOS Requirements
-
The prepared application must be running on the device.
-
Location Services must be enabled on the device, and your running application must have a permission to use your location.
To allow the application to use your location:
-
Trigger the "AppName" Would Like to Use Your Current Location popup window on your device. You can do this from TestComplete by viewing the
Mobile.Device("MyDevice").GPS.Location
property in the Object Browser or by running the following code:JavaScript, JScript
Mobile.Device("MyDevice").GPS.Location;
Python
Mobile.Device('MyDevice').GPS.Location
VBScript
Mobile.Device("MyDevice").GPS.Location
DelphiScript
Mobile.Device('MyDevice').GPS.Location;
C++Script, C#Script
Mobile["Device"]("MyDevice")["GPS"]["Location"];
-
Touch OK to allow TestComplete to access the GPS data. The popup window will not appear again until you reinstall the application.
-
-
You can emulate location data only on mobile iOS devices.
To emulate location data, enable simulating mock locations for the application. You can do this by using the
Mobile.Device("MyDevice").GPS.AllowMockLocations
property.The AllowMockLocations
property is not persistent. It will be reset to false the next time you run the application.
About Geolocation Testing
Many mobile devices have a built-in GPS receiver that determines the geographic location of the device. Geolocation data can be used in many mobile applications: maps, navigation, tracking, cartography and so on.
When developing an application that uses geolocation data, you need to verify whether the application processes the data correctly. To test the application behavior in locations that differ from the actual location, or to test the application on emulators and virtual machines that have no GPS receiver, you may need to specify the so-called mock location - a predefined location that overrides the actual coordinates.
With TestComplete, you can retrieve GPS data from the device and create mobile tests. Besides, with TestComplete, you can specify and change mock location data directly from tests.
Accessing GPS Location Data From Scripts
To work with GPS locations on Android devices in tests, you use the AndroidGPS
object; to work with locations on iOS devices, you use the iOSGPS
object. You can use the object to get the current location or to set a mock location. To get the object, use the GPS
property of your tested mobile device.
To learn the current location, read the Mobile.Device.GPS.Location
property. It returns the current coordinates of the device.
Notes:
-
TestComplete does not determine whether the current location is a physical location (that is, retrieved from the GPS sensor) or a mock location (that is, it was emulated programmatically).
-
Location data is retrieved upon initializing the
GPSData
object. Once created, theGPSData
object stores the values that are actual at the moment. To update the location coordinates, re-initialize theGPSData
object by rereading theGPS.Location
property.When exploring GPS data in the Object Browser, keep in mind that the Refresh All button does not re-initialize the object.
The code below retrieves location data from the mobile device’s GPS sensor, posts it to the test log and shows the location in Google Maps:
JavaScript, JScript
function PostGPSLocation()
{
Mobile.SetCurrent("MyDevice");
// Check whether GPS is enabled
if (Mobile.Device().GPS.GPSEnabled)
{
// Obtain location data
var Longt = Mobile.Device().GPS.Location.Longitude;
var Lat = Mobile.Device().GPS.Location.Latitude;
// Output the location data
Log.Message("The device location is:");
switch (Mobile.Device().OSType)
{
case "Android":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Longt));
Log.Message("Latitude: " + aqConvert.VarToStr(Lat));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude));
Log.Message("Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Accuracy));
};
break;
case "iOS":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Longt));
Log.Message("Latitude: " + aqConvert.VarToStr(Lat));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude));
Log.Message("Speed: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Speed));
Log.Message("Course: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Course));
Log.Message("Horizontal Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.HorizontalAccuracy));
Log.Message("Vertical Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.VerticalAccuracy));
};
break;
}
// Open Google Maps in the browser and pass the coordinates as URL parameters
Browsers.Item(Browsers.btIExplorer).Run("http://maps.google.com/maps?q=loc:" + aqConvert.VarToStr(Lat) + "," + aqConvert.VarToStr(Longt));
}
}
Python
def PostGPSLocation():
Mobile.SetCurrent('MyDevice')
# Check if GPS is enabled
if Mobile.Device().GPS.GPSEnabled:
# Obtain location data
Longt = Mobile.Device().GPS.Location.Longitude
Lat = Mobile.Device().GPS.Location.Latitude
# Output the location data
Log.Message('The device location is:')
if Mobile.Device().OSType == 'Android':
Log.Message('Longitude: ' + IntToStr(Longt))
Log.Message('Latitude: ' + IntToStr(Lat))
Log.Message('Altitude: ' + VarToStr(Mobile.Device().GPS.Location.Altitude))
Log.Message('Accuracy: '+ VarToStr(Mobile.Device().GPS.Location.Accuracy))
elif Mobile.Device().OSType == 'iOS':
Log.Message('Longitude: ' + IntToStr(Longt))
Log.Message('Latitude: ' + IntToStr(Lat))
Log.Message('Altitude: ' + VarToStr(Mobile.Device().GPS.Location.Altitude))
Log.Message('Speed: ' + VarToStr(Mobile.Device().GPS.Location.Speed))
Log.Message('Horizontal Accuracy: ' + VarToStr(Mobile.Device().GPS.Location.HorizontalAccuracy))
Log.Message('Vertical Accuracy: ' + VarToStr(Mobile.Device().GPS.Location.VerticalAccuracy))
# Open Google Maps in the browser and pass the coordinates as URL parameters
Browsers.Item[Browsers.btIExplorer].Run('http://maps.google.com/maps?q=loc:' + IntToStr(Lat) + ',' + IntToStr(Longt))
VBScript
Sub PostGPSLocation
Call Mobile.SetCurrent("MyDevice")
' Check whether GPS is enabled
If Mobile.Device.GPS.GPSEnabled Then
' Obtain location data
Longt = Mobile.Device.GPS.Location.Longitude
Lat = Mobile.Device.GPS.Location.Latitude
' Output the location data
Call Log.Message("The device location is:")
Select Case Mobile.Device.OSType
Case "Android"
Call Log.Message("Longitude: "& aqConvert.VarToStr(Longt))
Call Log.Message("Latitude: "& aqConvert.VarToStr(Lat))
Call Log.Message("Altitude: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude))
Call Log.Message("Accuracy: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.Accuracy))
Case "iOS"
Call Log.Message("Longitude: "& aqConvert.VarToStr(Longt))
Call Log.Message("Latitude: "& aqConvert.VarToStr(Lat))
Call Log.Message("Altitude: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude))
Call Log.Message("Speed: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.Speed))
Call Log.Message("Course: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.Course))
Call Log.Message("Horizontal Accuracy: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.HorizontalAccuracy))
Call Log.Message("Vertical Accuracy: "& aqConvert.VarToStr(Mobile.Device.GPS.Location.VerticalAccuracy))
End Select
' Open Google Maps in the browser and pass the coordinates as URL parameters
Call Browsers.Item(Browsers.btIExplorer).Run("http://maps.google.com/maps?q=loc:" & aqConvert.VarToStr(Lat) & "," & aqConvert.VarToStr(Longt))
End If
End Sub
DelphiScript
procedure PostGPSLocation;
var Longt, Lat;
begin
Mobile.SetCurrent('MyDevice');
// Check whether GPS is enabled
if Mobile.Device.GPS.GPSEnabled then
begin
// Obtain location data
Longt := Mobile.Device.GPS.Location.Longitude;
Lat := Mobile.Device.GPS.Location.Latitude;
// Output the location data
Log.Message('The device location is:');
case Mobile.Device.OSType of
'Android':
begin
Log.Message('Longitude: ' + aqConvert.VarToStr(Longt));
Log.Message('Latitude: ' + aqConvert.VarToStr(Lat));
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message('Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Accuracy));
end;
'iOS':
begin
Log.Message('Longitude: ' + aqConvert.VarToStr(Longt));
Log.Message('Latitude: ' + aqConvert.VarToStr(Lat));
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message('Speed: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Speed));
Log.Message('Course: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Course));
Log.Message('Horizontal Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.HorizontalAccuracy));
Log.Message('Vertical Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.VerticalAccuracy));
end;
end;
// Open Google Maps in the browser and pass the coordinates as URL parameters
Browsers.Item(Browsers.btIExplorer).Run('http://maps.google.com/maps?q=loc:'+aqConvert.VarToStr(Lat) + ',' + aqConvert.VarToStr(Longt));
end;
end;
C++Script, C#Script
function PostGPSLocation()
{
Mobile.SetCurrent("MyDevice");
// Check whether GPS is enabled
if (Mobile["Device"]["GPS"]["GPSEnabled"])
{
// Obtain location data
var Longt = Mobile["Device"]["GPS"]["Location"]["Longitude"];
var Lat = Mobile["Device"]["GPS"]["Location"]["Latitude"];
// Output the location data
Log["Message"]("The device location is:");
switch (Mobile["Device"]["OSType"])
{
case "Android":
{
Log["Message"]("Longitude: " + aqConvert["VarToStr"](Longt));
Log["Message"]("Latitude: " + aqConvert["VarToStr"](Lat));
Log["Message"]("Altitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Altitude"]));
Log["Message"]("Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Accuracy"]));
};
break;
case "iOS":
{
Log["Message"]("Longitude: " + aqConvert["VarToStr"](Longt));
Log["Message"]("Latitude: " + aqConvert["VarToStr"](Lat));
Log["Message"]("Altitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Altitude"]));
Log["Message"]("Speed: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Speed"]));
Log["Message"]("Course: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Course"]));
Log["Message"]("Horizontal Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["HorizontalAccuracy"]));
Log["Message"]("Vertical Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["VerticalAccuracy"]));
};
break;
}
// Open Google Maps in the browser and pass the coordinates as URL parameters
Browsers["Item"](Browsers["btIExplorer"])["Run"]("http://maps.google.com/maps?q=loc:" + aqConvert["VarToStr"](Lat) + "," + aqConvert["VarToStr"](Longt));
}
}
To specify mock location data, use the Mobile.Device.GPS.SetLocation
method. The input parameters of this method define the coordinates and the accuracy of the desired location.
The example below demonstrates how to specify a mock location from a test. The sample code retrieves information about the current location of the device, changes the coordinates and writes the modified data to the device. The current and modified coordinates are posted to the test log and are displayed in Google Maps.
JavaScript
function MockGPSLocation()
{
Mobile.SetCurrent("MyDevice");
// Check if GPS is enabled
if (Mobile.Device().GPS.GPSEnabled)
{
// Enable the "Allow mock locations" property
Mobile.Device().GPS.AllowMockLocations = true;
// Obtain current location data
let Longt = Mobile.Device().GPS.Location.Longitude;
let Lat = Mobile.Device().GPS.Location.Latitude;
// Output the location data
Log.Message("The current device location is:");
PostLocationData(Mobile.Device());
// Open Google Maps in the browser and pass the current coordinates as URL parameters
Browsers.Item(Browsers.btIExplorer).Run("http://maps.google.com/maps?q=loc:" + aqConvert.VarToStr(Lat) + "," + aqConvert.VarToStr(Longt));
// Change the coordinates
Longt = Longt + 0.005;
Lat = Lat + 0.005;
// Specify a mock location
if (equal(Mobile.Device().OSType, "Android"))
Mobile.Device().GPS.SetLocation(Longt, Lat, Mobile.Device().GPS.Location.Altitude, Mobile.Device().GPS.Location.Accuracy);
else
Mobile.Device().GPS.SetLocation(Longt, Lat);
// Output the new location data
Log.Message("The device mock location is:");
PostLocationData(Mobile.Device());
// Open a new tab in the browser
Sys.Browser("iexplore").BrowserWindow(0).Keys("[Hold]^t[Release]");
Delay(1000);
// Open the new location in Google Maps
Sys.Browser("iexplore").WaitPage("*about*", 3000).ToUrl("http://maps.google.com/maps?q=loc:" + aqConvert.VarToStr(Lat) + "," + aqConvert.VarToStr(Longt));
// Disable mock locations
Mobile.Device().GPS.AllowMockLocations = false;
}
}
// A helper function that posts the location data to the test log
function PostLocationData(aDevice)
{
if (!strictEqual(aDevice, null))
{
switch (aDevice.OSType)
{
case "Android":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Longitude));
Log.Message("Latitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Latitude));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude));
Log.Message("Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Accuracy));
};
break;
case "iOS":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Longitude));
Log.Message("Latitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Latitude));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude));
Log.Message("Speed: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Speed));
Log.Message("Course: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.Course));
Log.Message("Horizontal Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.HorizontalAccuracy));
Log.Message("Vertical Accuracy: " + aqConvert.VarToStr(Mobile.Device().GPS.Location.VerticalAccuracy));
};
break;
}
}
}
JScript
function MockGPSLocation()
{
Mobile.SetCurrent("MyDevice");
// Check if GPS is enabled
if (Mobile.Device.GPS.GPSEnabled)
{
// Enable the "Allow mock locations" property
Mobile.Device.GPS.AllowMockLocations = true;
// Obtain current location data
var Longt = Mobile.Device.GPS.Location.Longitude;
var Lat = Mobile.Device.GPS.Location.Latitude;
// Output the location data
Log.Message("The current device location is:");
PostLocationData(Mobile.Device);
// Open Google Maps in the browser and pass the current coordinates as URL parameters
Browsers.Item(Browsers.btIExplorer).Run("http://maps.google.com/maps?q=loc:" + aqConvert.VarToStr(Lat) + "," + aqConvert.VarToStr(Longt));
// Change the coordinates
Longt = Longt + 0.005;
Lat = Lat + 0.005;
// Specify a mock location
if (Mobile.Device.OSType == "Android")
Mobile.Device.GPS.SetLocation(Longt, Lat, Mobile.Device.GPS.Location.Altitude, Mobile.Device.GPS.Location.Accuracy);
else
Mobile.Device.GPS.SetLocation(Longt, Lat);
// Output the new location data
Log.Message("The device mock location is:");
PostLocationData(Mobile.Device);
// Open a new tab in the browser
Sys.Browser("iexplore").BrowserWindow(0).Keys("[Hold]^t[Release]");
Delay(1000);
// Open the new location in Google Maps
Sys.Browser("iexplore").WaitPage("*about*", 3000).ToUrl("http://maps.google.com/maps?q=loc:" + aqConvert.VarToStr(Lat) + "," + aqConvert.VarToStr(Longt));
// Disable mock locations
Mobile.Device.GPS.AllowMockLocations = false;
}
}
// A helper function that posts the location data to the test log
function PostLocationData(aDevice)
{
if (aDevice != null)
{
switch (aDevice.OSType)
{
case "Android":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude));
Log.Message("Latitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message("Accuracy: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Accuracy));
};
break;
case "iOS":
{
Log.Message("Longitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude));
Log.Message("Latitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude));
Log.Message("Altitude: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message("Speed: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Speed));
Log.Message("Course: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.Course));
Log.Message("Horizontal Accuracy: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.HorizontalAccuracy));
Log.Message("Vertical Accuracy: " + aqConvert.VarToStr(Mobile.Device.GPS.Location.VerticalAccuracy));
};
break;
}
}
}
Python
def MockGPSLocation():
Mobile.SetCurrent('MyDevice')
# Check if GPS is enabled
if Mobile.Device().GPS.GPSEnabled:
# Enable the "Allow mock locations" property
Mobile.Device().GPS.AllowMockLocations = True
# Obtain current location data
Longt = Mobile.Device().GPS.Location.Longitude
Lat = Mobile.Device().GPS.Location.Latitude
# Output the location data
Log.Message('The current device location is:')
PostLocationData(Mobile.Device())
# Open Google Maps in the browser and pass the current coordinates as URL parameters
Browsers.Item[Browsers.btIExplorer].Run('http://maps.google.com/maps?q=loc:' + aqConvert.VarToStr(Lat) + ',' + aqConvert.VarToStr(Longt))
# Change the coordinates
Longt = Longt + 0.005
Lat = Lat + 0.005
# Specify a mock location
if Mobile.Device().OSType == 'Android':
Mobile.Device().GPS.SetLocation(Longt, Lat, Mobile.Device().GPS.Location.Altitude, Mobile.Device().GPS.Location.Accuracy)
else:
Mobile.Device().GPS.SetLocation(Longt, Lat)
# Output the new location data
Log.Message('The device mock location is:')
PostLocationData(Mobile.Device())
# Open a new tab in the browser
Sys.Browser('iexplore').BrowserWindow(0).Keys('[Hold]^t[Release]')
Delay(1000)
# Open the new location in Google Maps
Sys.Browser('iexplore').WaitPage('*about*').ToUrl('http://maps.google.com/maps?q=loc:' + aqConvert.VarToStr(Lat) + ',' + aqConvert.VarToStr(Longt))
# Disable mock locations
Mobile.Device().GPS.AllowMockLocations = False
# A helper function that posts the location data to the test log
def PostLocationData(aDevice):
if aDevice != None:
if aDevice.OSType == 'Android':
Log.Message('Longitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Longitude))
Log.Message('Latitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Latitude))
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude))
Log.Message('Accuracy: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Accuracy))
elif aDevice.OSType == 'iOS':
Log.Message('Longitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Longitude))
Log.Message('Latitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Latitude))
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Altitude))
Log.Message('Speed: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Speed))
Log.Message('Course: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.Course))
Log.Message('Horizontal Accuracy: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.HorizontalAccuracy))
Log.Message('Vertical Accuracy: ' + aqConvert.VarToStr(Mobile.Device().GPS.Location.VerticalAccuracy))
VBScript
Sub MockGPSLocation
Call Mobile.SetCurrent("MyDevice")
' Check if GPS is enabled
If Mobile.Device.GPS.GPSEnabled Then
' Enable the "Allow mock locations" property
Mobile.Device.GPS.AllowMockLocations = True
' Obtain current location data
Longt = Mobile.Device.GPS.Location.Longitude
Lat = Mobile.Device.GPS.Location.Latitude
' Output the location data
Call Log.Message("The current device location is:")
Call PostLocationData(Mobile.Device)
' Open Google Maps in the browser and pass the current coordinates as URL parameters
Call Browsers.Item(Browsers.btIExplorer).Run("http://maps.google.com/maps?q=loc:" & aqConvert.VarToStr(Lat) & "," & aqConvert.VarToStr(Longt))
' Change the coordinates
Longt = Longt + 0.005
Lat = Lat + 0.005
' Specify a mock location
If Mobile.Device.OSType = "Android" Then
Call Mobile.Device.GPS.SetLocation(Longt, Lat, Alt, Acc)
Else
Call Mobile.Device.GPS.SetLocation(Longt, Lat)
End If
' Output the new location data
Call Log.Message("The device mock location is:")
Call PostLocationData(Mobile.Device)
' Open a new tab in the browser
Call Sys.Browser("iexplore").BrowserWindow(0).Keys("[Hold]^t[Release]")
Call Delay(1000)
' Open the new location in Google Maps
Call Sys.Browser("iexplore").WaitPage("*about*", 3000).ToUrl("http://maps.google.com/maps?q=loc:"&Lat&","&Longt)
' Disable mock locations
Mobile.Device.GPS.AllowMockLocations = false
End If
End Sub
' A helper function that posts the location data to the test log
Sub PostLocationData(aDevice)
If Not aDevice Is Nothing Then
Select Case aDevice.OSType
Case "Android"
Call Log.Message("Longitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude))
Call Log.Message("Latitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude))
Call Log.Message("Altitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude))
Call Log.Message("Accuracy: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Accuracy))
Case "iOS"
Call Log.Message("Longitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude))
Call Log.Message("Latitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude))
Call Log.Message("Altitude: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude))
Call Log.Message("Speed: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Speed))
Call Log.Message("Course: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.Course))
Call Log.Message("Horizontal Accuracy: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.HorizontalAccuracy))
Call Log.Message("Vertical Accuracy: " & aqConvert.VarToStr(Mobile.Device.GPS.Location.VerticalAccuracy))
End Select
End If
End Sub
DelphiScript
// A helper procedure that posts the location data to the test log
procedure PostLocationData(aDevice);
begin
if aDevice <> nil then
begin
case aDevice.OSType of
'Android':
begin
Log.Message('Longitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude));
Log.Message('Latitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude));
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message('Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Accuracy));
end;
'iOS':
begin
Log.Message('Longitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Longitude));
Log.Message('Latitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Latitude));
Log.Message('Altitude: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Altitude));
Log.Message('Speed: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Speed));
Log.Message('Course: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.Course));
Log.Message('Horizontal Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.HorizontalAccuracy));
Log.Message('Vertical Accuracy: ' + aqConvert.VarToStr(Mobile.Device.GPS.Location.VerticalAccuracy));
end;
end;
end;
end;
procedure MockGPSLocation;
var Longt, Lat;
begin
Mobile.SetCurrent('MyDevice');
// Check if GPS is enabled
if Mobile.Device.GPS.GPSEnabled then
begin
// Enable the "Allow mock locations" property
Mobile.Device.GPS.AllowMockLocations := true;
// Obtain current location data
Longt := Mobile.Device.GPS.Location.Longitude;
Lat := Mobile.Device.GPS.Location.Latitude;
// Output the location data
Log.Message('The current device location is:');
PostLocationData(Mobile.Device);
// Open Google Maps in the browser and pass the current coordinates as URL parameters
Browsers.Item(Browsers.btIExplorer).Run('http://maps.google.com/maps?q=loc:'+aqConvert.VarToStr(Lat)+','+aqConvert.VarToStr(Longt));
// Change the coordinates
Longt := Longt + 0.005;
Lat := Lat + 0.005;
// Specify a mock location
if Mobile.Device.OSType = 'Android' then
Mobile.Device.GPS.SetLocation(Longt, Lat, Mobile.Device.GPS.Location.Altitude, Mobile.Device.GPS.Location.Accuracy)
else
Mobile.Device.GPS.SetLocation(Longt, Lat);
// Output the new location data
Log.Message('The device mock location is:');
PostLocationData(Mobile.Device);
// Open a new tab in the browser
Sys.Browser('iexplore').BrowserWindow(0).Keys('[Hold]^t[Release]');
Delay(1000);
// Open the new location in Google Maps
Sys.Browser('iexplore').WaitPage('*about*', 3000).ToUrl('http://maps.google.com/maps?q=loc:' + aqConvert.VarToStr(Lat) + ',' + aqConvert.VarToStr(Longt));
// Disable mock locations
Mobile.Device.GPS.AllowMockLocations := false;
end;
end;
C++Script, C#Script
function MockGPSLocation()
{
Mobile["SetCurrent"]("MyDevice");
// Check if GPS is enabled
if (Mobile["Device"]["GPS"]["GPSEnabled"])
{
// Enable the "Allow mock locations" property
Mobile["Device"]["GPS"]["AllowMockLocations"] = true;
// Obtain current location data
var Longt = Mobile["Device"]["GPS"]["Location"]["Longitude"];
var Lat = Mobile["Device"]["GPS"]["Location"]["Latitude"];
// Output the location data
Log["Message"]("The current device location is:");
PostLocationData(Mobile["Device"]);
// Open Google Maps in the browser and pass the current coordinates as URL parameters
Browsers["Item"](Browsers["btIExplorer"])["Run"]("http://maps.google.com/maps?q=loc:" + aqConvert["VarToStr"](Lat) + "," + aqConvert["VarToStr"](Longt));
// Change the coordinates
Longt = Longt + 0.005;
Lat = Lat + 0.005;
// Specify a mock location
if (Mobile["Device"]["OSType"] == "Android")
Mobile["Device"]["GPS"]["SetLocation"](Longt, Lat, Mobile["Device"]["GPS"]["Location"]["Altitude"], Mobile["Device"]["GPS"]["Location"]["Accuracy"]);
else
Mobile["Device"]["GPS"]["SetLocation"](Longt, Lat);
// Output the new location data
Log["Message"]("The device mock location is:");
PostLocationData(Mobile["Device"]);
// Open a new tab in the browser
Sys["Browser"]("iexplore")["BrowserWindow"](0)["Keys"]("[Hold]^t[Release]");
Delay(1000);
// Open the new location in Google Maps
Sys["Browser"]("iexplore")["WaitPage"]("*about*", 3000)["ToUrl"]("http://maps.google.com/maps?q=loc:" + aqConvert["VarToStr"](Lat) + "," + aqConvert["VarToStr"](Longt));
// Disable mock locations
Mobile["Device"]["GPS"]["AllowMockLocations"] = false;
}
}
// A helper function that posts the location data to the test log
function PostLocationData(aDevice)
{
if (aDevice != null)
{
switch (aDevice["OSType"])
{
case "Android":
{
Log["Message"]("Longitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Longitude"]));
Log["Message"]("Latitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Latitude"]));
Log["Message"]("Altitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Altitude"]));
Log["Message"]("Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Accuracy"]));
};
break;
case "iOS":
{
Log["Message"]("Longitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Longitude"]));
Log["Message"]("Latitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Latitude"]));
Log["Message"]("Altitude: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Altitude"]));
Log["Message"]("Speed: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Speed"]));
Log["Message"]("Course: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["Course"]));
Log["Message"]("Horizontal Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["HorizontalAccuracy"]));
Log["Message"]("Vertical Accuracy: " + aqConvert["VarToStr"](Mobile["Device"]["GPS"]["Location"]["VerticalAccuracy"]));
};
break;
}
}
}
When you call the SetLocation method on your Android device, the device starts working in the mock location mode (that is, it does not display the physical location). To disable this mode, you need to clear the Allow mock locations setting and reboot the device. |
Accessing GPS Location Data From Keyword Tests
To access GPS location data from keyword tests, you need to address the same program objects and properties described above. You can use the Call Object Method or Run Code Snippet keyword operation for this purpose, or specify operation parameters in the Code Expression mode. See Getting and Setting Object Property Values and Calling Object Methods for instructions.
For example, the following keyword test posts the current location of the device to the test log and displays it in Google Maps:
Accessing GPS data from keyword tests
Samples
TestComplete includes a sample project that demonstrates how to perform geolocation testing on mobile devices:
Android
<TestComplete Samples>\Mobile\Android\Sensors
iOS
<TestComplete Samples>\Mobile\iOS\Sensors
Note: | If you do not have the sample, download the TestComplete Samples installation package from the support.smartbear.com/downloads/testcomplete/samples/; page of our website and run it. |
See Also
Geolocation Testing and Sensors
Sensor Property
AndroidSensor Object
Testing Android Applications