Mobile Application Testing
with Appium
Back to the basics
About me
Pavel Strongin
10+ years in IT

IBM, EPAM, Yandex, Lazada, Circles.Life
From Belarus
Belarus
Tools used for presentation
Appium Philosophy
Apps shouldn't require:
Including an SDK
Recompiling your App
You should be able to use your preferred:
Test practices
Frameworks
Tools
Open source project with vibrant contributing community
Main Features
Support Android and iOS
Support Native, Hybrid and Web apps
Support Real Devices, Simulators
Supported by Cloud Device Farms providers
All programming languages support

(Libraries implemented for most popular)
Selenium Grid Support (https://www.swtestacademy.com/mobile-device-lab)
Quick Start
Requirements
Any programming language (Java, Python, Ruby,
NodeJS, PHP, ...)
Any OS (Mac, Linux, Windows)
Xcode with Command Line Tools for iOS
Android SDK >= 16
NodeJS >= 6
Architecture
Appium Server versions
UI -> Download at https://appium.io 

(May be not the latest!)
Console -> Install with 'node'
Appium clients
http://appium.io/docs/en/about-appium/appium-clients/
Desired Capabilities
Appium config: What? Where? How?
Can be sent by client or used on a server
Most important:
Desired Capabilities
Full list can be found here:

http://appium.io/docs/en/writing-running-appium/caps
Desired Capabilities

Automation name
Android:
Appium (UIAutomator) [Doesn't work with Android >= Oreo (API 26)]
UIAutomator2
Espresso (Beta)
iOS:
XCUITest
YouiEngine
Get Device Id
Android:
adb
iOS:
iTunes for Real Devices
xcrun simctl
First Try with ARC
ARC - Appium Ruby Console
Executes Pry with appium_lib exported methods
Init Appium connection with Desired Capabilities from appium.txt file
https://github.com/appium/
ruby_console
First Try with Arc
Most popular commands:
page
source
locators (id, text, xpath)
...
x - to exit
Getting elements with
Appium Inspector
Other ways to get identifiers
Xcode Accessibility Inspector
Android Studio Inspector
Macaca
Source code
Set identifiers by yourself
Android:
Resource-id
Content-Description
iOS:
accessibilityIdentifier
accessibilityValue
accessibilityHint
Hybrid application?
WebView
Android:
Allow WebDebugging in application code for RealDevices

All:
Check available contexts

Switch to a context

Localization
Android:
Appium can get strings.xml for default lang
If doesn't work or you need another one use apktool

iOS:
Copy 'values-#{lang}' directory BEFORE App compilation
Appium hacks
(Ok, workarounds...)
Android:
ADB for everything!
Flight mode
Localization switch
Uploading/Downloading files
Screenshots
Android:
Permission request during application start
Android:
Annoying permissions requests
Android:
Multiple execution on one machine
Set next unique parameters for Appium server:
Appium port
Bootstrap port (or systemPort capability)
Chromedriver port
All OS:
Hide Keyboard
Android:
Real Devices: Input methods can be deleted by ADB

(Samsung will automatically recover keyboard time to
time)
Genymotion can disable on-screen keyboard
All:
Appium just sends an Enter (Search, Next) key.
iOS:
Allerts
alert_displayed?

iOS:
TextLabel.text
Appium can't get TextLabel's text in some cases.
Create a new Category that will put Label's Text into
accessibility attribute.
WebView
Send Keys takes a lot of time:

Click on checkbox:

Genymotion on Google Cloud
(Genymotion PaaS)
Genymotion on GCloud
$300 and one year trial!
Takes some time to setup ssh and permissions
No cmd util to manipulate Genymotion features
Shared Access
Fast!
Located in Singapore! or anywhere you need
GCloud Hack
Virtual Machine takes a long time to stop if stopped by
gcloud command line tool - use ADB instead! :)
Allure Reports
Allure Reports: Main Features
Helps to shorten common defect lifecycle
Failures separation into bugs and broken tests
Supports attachments (logs, screenshots, etc.)
Auto-support for steps form BDD frameworks
TMS and Bug Tracking system integration
Timelines
Parallel Execution
Allure: Demo
https://demo.qameta.io/allure/
Questions?
Contact me!
LinkedIn: https://www.linkedin.com/in/strongin/
FB: https://www.facebook.com/pavel.strongin
IG: https://www.instagram.com/cohuk/
Join our Slack channel!
https://singaporeappiummeetup-slack.herokuapp.com

Appium basics