Wednesday, August 5, 2015

UI Testing in Xcode 7

X Code 7 introduces a new UI testing feature for fully integrated with X Code IDE. UI Testing, Recording and reporting are three major updates. The core technologies are XCTest and Accessibility feature. It requires new OS features iOS 9 and OS X 10.11 and Privacy protection for iOS devices enabled for development and connected to a trust host running on XCode. OS X must grant permissions to XCode helper for prompted on first run.



X Code is offering a target template that can target to be tested “Cocoa Touch UI Testing Bundle (iOS)” and “Cocoa UI Testing bundle (OS X)”. This target can create an UI project under project source code and place the UI test cases into same project.



UI Recording 
               Interact with your app and generate the code for new test cases and existing test cases. It will automatically find UI elements with synthesizing your user events. 



       APIs
There are 3 new classes in this release.

XCUIApplciation
  • Proxy for the tested Application and its run in a separate process
  • Launching target app If any existing process is running, It will terminates any pre existing instance
  • Its starting point for finding elements in the app 

Example : Testing the Add button
// Application 
let app =  XCUIApplciation()
app.launch()
// Element and Query 
let addButton = app.buttons["Add"]
addButton.tap()
// Assertion
XCTAssertEqual(app.tables.cells.count,1)

XCUIElement
  • Element Type: Button, Cell, Window, Etc. 
  • Identifiers: Accessibility identifier, Label, Class, Etc. 
  • Element hierarchy: Application is the root of tree elements. These elements can be used by queries with type of element and its identifiers.
  • Element uniqueness: Every XCUIElement is backed by a query and every query must resolve exactly one match like as XPath. If it matches multiple matches then it cause the test failure. This can be found by using exists property.
  • Event synthesis: It will simulate user interactions on elements. All APIs are platform-specific.  
For OS X:button.click();
For iOS : button.tap();  
For iOS and OS X textField.typeText("Hello World");
XCUIElementQuery
  • This API can help us for specifying elements and Queries work based on     relationships and filtering. Expressing relationships by Descendants, Children and containment.
  • Filtering can be done by

                                      Element Type: Button, Table, Menu, etc.
                                       Identifiers: Accessibility identifier, label, title, etc.
                                       Predicates: Value, Partial matching and others

                   Combining relationships and Filtering
descendantsMatchingType()
childrenMatchingType()
containingType()
    
                   allButtons = app.descendantsMatchingType(.Button)
                   childButtons = navBar.childrenMatchingType(.Button)
                          allCellsInTable = table.descendantsMatchingType(.Cell)
                   cellQuery = cells.containingType(.StaticText, identifier:”Groceries”) 

Test case results
            Show results for all tests
            Pass/fail
            Failure reason Performance metrics

No comments:

Post a Comment