2017-08-21 1 views
0

Dans mes tests unitaires, une page demande l'autorisation d'utiliser la bibliothèque. Pendant l'exécution de mon test d'unité, cette boîte de dialogue apparaît à l'écran et ne disparaît pas même si tous mes tests unitaires se terminent. Lorsque les tests d'interface utilisateur tentent de s'exécuter, ils ne peuvent pas provoquer cette boîte de dialogue. Est-il possible d'exécuter des tests d'interface utilisateur avant les tests unitaires?Comment fermer une boîte de dialogue système pendant un Xcode UITest

+0

parlons de la boîte de dialogue du système qui demande à l'utilisateur l'autorisation d'accéder à la photothèque? – joern

+0

Oui. La boîte de dialogue du système est bloquée à l'écran. – Thornaci

Répondre

0

Donc, votre vrai problème est de se débarrasser de la boîte de dialogue du système lors de l'exécution de UITests. Exécuter UITest avant UnitTests ne changera rien, car alors la boîte de dialogue du système apparaîtra pendant le UITest.

Vous pouvez rejeter la boîte de dialogue comme celui-ci (dans votre 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() 

Vous devez changer la description parce que le code ci-dessus rejette une alerte système qui demande l'autorisation d'envoyer des notifications push.

Il est important que ce code vienne AVANT que votre test ne déclenche la boîte de dialogue du système. Vous pouvez le mettre dans votre fonction de test juste après le lancement de l'application et avant que le test ne fasse quoi que ce soit d'autre.

0

Si vous utilisez XCode 9 vous êtes en mesure d'interagir avec les boîtes de dialogue directement:

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

``