Swift 3 Xcode 8 Update
func testFacebookLogin() { let app = XCUIApplication() // set up an expectation predicate to test whether elements exist let exists = NSPredicate(format: "exists == true") // as soon as your sign in button shows up, press it let facebookSignInButton = app.buttons["Login With Facebook"] expectation(for: exists, evaluatedWith: facebookSignInButton, handler: nil) facebookSignInButton.tap() // wait for the "Confirm" title at the top of facebook sign in screen let confirmTitle = app.staticTexts["Confirm"] expectation(for: exists, evaluatedWith: confirmTitle, handler: nil) // create a reference to the button through the webView and press it let webView = app.descendants(matching: .webView) webView.buttons["OK"].tap() // wait for your app to return and test for expected behavior here self.waitForExpectations(timeout: 10, handler: nil) }
Extension:
extension XCUIElement { func forceTap() { if self.isHittable { self.tap() } else { let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: .zero) coordinate.tap() } }
Swift 2
func testFacebookLogin() { let app = XCUIApplication() // set up an expectation predicate to test whether elements exist let exists = NSPredicate(format: "exists == true") // as soon as your sign in button shows up, press it let facebookSignInButton = app.buttons["Sign in with Facebook"] expectationForPredicate(exists, evaluatedWithObject: facebookSignInButton, handler: nil) facebookSignInButton.tap() // wait for the "Confirm" title at the top of facebook sign in screen let confirmTitle = app.staticTexts["Confirm"] expectationForPredicate(exists, evaluatedWithObject: confirmTitle, handler: nil) // create a reference to the button through the webView and press it var webView = app.descendantsMatchingType(.WebView) webView.buttons["OK"].tap() // wait for your app to return and test for expected behavior here }
In my case, I also had to deal with a denial of approval: UI testing error - Could not find the hit point for Button error through forceTap () extension:
extension XCUIElement { func forceTap() { if self.hittable { self.tap() } else { let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0)) coordinate.tap() } } }
according to this wonderful blog post here
source share