Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cross-Platform Testing - Mobile Test Summit SF

Pete Hodgson
November 01, 2012

Cross-Platform Testing - Mobile Test Summit SF

4 talks in one!

I talked briefly about Frank.

I talked a lot about how to use the Page Object pattern to enable re-usable, cross-platform tests.

Then I introduced PublicAutomation, a lightweight wrapper around Apple's private UIAutomation framework.

Finally I announced that lesspainful.com will be providing cloud hosting and support for Frank test suites.

Pete Hodgson

November 01, 2012
Tweet

More Decks by Pete Hodgson

Other Decks in Programming

Transcript

  1. Thursday, November 1, 12

    View Slide

  2. Hi, I’m
    Pete Hodgson
    Thursday, November 1, 12

    View Slide

  3. Thursday, November 1, 12

    View Slide

  4. We’re
    Hiring
    Thursday, November 1, 12

    View Slide

  5. Thursday, November 1, 12

    View Slide

  6. two-minute tour of
    Frank
    Thursday, November 1, 12

    View Slide

  7. two-minute tour of
    Frank
    UI automation tool for native iOS
    apps - “WebDriver for iOS”
    Write your tests using the language
    and tooling you want
    integrate with CI
    powerful view-selection facilities
    explore a running app with symbiote
    Thursday, November 1, 12

    View Slide

  8. symbiote
    Thursday, November 1, 12

    View Slide

  9. lots more to
    tell you, but
    not right now
    Thursday, November 1, 12

    View Slide

  10. or come talk to me
    to find out more
    about Frank
    testingwithfrank.com
    Thursday, November 1, 12

    View Slide

  11. Cross-platform
    testing
    for mobile
    Thursday, November 1, 12

    View Slide

  12. Phone
    Thursday, November 1, 12

    View Slide

  13. Test Scripts
    Phone
    Thursday, November 1, 12

    View Slide

  14. Test Scripts
    Phone
    Automation
    Driver
    Thursday, November 1, 12

    View Slide

  15. Test Scripts
    Phone
    Automation
    Driver
    ...
    ...
    type_into_text_field( ‘username’, user )
    type_into_text_field( ‘password’, pass )
    touch “button marked:‘Login’”
    wait_for_element_to_exist(
    “loginBanner marked:‘Welcome #{user}’”
    )
    ...
    ...
    Thursday, November 1, 12

    View Slide

  16. Test Scripts
    Phone
    Automation
    Driver
    ...
    ...
    type_into_text_field( ‘username’, user )
    type_into_text_field( ‘password’, pass )
    touch “button marked:‘Login’”
    wait_for_element_to_exist(
    “loginBanner marked:‘Welcome #{user}’”
    )
    ...
    ...
    Hard to
    Read!
    Thursday, November 1, 12

    View Slide

  17. Test Scripts
    Phone
    Automation
    Driver
    ...
    ...
    type_into_text_field( ‘username’, user )
    type_into_text_field( ‘password’, pass )
    touch “button marked:‘Login’”
    wait_for_element_to_exist(
    “loginBanner marked:‘Welcome #{user}’”
    )
    ...
    ...
    Fragile!
    Thursday, November 1, 12

    View Slide

  18. Test Scripts
    Phone
    Automation
    Driver
    ...
    ...
    type_into_text_field( ‘username’, user )
    type_into_text_field( ‘password’, pass )
    touch “button marked:‘Login’”
    wait_for_element_to_exist(
    “loginBanner marked:‘Welcome #{user}’”
    )
    ...
    ...
    No
    Abstractions
    Thursday, November 1, 12

    View Slide

  19. Test Scripts
    Phone
    Automation
    Driver
    Thursday, November 1, 12

    View Slide

  20. the
    Page Object
    Pattern
    Thursday, November 1, 12

    View Slide

  21. Test Scripts
    Phone
    Automation
    Driver
    Thursday, November 1, 12

    View Slide

  22. Test Scripts
    Phone
    Automation
    Driver
    Page
    Objects
    Thursday, November 1, 12

    View Slide

  23. Test Scripts
    Phone
    Automation
    Driver
    Page
    Objects
    Thursday, November 1, 12

    View Slide

  24. Test Scripts
    Phone
    Automation
    Driver
    Page
    Objects
    class HomeScreen
    def login(user,pass)
    type_into_text_field( ‘username’, user )
    type_into_text_field( ‘password’, pass )
    touch “button marked:‘Login’”
    end
    def verify_logged_in_as(user)
    wait_for_element_to_exist(
    “loginBanner marked:‘Welcome #{user}’”
    )
    end
    end
    Thursday, November 1, 12

    View Slide

  25. Test Scripts
    Phone
    Automation
    Driver
    Page
    Objects
    ...
    ...
    home_screen.login( ‘pete’, ‘sekrit’ )
    home_screen.verify_logged_in_as( ‘pete’ )
    ...
    ...
    Thursday, November 1, 12

    View Slide

  26. Phone
    Automation
    Driver
    Page
    Objects
    User Tech
    Test Scripts
    Thursday, November 1, 12

    View Slide

  27. Cross-platform
    testing
    for mobile
    Thursday, November 1, 12

    View Slide

  28. Cross-platform
    testing
    for mobile
    Thursday, November 1, 12

    View Slide

  29. Cross-platform
    testing
    for mobile
    Thursday, November 1, 12

    View Slide

  30. Phone
    Automation
    Driver
    Page
    Objects
    Test Scripts
    Thursday, November 1, 12

    View Slide

  31. Phone
    Automation
    Driver
    Page
    Objects
    Test Scripts
    Thursday, November 1, 12

    View Slide

  32. iPhone-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  33. iPhone-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  34. iPhone-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  35. iPhone-specific
    ‘stuff’
    Web-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  36. iPhone-specific
    ‘stuff’
    Web-specific
    ‘stuff’
    Test Scripts class HomeScreen
    def login(user,pass)
    # WEBDRIVER STUFF GOES HERE
    end
    def verify_logged_in_as(user)
    # MORE WEBDRIVER STUFF
    end
    end
    Thursday, November 1, 12

    View Slide

  37. iPhone-specific
    ‘stuff’
    Web-specific
    ‘stuff’
    Test Scripts class HomeScreen
    def login(user,pass)
    # WEBDRIVER STUFF GOES HERE
    end
    def verify_logged_in_as(user)
    # MORE WEBDRIVER STUFF
    end
    end
    same
    interface
    Thursday, November 1, 12

    View Slide

  38. iPhone-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  39. iPhone-specific
    ‘stuff’
    iPad-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  40. iPhone-specific
    ‘stuff’
    iPad-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  41. iPhone-specific
    ‘stuff’
    iPad-specific
    ‘stuff’
    Test Scripts
    Thursday, November 1, 12

    View Slide

  42. User Tech
    Thursday, November 1, 12

    View Slide

  43. User Platform
    Thursday, November 1, 12

    View Slide

  44. Thursday, November 1, 12

    View Slide

  45. UIAutomation
    Apple’s
    Thursday, November 1, 12

    View Slide

  46. PublicAutomation
    Thursday, November 1, 12

    View Slide

  47. Bwoken
    Zucchini
    tuneup.js
    UISpec
    NativeDriver
    KIF
    Calabash
    Frank
    alternatives to
    stock UIAutomation
    Thursday, November 1, 12

    View Slide

  48. extend
    UIAutomation
    Bwoken
    Zucchini
    tuneup.js
    UISpec
    NativeDriver
    KIF
    Calabash
    Frank
    Thursday, November 1, 12

    View Slide

  49. replace
    UIAutomation
    Bwoken
    Zucchini
    tuneup.js
    UISpec
    NativeDriver
    KIF
    Calabash
    Frank
    Thursday, November 1, 12

    View Slide

  50. a third way:
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  51. exposes Apple’s own
    low-level UIAutomation
    private framework
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  52. provides the power of
    Apple’s touch synthesis
    implementation
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  53. gives the freedom to
    build better integration
    and tooling on top
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  54. has been Frank’s touch
    synthesis library since
    1.0
    (replacing KIF)
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  55. open source and up on
    github
    bit.ly/publicautomation
    PublicAutomation
    Thursday, November 1, 12

    View Slide

  56. Thanks!
    Thursday, November 1, 12

    View Slide

  57. Thanks!
    Pete Hodgson
    @ph1
    blog.thepete.net
    [email protected]
    Thursday, November 1, 12

    View Slide

  58. Thursday, November 1, 12

    View Slide

  59. one
    more
    thing...
    Thursday, November 1, 12

    View Slide

  60. Thursday, November 1, 12

    View Slide