2012-06-18 10 views
8

Vorrei testare la capacità della mia app di gestire i cambiamenti di orientamento (verticale/orizzontale). Attualmente sto usando KIF e per quanto ne so, non può farlo. C'è un modo per simulare gli eventi di rotazione in modo programmatico per il simulatore iOS?Simula i cambiamenti di orientamento in iOS a scopo di test

Non mi interessa se si tratta di un'API o di un hack privato non documentato, poiché verrà eseguito solo durante i test e non farà parte delle build di produzione.

risposta

9

Ecco un passo per raggiungere questo obiettivo:

+ (KIFTestStep*) stepToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation { 

    NSString* orientation = UIInterfaceOrientationIsLandscape(toInterfaceOrientation) ? @"Landscape" : @"Portrait"; 
     return [KIFTestStep stepWithDescription: [NSString stringWithFormat: @"Rotate to orientation %@", orientation] 
          executionBlock: ^KIFTestStepResult(KIFTestStep *step, NSError *__autoreleasing *error) { 
           if([UIApplication sharedApplication].statusBarOrientation != toInterfaceOrientation) { 
            UIDevice* device = [UIDevice currentDevice]; 
            SEL message = NSSelectorFromString(@"setOrientation:"); 

            if([device respondsToSelector: message]) { 
             NSMethodSignature* signature = [UIDevice instanceMethodSignatureForSelector: message]; 
             NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature]; 
             [invocation setTarget: device]; 
             [invocation setSelector: message]; 
             [invocation setArgument: &toInterfaceOrientation atIndex: 2]; 
             [invocation invoke]; 
            } 
           } 

           return KIFTestStepResultSuccess; 
          }]; 
} 

Nota: tenere il dispositivo piatto su un tavolo o gli aggiornamenti accelerometro ruoterà la vista posteriore.

+0

Questo non sembra funzionare nel simulatore. Non ho un dispositivo quindi non l'ho provato ma i test KIF gireranno su simulatori attraverso VaxSim, quindi deve essere eseguito su un simulatore. Puoi confermare che questo funziona/non funziona sul simulatore? Sto usando il simulatore iOS 6.1. – applefreak

+0

Il mio male! Funziona solo se l'app supporta l'orientamento in questione! – applefreak

0

Non so cosa intendi per 'programmaticamente' ma se si utilizza la libreria UIAutomation fornita da Apple insieme al modello di automazione dell'applicazione Strumenti, è possibile simulare diversi orientamenti supportati dall'iPhone.

+0

Vero, ho trovato anche questo. Sto ancora cercando un modo per farlo dall'app stessa, in Objective-C. Ecco come funziona il framework di test KIF. –

-2

Perché programmato? Il simulatore fa esattamente ciò che vuoi, mette alla prova la capacità delle app di gestire i cambiamenti di orientamento.

Nel simulatore utilizzare il menu superiore Hardware> Ruota a sinistra/destra o tenere premuto Comando e utilizzare le frecce sinistra e destra.

+3

Voglio farlo a livello di programmazione perché voglio avere test UI automatici eseguiti senza il mio intervento sul build server. –

4

Per simulare il cambio di orientamento in UI Automation è possibile utilizzare il metodo setDeviceOrientation per UIATarget. Esempio:

UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT); 

Il metodo richiede un parametro 'costante dispositivoOrientation'. Ulteriori informazioni here

Questo 100% funziona sul dispositivo iOS reale. Non sono sicuro del simulatore.

+0

Quello che suggerisci è qualcosa che deve essere eseguito dallo strumento di automazione dell'interfaccia utente. Non funzionerà per me. Ho bisogno del codice Objective C che può essere chiamato dall'interno dell'app. Ecco come funziona il framework di test KIF. Mi dispiace per non averlo chiarito abbastanza. –