2015-10-12 7 views
14

Quindi ho una situazione in cui ho alcuni campi di testo che vengono convalidati. Sto provando a eseguire un test dell'interfaccia utente e, quando non riescono, viene visualizzato un messaggio di errore (potenzialmente un messaggio diverso a seconda dei campi non validi e in che modo).Impossibile accedere alle localizzazioni stringa in UI Test (Xcode 7)

Vorrei testare che non solo è comparso un avviso, ma che viene visualizzato il messaggio corretto. Il problema che sto avendo è che ho bisogno di ottenere il testo localizzato per il confronto (se eseguo test in un'altra lingua diversa dall'inglese), ma quando chiamo NSLocalizedString nell'UITest non è possibile raccogliere la stringa localizzata corretta (restituisce solo il tasto [predefinito])

ho provato ad aggiungere i file localizeable.strings al bersaglio UITest, ma senza alcun risultato. Qualcuno sa se questo è possibile?

modifica come nota a margine: Ho anche provato a installare un identificatore di accessibilità sul UIAlertView ma quando interrogo con tale identificatore l'accessibilità non esiste, posso solo interrogare utilizzando il titolo della segnalazione che sembra all'indietro .

+0

Una soluzione per questo che ho trovato è quello di forzare l'applicazione per il lancio in inglese , (argomento di avvio) e quindi per testare la stringa inglese. Funziona ma non la soluzione ottimale. – ssrobbi

risposta

18

Nei test dell'interfaccia utente, il pacchetto principale sembra essere un'app di avvio casuale. Ecco perché il file .strings non viene visualizzato: anche se lo hai aggiunto al pacchetto di test, NSLocalizedString sta controllando il pacchetto errato. Per ovviare a questo, è necessaria un'invocazione come questa:

NSLocalizedString("LOCALIZATION_KEY", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "") 

Quale si potrebbe voler inserire un metodo di supporto.

+8

Ho copiato le risorse del bundle corrispondenti a Localizable.strings, ma ottengo sempre la versione inglese della chiave, indipendentemente dalla lingua del dispositivo. Qualche idea @Manuel? – Matias

3

Ecco la mia soluzione:

  1. Nella vostra interfaccia utente di destinazione Test -> Crea Fasi -> Copia Bundle risorse, aggiungere i file di localizzazione necessari (per esempio Localizable.strings).

  2. Aggiungere una funzione simile al seguente:

    func localizedString(key:String) -> String { 
        /*1*/ let localizationBundle = NSBundle(path: NSBundle(forClass: /*2 UITestsClass*/.self).pathForResource(deviceLanguage, ofType: "lproj")!) 
        /*3*/ let result = NSLocalizedString(key, bundle:localizationBundle!, comment: "") // 
        return result 
    } 
    
    
    /*1 Gets correct bundle for the localization file, see here: http://stackoverflow.com/questions/33086266/cant-get-access-to-string-localizations-in-ui-test-xcode-7 */ 
    /*2 Replace this with a class from your UI Tests*/ 
    /*3 Gets the localized string from the bundle */ 
    
  3. Utilizzare la funzione come questa: app.buttons[localizedString("localized.string.key")]

+0

Non è possibile ottenere la lingua del dispositivo in modo dinamico? Non mi piace l'idea di dover specificare la lingua del dispositivo. La classe UITest non ha alcun senso di connessione al dispositivo su cui sta eseguendo il test per ottenere la localizzazione da esso? – Sti