UI  Automation  :  A   Primer Cocoaheads, Ann Arbor October, 2013
About  Myself… Principal  Software  Developer  @  Barracuda  Networks Freelance  App  Developer  &  Consultant   www.priyaontech.com www.lunariasoftware.com TwiIer:@rajagp www.priyaontech.com 2
Test  Categories •  Unit Testing o  Testing from developer’s perspective. o  Testing that a particular function is right o  Rest of system mocked up •  Functional Testing o  Testing from user’s perspective. o  Testing that system behaves right Today  we  talk  about    Functional  Testing www.priyaontech.com 3
Functional  Testing  -­‐‑   Manual •  Pros o  Non programmer can do it o  No special hardware/software required o  Some aspects have to be manually tested – eg. the actual rendering, user experience •  Cons o  Time consuming (regression, large data sets and use cases) o  Lack of Reproducibility/ traceability (“Not sure what I did exactly to cause the app to crash..”) www.priyaontech.com 4
Functional  Testing  -­‐‑   Automated •  Pros o  Saves time , effort •  Will offset the initial cost of writing the test scripts o  Consistency / Repeatable / Traceable o  Regression o  Large numbers of test data sets o  Continuous Integration •  Cons o  Need some programming skills www.priyaontech.com 5
Options www.priyaontech.com 6 Tool Platform Scripting  Language Technical  Details Calabash iOS/Andoird   (Device  &   Simulator) BDD.  Feature   descriptions  wriIen  in   Gherkin.  Test  steps  in   Ruby. Uses  Cucumber  for  driving   tests.  A  HTTP  bounjour  server   runs  in  your  app  and  accepts   commands  from  test  driver   (HTTP/JSON).  Open  Source. Uses  Private  APIs Frank iOS  (Device  &   Simulator) BDD.  Feature   descriptions  wriIen  in   Gherkin.  Test  steps  in   Ruby. Uses  Cucumber  for  driving   tests.  A  HTTP  Frank  server   runs  in  your  app  and  accepts   commands  from  test  driver   over  “Franky”  protocol  (HTTP/ JSON).  Open  Source Uses  Private  APIs KIF iOS   (  Simulator/ device) Objective-­‐‑C Framework  integrated  into   app.  No  HTTP  server  or   external  driver.  Open  Source.  
Options www.priyaontech.com 7 Tool Platform Scripting  Language Technical  Details Fone   Monkey/   Monkey   Talk iOS/Andoird   (Device  &   Simulator)  &   Web  Apps JS,  Obj-­‐‑C,  monkeyTalk   scripts Record  actions  using   MonkeyTalk  console,  save/edit   script  &  playback.  Open   Source  .  Premium  Support  will   cost  $$$ We’ll  discuss  UIAutomations  today
UI  Automation •  Automated functional test framework from Apple •  UI interactions with app driven using test scripts •  Test scripts written in Javascript •  Test scripts executed using “Automation” instrument •  Actively developed & maintained (well….maybe) www.priyaontech.com 8
UI  Automation •  Good user interaction coverage •  Can work with no/minimal app changes (recommend UIAccessibility) •  Works on simulators and devices •  Only on apps that are signed with development profile •  Simplicity www.priyaontech.com 9
UI  Accessibility •  Informal Protocol •  Interface to assist people with disabilities •  Uniquely identify every element in the view hierarchy •  Every UIKit element can be specified to be accessible, using "label" attribute •  Recommended to use w/ UI Automations o  In order to interact with an element, you need to identify it •  Identifying element by position makes script fragile www.priyaontech.com 10
UI  Accessibility  Rules •  Individual View o  Enable Accessibility o  Set Accessibility Label on the view •  Container View o  Disable Accessibility on container view o  Enable Accessibility on every contained view that you want accessible o  Specify Labels for container and contained views www.priyaontech.com 11
UI  Element  Hierarchy www.priyaontech.com 12 Target Application Window View View UIATarget.localTarget() .frontMostApp() .mainWindow() [UIAElement].logElementTree()
Tuneup.js •  A set of Javascript utilities to facilitate writing of UIAutomation scripts •  Lot of convenience Wrapper functions to handle repetitive tasks(isDeviceiPad, isDeviceiPhone ,assertLeftButtonNamed …) •  Enforce a structure to your test scripts – Invoke “test” function •  Alex Vollmer, http://www.tuneupjs.org www.priyaontech.com 13
Demo   Get  it  at  :    hIp://priyaontech.com/ndownloads www.priyaontech.com 14
Thank  you!     Further  Reading  :  Test  iOS  Apps  with  UI  Automation   Bug  Hunting  Made  Easy   By  Jonathan  Penn   www.priyaontech.com @rajagp www.priyaontech.com 15

Introduction to UI Automation Framework

  • 1.
    UI  Automation  : A   Primer Cocoaheads, Ann Arbor October, 2013
  • 2.
    About  Myself… Principal  Software Developer  @  Barracuda  Networks Freelance  App  Developer  &  Consultant   www.priyaontech.com www.lunariasoftware.com TwiIer:@rajagp www.priyaontech.com 2
  • 3.
    Test  Categories •  UnitTesting o  Testing from developer’s perspective. o  Testing that a particular function is right o  Rest of system mocked up •  Functional Testing o  Testing from user’s perspective. o  Testing that system behaves right Today  we  talk  about    Functional  Testing www.priyaontech.com 3
  • 4.
    Functional  Testing  -­‐‑  Manual •  Pros o  Non programmer can do it o  No special hardware/software required o  Some aspects have to be manually tested – eg. the actual rendering, user experience •  Cons o  Time consuming (regression, large data sets and use cases) o  Lack of Reproducibility/ traceability (“Not sure what I did exactly to cause the app to crash..”) www.priyaontech.com 4
  • 5.
    Functional  Testing  -­‐‑  Automated •  Pros o  Saves time , effort •  Will offset the initial cost of writing the test scripts o  Consistency / Repeatable / Traceable o  Regression o  Large numbers of test data sets o  Continuous Integration •  Cons o  Need some programming skills www.priyaontech.com 5
  • 6.
    Options www.priyaontech.com 6 Tool Platform Scripting  Language Technical  Details Calabash iOS/Andoird   (Device  &   Simulator) BDD.  Feature   descriptions  wriIen  in   Gherkin.  Test  steps  in   Ruby. Uses  Cucumber  for  driving   tests.  A  HTTP  bounjour  server   runs  in  your  app  and  accepts   commands  from  test  driver   (HTTP/JSON).  Open  Source. Uses  Private  APIs Frank iOS  (Device  &   Simulator) BDD.  Feature   descriptions  wriIen  in   Gherkin.  Test  steps  in   Ruby. Uses  Cucumber  for  driving   tests.  A  HTTP  Frank  server   runs  in  your  app  and  accepts   commands  from  test  driver   over  “Franky”  protocol  (HTTP/ JSON).  Open  Source Uses  Private  APIs KIF iOS   (  Simulator/ device) Objective-­‐‑C Framework  integrated  into   app.  No  HTTP  server  or   external  driver.  Open  Source.  
  • 7.
    Options www.priyaontech.com 7 Tool Platform Scripting  Language Technical  Details Fone   Monkey/   Monkey   Talk iOS/Andoird   (Device  &   Simulator)  &   Web  Apps JS,  Obj-­‐‑C,  monkeyTalk   scripts Record  actions  using   MonkeyTalk  console,  save/edit   script  &  playback.  Open   Source  .  Premium  Support  will   cost  $$$ We’ll  discuss  UIAutomations  today
  • 8.
    UI  Automation •  Automatedfunctional test framework from Apple •  UI interactions with app driven using test scripts •  Test scripts written in Javascript •  Test scripts executed using “Automation” instrument •  Actively developed & maintained (well….maybe) www.priyaontech.com 8
  • 9.
    UI  Automation •  Gooduser interaction coverage •  Can work with no/minimal app changes (recommend UIAccessibility) •  Works on simulators and devices •  Only on apps that are signed with development profile •  Simplicity www.priyaontech.com 9
  • 10.
    UI  Accessibility •  InformalProtocol •  Interface to assist people with disabilities •  Uniquely identify every element in the view hierarchy •  Every UIKit element can be specified to be accessible, using "label" attribute •  Recommended to use w/ UI Automations o  In order to interact with an element, you need to identify it •  Identifying element by position makes script fragile www.priyaontech.com 10
  • 11.
    UI  Accessibility  Rules • Individual View o  Enable Accessibility o  Set Accessibility Label on the view •  Container View o  Disable Accessibility on container view o  Enable Accessibility on every contained view that you want accessible o  Specify Labels for container and contained views www.priyaontech.com 11
  • 12.
    UI  Element  Hierarchy www.priyaontech.com12 Target Application Window View View UIATarget.localTarget() .frontMostApp() .mainWindow() [UIAElement].logElementTree()
  • 13.
    Tuneup.js •  A setof Javascript utilities to facilitate writing of UIAutomation scripts •  Lot of convenience Wrapper functions to handle repetitive tasks(isDeviceiPad, isDeviceiPhone ,assertLeftButtonNamed …) •  Enforce a structure to your test scripts – Invoke “test” function •  Alex Vollmer, http://www.tuneupjs.org www.priyaontech.com 13
  • 14.
    Demo   Get  it at  :    hIp://priyaontech.com/ndownloads www.priyaontech.com 14
  • 15.
    Thank  you!     Further  Reading  :  Test  iOS  Apps  with  UI  Automation   Bug  Hunting  Made  Easy   By  Jonathan  Penn   www.priyaontech.com @rajagp www.priyaontech.com 15