AUTOMATION TOOL CHECKLIST • Easy to set up and maintain • Updated regularly • Well-documented • Supports iOS and Android • Runs on devices untethered • Readable tests
RECOMMENDED SETUP • Ruby 1.9.3 • RVM • Gemset • How to install Xcode, Homebrew, Git, RVM, & Ruby 1.9.3 on Snow Leopard, Lion, and Mountain Lion • Enhance your Ruby development with RVM gemsets and .rvmrc
FEATURE EXAMPLE Feature: Comments In order to contribute to the discussion As a Hacker News reader I want to be able to add a comment Scenario: User not logged in Given I am not logged in When I go to comment on a submission Then I should be prompted to log in
DON’T DO THIS Scenario: User logged in, but cancels comment form Given the app is running When I touch "Profile" Then I wait to see "Login" Then I fill in “Username” with "my_username" Then I touch “Password” Then I fill in “Password” with "my_password" Then I touch done Then I wait to see "Logout" Then I touch "Home" Then I touch list item number 1 Then I touch "reply" Then I touch "Cancel" Then I should see "Submission"
DO THIS Scenario: User logged in, but cancels comment form Given I am logged in as “username” When I go to comment on a submission But I cancel the comment form Then I should see the submission And a comment from "username" should not appear
STEP DEFINITION Given /^I am logged in as "([^\"]*)"$/ do |username| macro 'I touch "Profile"' if element_exists("button marked:'Logout'") sleep(1) else macro %Q[I fill in “Username” with "#{username}"] macro 'I touch “Password”' macro 'I fill in “Password” with "my_password"' macro 'I touch done' macro 'I wait to see "Logout"' end end
UPDATING IS EASY, BUT... • gem update calabash-cucumber • calabash-ios download (not with SVN) • curl http://localhost:37265/version (to verify framework is up to date) • May need to “Reset Content and Settings” in Simulator • When new files are added, update Target Membership
TIPS & TRICKS Use .bash_profile aliases self.myButton.accessibilityElementsHidden = YES; Use console to experiment and “query” to find elements Participate in the Google Group Get commit notifications with GitHub for Mac
REFERENCES • iOS Automated Testing with Calabash, Cucumber, and Ruby • Create aliases in .bash_profile to assign shortcuts for common Terminal commands • A Calabash custom step to Swipe to delete all cells in a Table View • Code for America • AOL Mobile