2012-06-18 23 views
8

Chciałbym przetestować zdolność mojej aplikacji do obsługi zmian orientacji (portret/krajobraz). Obecnie używam KIF i o ile mi wiadomo, nie można tego zrobić. Czy istnieje sposób symulacji zdarzeń rotacji programowo dla symulatora systemu iOS?Symulowanie zmian orientacji w systemie iOS do celów testowych

Nie obchodzi mnie, czy jest to nieudokumentowane prywatne API lub hakowanie, ponieważ będzie ono działać tylko podczas testów i nie będzie częścią kompilacji produkcyjnych.

Odpowiedz

9

Tutaj jest krokiem do osiągnięcia tego celu:

+ (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; 
          }]; 
} 

Uwaga: Przechowywać urządzenie płasko na stole lub aktualizacji akcelerometru będzie obracać widok do tyłu.

+0

To nie działa na symulatorze. Nie mam urządzenia, więc nie testowałem go, ale testy KIF będą działały na symulatorach za pośrednictwem VaxSim, więc musi działać na symulatorze. Czy możesz potwierdzić, że to działa/nie działa na symulatorze? Używam symulatora iOS 6.1. – applefreak

+0

Moja zła! Działa tylko wtedy, gdy aplikacja obsługuje daną orientację! – applefreak

0

Nie wiem, co masz na myśli "programowo", ale jeśli używasz biblioteki UIAutomation dostarczonej przez Apple wraz z szablonem Automation aplikacji Instruments, możesz symulować różne orientacje obsługiwane przez iPhone'a.

+0

To prawda, znalazłem to również. Wciąż szukam sposobu, aby to zrobić z poziomu samej aplikacji, w Objective-C. Tak działa platforma testowa KIF. –

-2

Dlaczego programuje? Symulator robi dokładnie to, czego oczekujesz, testuje zdolność aplikacji do obsługi zmian orientacji.

W symulatorze użyj górnego menu Sprzęt> Obróć w lewo/w prawo lub przytrzymaj Command i użyj lewej i prawej strzałki.

+3

Chcę zrobić to programowo, ponieważ chcę mieć zautomatyzowane testy interfejsu użytkownika, które działają bez mojej interwencji na serwerze kompilacji. –

4

Aby symulować zmianę orientacji w automatyzacji interfejsu użytkownika, można użyć metody setDeviceOrientation dla UIATarget. Przykład:

UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT); 

Metoda wymaga stałej parametru "DeviceOrientation". Więcej informacji here

Ten 100% działa na prawdziwym urządzeniu z systemem iOS. Nie jestem pewien co do symulatora.

+0

Co sugerujesz, to coś, co należy uruchomić z narzędzia Automatyzacji interfejsu użytkownika. To nie zadziała dla mnie. Potrzebuję kodu Objective C, który można wywołać z poziomu aplikacji. Tak działa szkielet testowy KIF. Przepraszam, że nie wyjaśniłem tego wystarczająco jasno. –