UITesting of Alerts в xCode 7.1

Я пишу UITests в xCode 7.1 и испытываю проблемы при тестировании предупреждений (Разрешите уведомления в моем случае). При создании теста xCode записывает этот код:

app.alerts["\U201cAppName\U201d Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap() 

Что сразу вызывает ошибку:

Недопустимая escape-последовательность в литерале

Поэтому я заменил код xCode на:

 app.alerts["\u{201c}AppName\u{201d} Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap() 

Но когда я запускаю UITest, он терпит неудачу с сообщением:

Ошибка тестирования пользовательского интерфейса – совпадений не найдено для Alert

То же самое для кода

 app.alerts["“AppName” Would Like to Send You Notifications"].collectionViews.buttons["OK"].tap() 

Я также пробовал

 app.alerts.collectionViews.buttons["OK"].tap() 

как люди советовали здесь , но та же история …

Я считаю, что многие люди столкнулись с такой проблемой во время UITesting в xCode 7.1

Пожалуйста, поделитесь своим опытом или любыми предложениями для решения. Заранее спасибо!

См. Пример ниже

 import XCTest let systemAlertHandlerDescription = "systemAlertHandlerDescription" class LoginPerformingTestCase: XCTestCase { var systemAlertMonitorToken: NSObjectProtocol? = nil override func setUp() { continueAfterFailure = false let app = XCUIApplication() app.launchArguments = [TestingEnvironment.resetLaunchArgument, TestingEnvironment.testingEnvironmentArgument] app.launch() systemAlertMonitorToken = addUIInterruptionMonitorWithDescription(systemAlertHandlerDescription) { (alert) -> Bool in if alert.buttons.matchingIdentifier("OK").count > 0 { alert.buttons["OK"].tap() return true } else { return false } } } override func tearDown() { if let systemAlertMonitorToken = self.systemAlertMonitorToken { removeUIInterruptionMonitor(systemAlertMonitorToken) } super.tearDown() } func loginWithApp(app: XCUIApplication) { let signInButton = app.buttons["SIGN IN"] signInButton.tap() let emailAdressTextField = app.textFields.matchingIdentifier("EmailAddress").elementBoundByIndex(0) emailAdressTextField.tap() emailAdressTextField.typeText("[email protected]") let passwordSecureTextField = app.secureTextFields["Password"] passwordSecureTextField.tap() passwordSecureTextField.typeText("1111") signInButton.tap() let exists = NSPredicate(format: "exists == 1") let iconAlarmButton = app.buttons["icon alarm"] let expectation = expectationForPredicate(exists, evaluatedWithObject: iconAlarmButton, handler: nil) waitForExpectationsWithTimeout(60) { (error) -> Void in if let _ = error { expectation.fulfill() } } app.tap()//workaround to hide system alert let darkNavigaitonBar = app.otherElements.matchingIdentifier("darkNavigationView").elementBoundByIndex(0) if darkNavigaitonBar.hittable == true { app.tap() } } } 

Вот пример, как это сделать с приложением, запрашивающим доступ к локальному уведомлению:

 addUIInterruptionMonitorWithDescription("Local Dialog") { (alert) -> Bool in if alert.collectionViews.buttons["OK"].exists { alert.collectionViews.buttons["OK"].tap() return true } return false } 
Interesting Posts
Давайте будем гением компьютера.