Skip to main content
Testing on Mobile
Devices with Location
Services
Eyal Yovel, Solutions Architect
April, 2021
About me
2
○ Solutions Architect at Sauce Labs,
based in London, UK
○ I have over 15 years of experience in
software development and software
automation
○ I have a passion for learning new
technologies and new test
frameworks
Eyal Yovel
@eyalyovel
https://github.com/eyaly
Agenda
3
○ Introduction
○ Changing geo location manually
○ Changing geo location using Appium Desktop
○ Automate end-to-end user flow with location services - iOS
○ Automate e2e user flow with location services – Android
○ Automate e2e user flow with location services – Execution
○ Automate e2e user flow with location services – Web App
○ About Geo-IP
© Sauce Labs, Inc. 4
What Why
Location Services
© Sauce Labs, Inc. 5
© Sauce Labs, Inc. 6
GPS
receiver
GPS
satellites
Assisted
GPS
How does GPS work on my phone?
7
How does GPS work on my phone?
Latitude
Longitude
Altitude
8
Latitude and Longitude
9
Latitude and Longitude
Latitude - Imaginary lines that measure distance north and south of the
equator
Longitude - Imaginary lines that measure distance east and west of the
prime meridian
Altitude - How high a location is above sea level
10
Latitude and Longitude
11
Changing Geo Location Manually
12
Changing Geo Location - iOS Simulator
13
Changing Geo Location - Android Emulator
14
Changing Geo Location - Sauce Labs Real devices
15
Set/Get Geo Location - Appium Commands
16
Set Geo Location - Appium Command
17
Get Geo Location - Appium Command
18
Demo App
https://github.com/saucelabs/sample-app-mobile/releases
19
Set/Get Geo Location - Appium Commands -Demo
20
End to End User Flow with Location Services - iOS
Preparation Permission Alert Test the page
21
End to End User Flow with Location Services - iOS
22
End to End User Flow with Location Services - iOS
https://github.com/eyaly/testng-geo-location-examples
23
End to End User Flow with Location Services - iOS
https://github.com/eyaly/testng-geo-location-examples
24
End to End User Flow with Location Services - iOS
https://github.com/eyaly/testng-geo-location-examples
25
End to End User Flow with Location Services - iOS
https://github.com/eyaly/testng-geo-location-examples
26
End to End User Flow with Location Services - iOS
27
End to End User Flow with Location Services - iOS
28
End to End User Flow with Location Services - iOS
iOS >= 13
iOS =< 12
29
End to End User Flow with Location Services - iOS
https://appium.io/docs/en/writing-running-appium/caps/
// this capability will work for alerts with 2 options (iOS 12 and below)
capabilities.setCapability("autoAcceptAlerts", true);
30
End to End User Flow with Location Services - iOS
https://github.com/appium/appium-xcuitest-driver#settings-api
// change the setting to accept alerts with 3 options
// and select the "Allow While Using App" (iOS 13 and above)
getiosDriver().setSetting("acceptAlertButtonSelector",
"**/XCUIElementTypeButton[`label == "Allow While Using
App"`]");
34
End to End User Flow with Location Services - iOS
35
End to End User Flow with Location Services - iOS
https://github.com/eyaly/testng-geo-location-examples
36
End to End User Flow with Location Services - Android
Preparation Permission Alert Test the page
37
End to End User Flow with Location Services - Android
For API level 29 (Android 10) and above:
Enable: adb shell settings put secure location_mode 3
Disable: adb shell settings put secure location_mode 0
For API level 28 (Android 9) and below:
Enable: adb shell settings put secure
location_providers_allowed +gps
Disable: adb shell settings put secure
location_providers_allowed -gps
38
End to End User Flow with Location Services - Android
39
End to End User Flow with Location Services - Android
40
End to End User Flow with Location Services - Android
Android >= 10
Android =< 9
41
End to End User Flow with Location Services - Android
https://appium.io/docs/en/writing-running-appium/caps/
// Grant permission for alert popups
capabilities.setCapability("autoGrantPermissions", true);
42
End to End User Flow with Location Services - Android
// Grant permission for alert popups
capabilities.setCapability("autoGrantPermissions", true);
43
End to End User Flow with Location Services - Android
// Grant permission for alert popups
capabilities.setCapability("autoGrantPermissions", true);
45
End to End User Flow with Location Services - Execution
46
End to End User Flow with Location Services - Execution
47
End to End User Flow with Location Services - Execution
48
And what about Web Apps…?
49
And what about Web Apps…?
50
End to End User Flow with Location Services - Web
51
End to End User Flow with Location Services - Web
52
End to End User Flow with Location Services - Web
53
End to End User Flow with Location Services - Web
https://github.com/eyaly/testng-geo-location-examples
54
Let’s talk about something new…
55
Let’s talk about something new…
56
Let’s talk about Geo-IP
GeoIP refersto the method oflocating a computer terminal’s
geographic location by identifying that terminal’s IP address.
(https://help.nexcess.net/77285-other/what-is-geoip)
An IP address is assigned to each device (e.g. computer, printer)
participating in a computer network that uses the Internet Protocol for
communication (https://en.wikipedia.org/wiki/Internet_geolocation)
57
How to change my Geo-IP
- Use VPN (Virtual Private Network) services
- VPN Provider: WonderProxy (https://wonderproxy.com/)
- Use WonderProxy to change the Geolocation of your test traffic
Sauce:
https://wonderproxy.com/docs/devs/guides/globalize-your-testing-with-sauce
https://wiki.saucelabs.com/pages/viewpage.action?pageId=48365781
58
How to Test from different countries
- Use Sauce Connect (tunnel) + WonderProxy
59
How to Test from different countries
Q&A
Q&A
Let’s do this.