3. Agenda
Introduction
Features List
Current Limitations
Understanding Architecture
Automating Android Apps
Native/ Hybrid app
Mobile Web app
Automating iOS Apps
Prerequisites and configurations
On Simulators
On Real iDevices
Short Demo
Questions & Answers
4. Introduction
Appium is an Open source , Cross Platform test
automation tool for mobile apps
Hosted with GitHub
Maintained by Dan Cuellar, Jonathan Lipps and
a number of other contributors
Supports automation of Native , Hybrid and
Mobile Web apps
Based on WebDriver JSON wire protocol
Based on Client-Server Architecture
Appium Server written in Node.js
7. Features
Supports all the WebDriver Client Libraries
Java
Ruby
Python
JavaScript
PHP
C#
Multiple Client Libraries
8. Features
Common Library for all the mobile
platforms e.g. Android , iOS
Selenium WebDriver Interfaces
implemented
Added mobile specific functions
e.g. driver.pinch(), driver.zoom(), driver.currentActivity(),
driver.lock() etc.
Common API for both Native and Web
components
Common API
9. Features
Android
Real Devices
Emulators
Native Browser
Mobile Chrome
iOS
Real iDevices (e.g. iPhone, iPad etc.)
Simulators
Mobile Safari
Test Modalities
10. Limitations
Android
No Support for Toast messages
Android Version 4.2+ required
iOS
Needs mac OSX 10.7+, lower versions
not supported
11. Architecture
Client Server Architecture
Based on WebDriver JSON Wire Protocol
Native test libraries of respective platform is
the backbone of the backend
12. Architecture
Android
UiAutomator ( Version 4.2 or +)
Default Backend for Android
Selendroid ( Version 2.3+)
A separate open source project for
Android automation
Instrumentation is the Backend
iOS
Apple’s UIAutomation Framework
Which Native Library for Which Platform
16. Test Script Development :
Create a maven project in Eclipse
Add dependency
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>1.1.0</version>
</dependency>
17. Test Script Development :
public void setUp() throws Exception
{
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "../../../apps/");
File app = new File(appDir, "App_Name.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android");
capabilities.setCapability("browserName", "");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", “package_name ");
capabilities.setCapability("appActivity", ".activity_name");
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
}
public void tearDown() throws Exception
{
driver.quit();
}
18. Starting Appium Server
From Source:
Install Node.js
Download Appium or Clone it using GitHub
In cmd navigate to node_modules/appium/bin
Run 'node appium [server arguments]'
From GUI Interface:
Do the configurations as needed from GUI
Click launch button to launch appium server
19. Appium Server Arguments
Usage : node appium [arguments](windows), appium & [arguments] (mac)
--app : To specify the path to the AUT(iOS: .app, android: apk)
-U , --udid : Unique device identifier of the connected physical device
-a, --address : IP Address to listen on
-p, --port : port to listen on
--session-override : Enables session override
--full-reset : (iOS) Delete the entire simulator folder. (Android) Reset
app state by uninstalling app instead of clearing app data. On
Android, this will also remove the app after the session is complete.
--no-reset : Don't reset app state between sessions
-l, --pre-launch : Pre-launch the application before allowing the first
session
Complete List :
https://github.com/appium/appium/blob/master/docs/en/server-args.md
21. Automating Web Apps
public void setUp() throws Exception
{
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("browserName", "Browser or Chrome");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("app", app.getAbsolutePath());
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
}
22. Automating Web Apps
Download Google Chrome(30+) in PC
Navigate to ‘chrome://inspect’
Connect device / Start Emulator
Open the browser in the Device/Emulator and
navigate to the URL under test
Click on inspect button on Chrome to get the
page source and inspect elements
How to get Locators?
24. Requirements : (Java)
Mac OS X 10.7+
Xcode 4.6.3+
iOS SDKs with Command Line Tools
JAVA IDE (Eclipse)
Java JDK
Maven Plugin for Eclipse
Selenium WebDriver Dependencies
Junit
Simulator/ Real Device
Appium Server
Node.js (If running appium from source)
25. Configurations:
Environment Variables & Path Settings
JAVA_HOME
ANDROID_HOME
MAVEN_HOME
iOS SDKs with Command Line Tools
Authorize the use of Instuments
Sudo grunt authorize (If running from source)
An alert prompts to do so if used GUI version of
Appium
26. Collecting the .app build of AUT
Compile and Run the source code of AUT in
iOS Simulators
Navigate to Library Application Support→ →
iPhone Simulator [version] Applications→ → →
[choose_folder_which_belongs_to_compiled_pro
ject] application_name.app→
27. Developing Test Scripts
public void setUp() throws Exception
{
File appDir = new File(System.getProperty("user.dir"), "../../../apps/");
File app = new File(appDir, “App_Name.app");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("browserName", "");
capabilities.setCapability("platformVersion", "7.1");
capabilities.setCapability("platformName", "Mac");
capabilities.setCapability("deviceName", "iPhone Simulator");
capabilities.setCapability("app", app.getAbsolutePath());
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
public void tearDown() throws Exception
{
driver.quit();
}
28. Starting Appium Server
From Source:
From Terminal run the following commands
> brew install node # get node.js
> npm install -g appium # get appium
> npm install wd # get appium client
> appium & # start appium
From GUI Interface:
> Make required configurations from GUI
> Click Launch button to launch appium server
29. Running with Real Devices
Specify device UDID with appium server
arguments or with the GUI version
Compile source of AUT in debug mode
AUT must be compiled with a Developers
Signature and a Developer Provisioning
profile(Not Distribution type)
Device must be authorized as a development
device with xcode
Specify Bundle ID with appium after installing
the ipa or running the AUT project directly to
device
31. Locating Elements
By Class (UI component type)
E.g
UIATextField , UIAStaticText (iOS)
android.widget.Button ,
android.widget.EditText (Android)
By Xpath (An abstract representation of certain
element with constraints)
By Id
Some of the Mobile JSON Wire Protocol Strategies
Accessibility ID (for iOS the accessibility identifier and for
Android the content-description)
32. Appium Inspector
Inspect Elements and the element hierarchy with a
GUI interface
Inspect the associated attributes of an element
Easily identify the Xpath for all the elements
Find the enable/disable status of an element
Record test scripts and export in the desired language
Verify mobile commands from Inspector before
implementation