MOBILE AUTOMATION
MADE AWESOME
ABOUT THE SPEAKER
Dan Cuellar
@thedancuellar
• Creator of Appium
• Head of Software Testing at FOODit
• Previously at Shazam, Zoosk, and Microsoft
• BS in Computer Science from Carnegie Mellon
THE MOST TERRIFYING 5 WORDS IN TESTING
THIS ALL SOUNDS FAMILIAR
EVERYTHING IS NOT AWESOME
TIME TO SPREAD THE WORD
WHAT IS APPIUM
• An implementation of the Selenium JSON-wire protocol that
controls native and hybrid iOS and Android application
• The most popular open source mobile functional testing
framework
APPIUM PHILOSOPHY
• Use standardized and sanctioned APIs and techniques
• Code in the language of your choice
• Java, C#, Python, Ruby, Objective-C, node.js, PHP, and more
• Do not modify the application under test
• Keep it free and open source
HOW DOES IT WORK? UIAutomation /
UIAutomator
Appium
Server
Test Script
JSON-Wire Protocol Request
JSON-Wire Protocol Response
HTTP
BY THE NUMBERS
In the last 3 years
• Over 3,000 Stars, 2,000 Forks on GitHub
• Over 150 Contributors and 5,000 commits
• Over 150,000 downloads of Appium 1.0
• Over 3,000 issues closed
@Before
public void setUp() throws Exception {
// set up appium
File app = new File("/path/to/your/TestApp.app");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformVersion", ”9.1");
capabilities.setCapability("deviceName", "iPhone 6");
capabilities.setCapability("app", app.getAbsolutePath());
driver = new IOSDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
THE CODE – IOS SETUP
@Before
public void setUp() throws Exception {
// set up appium
File app = new File(”/path/to/my/test-app.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("automationName",”Android");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", ”com.yourcompany.testapp");
capabilities.setCapability("appActivity", ".HomeScreenActivity");
driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
}
THE CODE – ANDROID SETUP
WebElement el = driver.findElement(By.className("UIAButton"));
WebElement el = driver.findElement(By.xpath("//UIATextField[1]"));
WebElement el = driver.findElement(MobileBy.AccessibilityId("Done"));
THE CODE – FINDING ELEMENTS
el.click();
el.sendKeys("Hello World");
driver.swipe(sliderLocation.getX(), sliderLocation.getY(),
sliderLocation.getX()-100, sliderLocation.getY(), 1000);
THE CODE – ACTIONS
Each webview in your app is a context. Change context and automate as
you would a webpage using regular selenium syntax.
driver.context(contextName);
WebElement el = driver.findElement(By.cssSelector(".awesome"));
el.click();
AUTOMATING WEB-VIEWS
WHAT’S NEW IN APPIUM 1.5?
• Complete rewrite of the entire codebase
• Continuous Integration and Unit Tests
• Command line arguments are mostly capabilities now
• Code of Conduct and Governance
WHY REWRITE?
• 3 years of patches and organic growth
• Many complaints about instability
• Code was not modular enough
• Old and confusing ES5 code
• Callback Hell
• Poorly Tested
WHAT’S COMING NEXT
• Windows Phone and Windows 10 application support
• New GUIs
• Multiple New iOS Back-ends
• Android backend rewrite using UIAutomator 2
• Better docs and onboarding material
• Appium Foundation
WINDOWS SUPPORT
https://github.com/2gis/Winium
NEW IOS BACK-ENDS
• WebDriverAgent
• https://github.com/facebook/WebDriverAgent
• Multiple Simulators
• All Applications
• XCUITest
• Created by Apple
• Better support for future versions of iOS
ROBOTS
HOW DOES IT WORK?
• Calibrate the robot to map points in the physical world to points on a
device screen
• Run an app on the device with Appium that can tell you what
coordinates are being touched
• Touch three places on the device and record the physical and device-
centric coordinates
• Build a matrix to translate any point between the two systems
• Intercept touch actions with the Appium Server and send them to
the robot
THE MATH
PERSONAL TAKEAWAY
“Life can be much broader once you discover one simple fact:
Everything around you that you call life was made up by people that
were no smarter than you and you can change it, you can influence it,
you can build your own things that other people can use.
Once you learn that, you'll never be the same again.”
-Steve Jobs
MORE INFO
• Website: http://www.appium.io
• Slack: appium.slack.com
• Forum: discuss.appium.io
• GitHub: http://www.github.com/appium/appium

Selenium Camp 2016

  • 1.
  • 2.
    ABOUT THE SPEAKER DanCuellar @thedancuellar • Creator of Appium • Head of Software Testing at FOODit • Previously at Shazam, Zoosk, and Microsoft • BS in Computer Science from Carnegie Mellon
  • 5.
    THE MOST TERRIFYING5 WORDS IN TESTING
  • 6.
  • 7.
  • 8.
  • 9.
    WHAT IS APPIUM •An implementation of the Selenium JSON-wire protocol that controls native and hybrid iOS and Android application • The most popular open source mobile functional testing framework
  • 10.
    APPIUM PHILOSOPHY • Usestandardized and sanctioned APIs and techniques • Code in the language of your choice • Java, C#, Python, Ruby, Objective-C, node.js, PHP, and more • Do not modify the application under test • Keep it free and open source
  • 11.
    HOW DOES ITWORK? UIAutomation / UIAutomator Appium Server Test Script JSON-Wire Protocol Request JSON-Wire Protocol Response HTTP
  • 12.
    BY THE NUMBERS Inthe last 3 years • Over 3,000 Stars, 2,000 Forks on GitHub • Over 150 Contributors and 5,000 commits • Over 150,000 downloads of Appium 1.0 • Over 3,000 issues closed
  • 13.
    @Before public void setUp()throws Exception { // set up appium File app = new File("/path/to/your/TestApp.app"); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("platformVersion", ”9.1"); capabilities.setCapability("deviceName", "iPhone 6"); capabilities.setCapability("app", app.getAbsolutePath()); driver = new IOSDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } THE CODE – IOS SETUP
  • 14.
    @Before public void setUp()throws Exception { // set up appium File app = new File(”/path/to/my/test-app.apk"); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("automationName",”Android"); capabilities.setCapability("app", app.getAbsolutePath()); capabilities.setCapability("appPackage", ”com.yourcompany.testapp"); capabilities.setCapability("appActivity", ".HomeScreenActivity"); driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } THE CODE – ANDROID SETUP
  • 15.
    WebElement el =driver.findElement(By.className("UIAButton")); WebElement el = driver.findElement(By.xpath("//UIATextField[1]")); WebElement el = driver.findElement(MobileBy.AccessibilityId("Done")); THE CODE – FINDING ELEMENTS
  • 16.
  • 17.
    Each webview inyour app is a context. Change context and automate as you would a webpage using regular selenium syntax. driver.context(contextName); WebElement el = driver.findElement(By.cssSelector(".awesome")); el.click(); AUTOMATING WEB-VIEWS
  • 18.
    WHAT’S NEW INAPPIUM 1.5? • Complete rewrite of the entire codebase • Continuous Integration and Unit Tests • Command line arguments are mostly capabilities now • Code of Conduct and Governance
  • 19.
    WHY REWRITE? • 3years of patches and organic growth • Many complaints about instability • Code was not modular enough • Old and confusing ES5 code • Callback Hell • Poorly Tested
  • 23.
    WHAT’S COMING NEXT •Windows Phone and Windows 10 application support • New GUIs • Multiple New iOS Back-ends • Android backend rewrite using UIAutomator 2 • Better docs and onboarding material • Appium Foundation
  • 24.
  • 25.
  • 28.
    NEW IOS BACK-ENDS •WebDriverAgent • https://github.com/facebook/WebDriverAgent • Multiple Simulators • All Applications • XCUITest • Created by Apple • Better support for future versions of iOS
  • 30.
  • 31.
    HOW DOES ITWORK? • Calibrate the robot to map points in the physical world to points on a device screen • Run an app on the device with Appium that can tell you what coordinates are being touched • Touch three places on the device and record the physical and device- centric coordinates • Build a matrix to translate any point between the two systems • Intercept touch actions with the Appium Server and send them to the robot
  • 32.
  • 33.
    PERSONAL TAKEAWAY “Life canbe much broader once you discover one simple fact: Everything around you that you call life was made up by people that were no smarter than you and you can change it, you can influence it, you can build your own things that other people can use. Once you learn that, you'll never be the same again.” -Steve Jobs
  • 34.
    MORE INFO • Website:http://www.appium.io • Slack: appium.slack.com • Forum: discuss.appium.io • GitHub: http://www.github.com/appium/appium