2015-09-11 16 views
5

Sto provando ad estendere la nuova funzionalità di test dell'interfaccia utente in Xcode 7 eseguendo l'istantanea degli elementi dello schermo corrente (etichette, immagini, pulsanti) e salvando le informazioni sull'accessibilità nei file json.Le risorse dell'app non sono disponibili quando l'interfaccia utente esegue il test in Xcode 7

L'idea è che quando si eseguono i test dell'interfaccia utente in un secondo momento, è possibile scattare un'istantanea della schermata corrente e confrontarla con quella esistente, il test avrà esito negativo se vengono trovati elementi aggiuntivi o mancanti.

Sfortunatamente le risorse dell'app non sembrano disponibili durante il test dell'interfaccia utente, anche con la destinazione corretta, quindi i file JSON non possono essere caricati per il confronto. Il codice standard seguente non riesce a caricare una risorsa:

guard let resourcePath = NSBundle.mainBundle().pathForResource ("StartScreenShapshot", ofType:"json") else { 
     XCTFail ("can't load resource StartScreenShapshot") 
     return 
    } 

posso capire perché Apple hanno preso questo approccio sandbox, come test di interfaccia utente dovrebbe essere basata su ciò che sta accadendo sullo schermo, e l'accesso ai meccanismi di applicazione shouldn' essere necessario, ma non avere accesso al pacchetto di risorse è un problema.

Quindi c'è un modo per caricare risorse locali dall'app o in altro modo a livello locale durante il test dell'interfaccia utente Xcode 7?

Salvare i file localmente (automaticamente) sarebbe anche un vantaggio enorme, salverebbe la creazione manuale.

+1

sembra hai affrontato ol d problema con test e bundle, in tal caso guarda questa domanda http://stackoverflow.com/a/19636417/1403732 – sage444

+0

Grazie amico, questo era il problema. Ho postato una risposta, evviva. – danfordham

risposta

4

Grazie @ sage444

Per unità testare il metodo mainBundle() non funziona per il recupero di un percorso della risorsa, utilizzando una classe fa.

guard let resourcePath = NSBundle (forClass: self.dynamicType).pathForResource (contentName, ofType:"json") else { 
     XCTFail ("can't load resource \(contentName)") 
     return 
    } 
0

Grazie @danfordham

Aggiornato per Swift 3

1) Copia risorse fascio enter image description here

2) Riferimento nuovo bundle in questo modo,

guard let path = Bundle(for: type(of: self)).path(forResource: contentName, ofType: "json") else { 
    XCTFail ("can't load resource \(contentName)") 
    return 
} 
Problemi correlati