Get a start with
for Mobile Automation (Android)
PEER LEARNING PROGRAM
BY ABHISHEK YADAV (@ABHISHEKKYD)
[RECAP] Agenda
 Overview of Mobile Automation
 About Appium
 Overview of Appium over other open source tools
 Android Installation with emulator
 Scripting using Appium for Mobile Web Automation
 Scripting using Appium for Mobile App Automation
 Framework Development using Appium
 Appium iOS Automation
[RECAP] Overview of Mobile
Automation
Now a days every organization prefers automated testing once a product
reaches to the stable phase to reduce the testing effort. Since testing cost is
an important factor for any project, organizations have started preferring
open source test automation tools (which have reached a stage where they
now rival the commercial ones) instead of investing in costly commercial
testing tools.
A variety of open source automation testing tools is available for almost all
types of testing such as functional, UAT, regression, performance etc. Some
open source tools are Appium, Calabash, MonkeyTalk, Robotium, etc.
[RECAP] About Appium
 Appium is an open source test automation framework for use with
native, hybrid and mobile web apps.
 It drives iOS, Android, and Windows apps using the WebDriver protocol.
 Importantly, Appium is “cross-platform”: it allows you to write tests against
multiple platforms (iOS, Android, Windows), using the same API. This
enables code reuse between iOS, Android, and Windows testsuites.
[RECAP] Appium for Android
Webdriver Controller
UIAutomator Controller
UIAutomator Client
TCP Client
Bootstrap.jar
UIAutomator Server
TCP Server
[RECAP] About Appium
[RECAP] Overview of Appium over
other open source tools
A huge number of mobile testing tools have been developed in recent years
to support mobile development. As more companies are developing mobile
products and the marketplace is seeing more devices, platforms, and versions,
testing your mobile apps is vital. When it comes choosing what mobile testing
tool is right for you, there is a huge array of options, each with different
strengths and weaknesses.
[RECAP] Overview of Appium over
other open source tools
[RECAP] Android Installation with
emulator
 Android Studio provides the fastest tools for building apps on every type
of Android device.
 World-class code editing, debugging, performance tooling, a flexible build
system, and an instant build/deploy system all allow you to focus on
building unique and high quality apps.
https://developer.android.com/studio/index.html
[RECAP] Android Installation with
emulatorAndroid Studio GUI
[RECAP] Android Installation with
emulator android
android avd
Command Line }
[RECAP] Scripting using Appium for
Mobile Web Automation
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "browser");
capabilities.setCapability("platformVersion", "5.1");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement keyword = driver.findElement(By.name("q"));
keyword.sendKeys("abhishek yadav qa");
[RECAP] Scripting using Appium for
Mobile App Automation
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity","com.android.calculator2.Calculator
");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
[RECAP] Scripting using Appium for
Mobile App Automation
[RECAP] Framework Development
using Appium
 Apache Maven
 Page Objects
 TestNG
 ReportNG
 Allure
 Cucumber (BDD)
 Jenkins
[RECAP] Appium for iOS
Webdriver Controller
Instruments Controller
Instruments Command
Server
Unix Socket Server
Instruments Command
Client
Unix Socket Client
Instruments
Bootstrap.js
[RECAP] Appium iOS Automation
[RECAP] Agenda
 Appium Maven Project
 Script Development within Maven Project
 Locator Strategy for Android Web
 Advance Locator Strategy for Android Web
 Advance Locator Strategy for iOS App
[RECAP] Appium Maven Project
[RECAP] Script Development within
Maven Project
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "browser");
capabilities.setCapability("platformVersion", "5.1");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement keyword = driver.findElement(By.name("q"));
keyword.sendKeys("abhishek yadav qa");
keyword.sendKeys(Keys.ENTER);
[RECAP] Locator Strategy for Android
 Id
 Name
 css selector
 xpath
 //android.widget.TextView[@resource-
id='com.apptivateme.next.ct:id/tvVideoTime']
 //android.widget.ImageView[@resource-
id='com.apptivateme.next.ct:id/search_close_btn']
 //android.widget.FrameLayout[@resource-
id='com.apptivateme.next.ct:id/transparent_spacer_passthrough']
[RECAP] Advanced Locator Strategies
Android
 MobileBy
 ByAccessibilityId
 ByAndroidUIAutomator
[RECAP] MobileBy
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity","com.android.calculator2.Calculator");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
driver.findElement(MobileBy.name("4")).click();
[RECAP] ByAccessibilityId
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity","com.android.calculator2.Calculator");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
driver.findElement(MobileBy.name("4")).click();
driver.findElement(MobileBy.AccessibilityId("delete")).click();
[RECAP] ByAndroidUIAutomator
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "TestAndroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity","com.android.calculator2.Calculator");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text("3")")).click();
[RECAP] ByAndroidUIAutomator
 https://discuss.appium.io/t/how-to-use-uiselector-with-appium-in-
java/443/20
[RECAP] Locator Strategy for iOS
 Id
 Name
 css selector
 xpath
 //UIAApplication[1]/UIAWindow[1]/UIASearchBar[1]/UIASearchBar[1]
[RECAP] Locator Strategy for iOS
[RECAP] Advance Locator Strategy for
iOS
 IosUIAutomation
driver.findElementByIosUIAutomation
("tableViews()[0].cells(1).textViews()
.firstWithPredicate("name == New Delhi And NCR")");
https://discuss.appium.io/t/how-to-use-findelements-byiosuiautomation/607
Agenda
 Install Appium using NPM
 Start Appium Server from command line
 Command line Arguments for Appium
 Features of New Appium Client
 Live practical to automate Twitter Mobile App
 Live practical to automate Facebook Mobile App
 Best practices for framework development using Appium and Java
Appium using NPM and CLI
 npm install –g appium
 appium
https://github.com/appium/appium/blob/master/docs/en/writing-running-
appium/caps.md
Appium Live Demo
 Twitter
 Facebook
Features of New Appium Client
Best practices for framework
development
References
 http://appium.io/
 https://appium.io/slate/en/tutorial/android.html
 https://github.com/appium/appium
 https://wiki.saucelabs.com/display/DOCS/Getting+Started+with+Appium+
for+Mobile+Native+Application+Testing
 https://github.com/appium/appium-desktop
 http://testng.org/doc/
 https://maven.apache.org/
Appium overview session final
Appium overview session final

Appium overview session final

  • 1.
    Get a startwith for Mobile Automation (Android) PEER LEARNING PROGRAM BY ABHISHEK YADAV (@ABHISHEKKYD)
  • 2.
    [RECAP] Agenda  Overviewof Mobile Automation  About Appium  Overview of Appium over other open source tools  Android Installation with emulator  Scripting using Appium for Mobile Web Automation  Scripting using Appium for Mobile App Automation  Framework Development using Appium  Appium iOS Automation
  • 3.
    [RECAP] Overview ofMobile Automation Now a days every organization prefers automated testing once a product reaches to the stable phase to reduce the testing effort. Since testing cost is an important factor for any project, organizations have started preferring open source test automation tools (which have reached a stage where they now rival the commercial ones) instead of investing in costly commercial testing tools. A variety of open source automation testing tools is available for almost all types of testing such as functional, UAT, regression, performance etc. Some open source tools are Appium, Calabash, MonkeyTalk, Robotium, etc.
  • 4.
    [RECAP] About Appium Appium is an open source test automation framework for use with native, hybrid and mobile web apps.  It drives iOS, Android, and Windows apps using the WebDriver protocol.  Importantly, Appium is “cross-platform”: it allows you to write tests against multiple platforms (iOS, Android, Windows), using the same API. This enables code reuse between iOS, Android, and Windows testsuites.
  • 5.
    [RECAP] Appium forAndroid Webdriver Controller UIAutomator Controller UIAutomator Client TCP Client Bootstrap.jar UIAutomator Server TCP Server
  • 6.
  • 7.
    [RECAP] Overview ofAppium over other open source tools A huge number of mobile testing tools have been developed in recent years to support mobile development. As more companies are developing mobile products and the marketplace is seeing more devices, platforms, and versions, testing your mobile apps is vital. When it comes choosing what mobile testing tool is right for you, there is a huge array of options, each with different strengths and weaknesses.
  • 8.
    [RECAP] Overview ofAppium over other open source tools
  • 9.
    [RECAP] Android Installationwith emulator  Android Studio provides the fastest tools for building apps on every type of Android device.  World-class code editing, debugging, performance tooling, a flexible build system, and an instant build/deploy system all allow you to focus on building unique and high quality apps. https://developer.android.com/studio/index.html
  • 10.
    [RECAP] Android Installationwith emulatorAndroid Studio GUI
  • 11.
    [RECAP] Android Installationwith emulator android android avd Command Line }
  • 12.
    [RECAP] Scripting usingAppium for Mobile Web Automation DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "browser"); capabilities.setCapability("platformVersion", "5.1"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS); driver.get("http://www.google.com"); WebElement keyword = driver.findElement(By.name("q")); keyword.sendKeys("abhishek yadav qa");
  • 13.
    [RECAP] Scripting usingAppium for Mobile App Automation DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability("platformVersion", "5.1"); capabilities.setCapability("appPackage", "com.android.calculator2"); capabilities.setCapability("appActivity","com.android.calculator2.Calculator "); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
  • 14.
    [RECAP] Scripting usingAppium for Mobile App Automation
  • 15.
    [RECAP] Framework Development usingAppium  Apache Maven  Page Objects  TestNG  ReportNG  Allure  Cucumber (BDD)  Jenkins
  • 16.
    [RECAP] Appium foriOS Webdriver Controller Instruments Controller Instruments Command Server Unix Socket Server Instruments Command Client Unix Socket Client Instruments Bootstrap.js
  • 17.
  • 18.
    [RECAP] Agenda  AppiumMaven Project  Script Development within Maven Project  Locator Strategy for Android Web  Advance Locator Strategy for Android Web  Advance Locator Strategy for iOS App
  • 19.
  • 20.
    [RECAP] Script Developmentwithin Maven Project DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "browser"); capabilities.setCapability("platformVersion", "5.1"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS); driver.get("http://www.google.com"); WebElement keyword = driver.findElement(By.name("q")); keyword.sendKeys("abhishek yadav qa"); keyword.sendKeys(Keys.ENTER);
  • 21.
    [RECAP] Locator Strategyfor Android  Id  Name  css selector  xpath  //android.widget.TextView[@resource- id='com.apptivateme.next.ct:id/tvVideoTime']  //android.widget.ImageView[@resource- id='com.apptivateme.next.ct:id/search_close_btn']  //android.widget.FrameLayout[@resource- id='com.apptivateme.next.ct:id/transparent_spacer_passthrough']
  • 22.
    [RECAP] Advanced LocatorStrategies Android  MobileBy  ByAccessibilityId  ByAndroidUIAutomator
  • 23.
    [RECAP] MobileBy DesiredCapabilities capabilities= new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability("platformVersion", "5.1"); capabilities.setCapability("appPackage", "com.android.calculator2"); capabilities.setCapability("appActivity","com.android.calculator2.Calculator"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS); driver.findElement(MobileBy.name("4")).click();
  • 24.
    [RECAP] ByAccessibilityId DesiredCapabilities capabilities= new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability("platformVersion", "5.1"); capabilities.setCapability("appPackage", "com.android.calculator2"); capabilities.setCapability("appActivity","com.android.calculator2.Calculator"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS); driver.findElement(MobileBy.name("4")).click(); driver.findElement(MobileBy.AccessibilityId("delete")).click();
  • 25.
    [RECAP] ByAndroidUIAutomator DesiredCapabilities capabilities= new DesiredCapabilities(); capabilities.setCapability("deviceName", "TestAndroid"); capabilities.setCapability("platformName", "Android"); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability("platformVersion", "5.1"); capabilities.setCapability("appPackage", "com.android.calculator2"); capabilities.setCapability("appActivity","com.android.calculator2.Calculator"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS); driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text("3")")).click();
  • 26.
  • 27.
    [RECAP] Locator Strategyfor iOS  Id  Name  css selector  xpath  //UIAApplication[1]/UIAWindow[1]/UIASearchBar[1]/UIASearchBar[1]
  • 28.
  • 29.
    [RECAP] Advance LocatorStrategy for iOS  IosUIAutomation driver.findElementByIosUIAutomation ("tableViews()[0].cells(1).textViews() .firstWithPredicate("name == New Delhi And NCR")"); https://discuss.appium.io/t/how-to-use-findelements-byiosuiautomation/607
  • 30.
    Agenda  Install Appiumusing NPM  Start Appium Server from command line  Command line Arguments for Appium  Features of New Appium Client  Live practical to automate Twitter Mobile App  Live practical to automate Facebook Mobile App  Best practices for framework development using Appium and Java
  • 31.
    Appium using NPMand CLI  npm install –g appium  appium https://github.com/appium/appium/blob/master/docs/en/writing-running- appium/caps.md
  • 32.
    Appium Live Demo Twitter  Facebook
  • 33.
    Features of NewAppium Client
  • 34.
    Best practices forframework development
  • 35.
    References  http://appium.io/  https://appium.io/slate/en/tutorial/android.html https://github.com/appium/appium  https://wiki.saucelabs.com/display/DOCS/Getting+Started+with+Appium+ for+Mobile+Native+Application+Testing  https://github.com/appium/appium-desktop  http://testng.org/doc/  https://maven.apache.org/