2017-03-15 1 views
0

J'utilise UITests dans Xcode 8. J'ai un test qui ajoute une photo à l'application. Lorsque j'installe l'application pour la première fois, je reçois la fenêtre demandant l'accès à l'album photo. Tout ce que j'ai essayé fait que le bouton «Ne pas autoriser» est sélectionné, ce qui interrompt le test. Lorsque j'enregistre le bouton 'Autoriser', un clic sur un UIAlert est trouvé, mais quand je lance po XCUIApplication(). DebugDescription, aucune alerte n'est trouvée, bien qu'elles soient à l'écran.Xcode 8 - sélection Autoriser l'accès à l'album photo avec UITests

Est-ce que quelqu'un a trouvé un moyen de contourner ce problème?

+0

La réponse de joern est juste. La raison pour laquelle vous ne voyez rien lors de l'impression de la description de débogage est que la hiérarchie de vues n'a pas été mise à jour depuis avant l'affichage de l'alerte. La hiérarchie de vue se met à jour lorsque vous tentez d'interagir avec l'application (en ignorant l'alerte). Elle découvre l'alerte et exécute le gestionnaire d'interruption pour ignorer l'alerte, puis exécute votre interaction. – Oletha

Répondre

1

Pour gérer les alertes système pendant une UITest vous devez ajouter un moniteur d'interruption UI :

func testPhotoLibraryAccess() { 
    let app = XCUIApplication() 
    app.launch() 

    // when system alert is shown -> dismiss it by pressing "OK" 
    // (the description parameter is only there for debugging purposes 
    // so it can be anything you like) 
    addUIInterruptionMonitor(withDescription: "Photos Access Alert") { (alert) -> Bool in 
     alert.buttons["OK"].tap() 
     return true 
    } 

    // tap button that tries to open user's photo library 
    app.buttons["Open Photos"].tap() 

    // select "Moments" 
    app.buttons["Moments"].tap() 

    XCTAssert(app.navigationBars["Moments"].exists) 
} 

Pour faire ce travail, vous devez vous assurer que le moniteur d'interruption interface utilisateur est ajouté avant le système l'alerte est déclenchée par votre UITest!