如何在Xcode UITest期间关闭系统对话框

时间:2017-08-21 14:18:31

标签: xcode xcode-ui-testing

在我的单元测试中,有一个页面要求允许库使用。当我的单元测试运行时,这个允许对话框出现在屏幕上,即使我的所有单元测试都完成也不会消失。当UI测试尝试运行时,它们不能导致此对话框。有没有办法在单元测试之前运行UI测试?

3 个答案:

答案 0 :(得分:5)

如果您使用的是XCode 9,则可以直接与对话框进行交互:

let systemAlerts = XCUIApplication(bundleIdentifier: "com.apple.springboard").alerts
if systemAlerts.buttons["Allow"].exists {
    systemAlerts.buttons["Allow"].tap()
}

``

答案 1 :(得分:0)

对我来说,这才使它起作用:

 DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
    //replace this "OK" with your button title
    springboard.alerts.buttons["OK"].tap()
}

     tapButtonThatTriggersThePermissionsDialog()

答案 2 :(得分:-1)

所以你真正的问题是在运行UITests时摆脱系统对话框。在UnitTests之前运行UITests不会改变事物,因为在UITest期间会弹出系统对话框。

你可以像这样忽略对话框(在你的UITest中):

addUIInterruptionMonitor(withDescription: "“RemoteNotification” Would Like to Send You Notifications") { (alerts) -> Bool in
   if(alerts.buttons["Allow"].exists){
      alerts.buttons["Allow"].tap();
   }
   return true;
}
XCUIApplication().tap()

您必须更改说明,因为上述代码会驳回系统警报,要求发送推送通知的权限。

在您的测试触发系统对话框之前,此代码非常重要。您可以在启动应用程序之后以及在测试之前执行任何其他操作时将其置于测试功能中。