2012-06-18 12 views
8

Me gustaría probar la capacidad de mi aplicación para manejar cambios de orientación (vertical/horizontal). Actualmente estoy usando KIF y hasta donde yo sé, no puede hacer esto. ¿Hay alguna manera de simular los eventos de rotación programáticamente para el simulador de iOS?Simular cambios de orientación en iOS con fines de prueba

No me importa si se trata de una API o hack privado no documentado porque esto solo se ejecutará durante las pruebas y no formará parte de las compilaciones de producción.

Respuesta

9

Aquí es un paso para lograr esto:

+ (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: Mantenga su dispositivo plano sobre una mesa o las actualizaciones del acelerómetro rotará la vista atrás.

+0

Esto no parece funcionar en el simulador. No tengo un dispositivo así que no lo he probado, pero las pruebas KIF se ejecutarán en simuladores a través de VaxSim, por lo que debe ejecutarse en el simulador. ¿Puedes confirmar que esto funciona/no se ejecuta en el simulador? Estoy usando el simulador iOS 6.1. – applefreak

+0

¡Malo! ¡Funciona solo si la aplicación es compatible con la orientación en cuestión! – applefreak

0

No sé a qué te refieres con "programáticamente", pero si utilizas la biblioteca UIAutomation proporcionada por Apple junto con la plantilla de automatización de la aplicación Instruments puedes simular diferentes orientaciones admitidas por el iPhone.

+0

Cierto, también he encontrado esto. Todavía estoy buscando una forma de hacerlo desde la propia aplicación, en Objective-C. Así es como funciona el marco de prueba de KIF. –

-2

¿Por qué hacerlo programáticamente? El simulador hace exactamente lo que quieres, prueba la capacidad de las aplicaciones para manejar cambios de orientación.

En el simulador, utilice el menú superior Hardware> Girar a la izquierda/derecha o mantenga presionada la tecla Comando y use las flechas izquierda y derecha.

+3

Quiero hacerlo de forma programática porque quiero tener pruebas de IU automatizadas que se ejecuten sin mi intervención en el servidor de compilación. –

4

Para simular el cambio de orientación en la automatización de la interfaz de usuario, puede utilizar el método setDeviceOrientation para UIATarget. Ejemplo:

UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT); 

El método necesita un parámetro 'deviceOrientation' constante. Más información here

Este 100% funciona en el dispositivo iOS real. No estoy seguro de simulador.

+0

Lo que sugiere es algo que debe ejecutarse desde la herramienta de automatización de UI. Eso no va a funcionar para mí. Necesito el código Objective C que se puede llamar desde la aplicación. Así es como funciona el marco de prueba de KIF. Perdón por no dejarlo lo suficientemente claro. –

Cuestiones relacionadas