ios automated testing with calabash: tips and tricks
DESCRIPTION
TRANSCRIPT
iOS Automated Testing with Calabash: Tips and Tricks
Moncef Belyamani@monfresh
Mobile Testing Summit / November 1, 2012 / San Francisco
iPad Apps
iPhone Apps
AUTOMATION TOOL CHECKLIST
• Easy to set up and maintain
• Updated regularly
• Well-documented
• Supports iOS and Android
• Runs on devices untethered
• Readable tests
TOOLS EVALUATED• Anteater
• Calabash
• FoneMonkey (before it became MonkeyTalk)
• Frank
• KIF
• TouchTest
• UI Automation
• Zucchini
AND THE WINNER IS...
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
CALABASH TEST
FEATURE FILE + STEP DEFINITION
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
KEEP IN MIND
Swiping depends on device orientation
Can only touch visible items
TIPS & TRICKSUse .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
RECOMMENDATIONS
• Full-time Automation Engineer
•Work with Dev to make apps accessible
• Continuous Integration
• Contribute fixes and custom steps
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
Moncef Belyamani
@monfresh
moncefbelyamani.com
about.me/moncef
QUESTIONS?
THANK YOU!