Basic Functionality
Testing if an element exists XCTAssert(app.staticTexts["Welcome"].exists) |
|
Testing if text with an ellipse exists A full text match will find an element even if the displayed text has an ellipse due to truncation. let longNameCell = app.staticTexts["Adolph Blaine Charles David Earl Frederick Gerald Hubert Irvin John Kenneth Lloyd Martin Nero Oliver Paul Quincy Randolph Sherman Thomas Uncas Victor William Xerxes Yancy Wolfeschlegelsteinhausenbergerdorff, Senior"] XCTAssert(longNameCell.exists) // displayed text is "Adolph Blaine Charles David Earl Freder..." |
|
Waiting for an element to appear Set up an expectation to use with XCTest. The predicate will wait until the element's let goLabel = self.app.staticTexts["Go!"] XCTAssertFalse(goLabel.exists) let exists = NSPredicate(format: "exists == true") expectationForPredicate(exists, evaluatedWithObject: goLabel, handler: nil) app.buttons["Ready, set..."].tap() waitForExpectationsWithTimeout(5, handler: nil) XCTAssert(goLabel.exists) |
Interacting with System Controls
Tapping buttons Identify buttons by their accessibility label. app.buttons["Add"].tap() |
|
Typing text First make sure the text field has focus by tapping on it. let textField = app.textFields["Username"] textField.tap() textField.typeText("joemasilotti") |
|
Dismissing alerts app.alerts["Alert Title"].buttons["Button Title"].tap() |
|
Handling system alerts Present a location services authorization dialog to the user and dismiss it with the following code. Before presenting the alert add a UI Interuption Handler. When this fires, dismiss with the "Allow" button. addUIInterruptionMonitorWithDescription("Location Services") { (alert) -> Bool in alert.buttons["Allow"].tap() return true } app.buttons["Request Location"].tap() app.tap() // need to interact with the app again for the handler to fire |
|
Sliding sliders This will slide the value of the slider to 70%. app.sliders.element.adjustToNormalizedSliderPosition(0.7) |
|
Interacting with pickers A picker with one wheel: app.pickerWheels.element.adjustToPickerWheelValue("Picker Wheel Item Title") A picker with multiple wheels. Make sure to set the accessibility delegate so the framework can identify the different wheels. let firstPredicate = NSPredicate(format: "label BEGINSWITH 'First Picker'") let firstPicker = app.pickerWheels.elementMatchingPredicate(firstPredicate) firstPicker.adjustToPickerWheelValue("first value") let secondPredicate = NSPredicate(format: "label BEGINSWITH 'Second Picker'") let secondPicker = app.pickerWheels.elementMatchingPredicate(secondPredicate) secondPicker.adjustToPickerWheelValue("second value") |
|
Tapping links in web views app.links["Tweet this"].tap() |
Interactions
Verifying the current controller's title XCTAssert(app.navigationBars["Details"].exists) |
|
Reordering table cells If you have a Using this we can drag one reorder control to another, essentially reordering the cells. let topButton = app.buttons["Reorder Top Cell"] let bottomButton = app.buttons["Reorder Bottom Cell"] bottomButton.pressForDuration(0.5, thenDragToElement: topButton) XCTAssertLessThanOrEqual(bottomButton.frame.maxY, topButton.frame.minY) |
|
Pull to refresh Create a let firstCell = app.staticTexts["Adrienne"] let start = firstCell.coordinateWithNormalizedOffset(CGVectorMake(0, 0)) let finish = firstCell.coordinateWithNormalizedOffset(CGVectorMake(0, 6)) start.pressForDuration(0, thenDragToCoordinate: finish) |
|
Pushing and popping view controllers Test if a view controller was pushed onto the navigation stack. app.buttons["More Info"].tap() XCTAssert(app.navigationBars["Volleyball?"].exists) Pop a view controller by tapping the back button in the navigation bar and assert that the title in the navigation bar has changed. app.navigationBars.buttons.elementBoundByIndex(0).tap() XCTAssert(app.navigationBars["Volley"].exists) |
Notes
- Based on a cheat sheet by joemasilotti