2017-03-15 5 views
0

Ich habe UITests in Xcode 8. Ich habe einen Test, der ein Foto zur App hinzufügt. Wenn ich die App zum ersten Mal installiere, erhalte ich ein Popup, das den Zugriff auf das Fotoalbum anfordert.Xcode 8 - Auswahl Zugriff auf Fotoalbum mit UITests erlauben

Alles, was ich probiert habe, führt dazu, dass die Schaltfläche "Do not Allow" ausgewählt wird, die dann den Test bricht. Wenn ich die Schaltfläche 'Erlauben' aufzeichne, wird ein UIAlert gefunden, aber wenn ich po XCUIApplication() ausführen kann, werden trotz der Darstellung auf dem Bildschirm keine Warnmeldungen gefunden.

Hat jemand einen Weg gefunden, um dieses Problem zu umgehen?

+0

Joerns Antwort ist richtig. Der Grund, warum beim Drucken der Debug-Beschreibung nichts angezeigt wird, ist, dass die Ansichtshierarchie seit der Anzeige der Warnung nicht aktualisiert wurde. Die Ansichtshierarchie wird aktualisiert, wenn Sie das nächste Mal versuchen, mit der App zu interagieren (ignorieren Sie die Warnung), und sie wird die Warnung erkennen und den Unterbrechungshandler ausführen, um die Warnung zu schließen, und dann Ihre Interaktion ausführen. – Oletha

Antwort

1

Um Systemwarnungen während eines UITest behandeln Sie hinzufügen einen UI Interruption-Monitor:

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) 
} 

Um diese Arbeit Sie müssen sicherstellen, dass der UI Interruption-Monitor vor das System hinzugefügt wird Alert wird von Ihrem UITest ausgelöst!