8

Я хотел бы проверить способность моего приложения обрабатывать изменения ориентации (портрет/пейзаж). В настоящее время я использую KIF, и, насколько я знаю, он не может этого сделать. Есть ли способ имитировать события вращения программным образом для симулятора iOS?Имитация изменений ориентации в iOS для целей тестирования

Мне все равно, если это какой-то недокументированный частный API или хак, потому что это будет работать только во время тестирования и не будет частью производственных сборок.

ответ

9

Вот шаг для достижения этой цели:

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

Примечание: Держите устройство на плоском столе или обновления акселерометра будет вращать вид сзади.

+0

Это, похоже, не работает в симуляторе. У меня нет устройства, поэтому я его не тестировал, но тесты KIF будут запускаться на тренажерах через VaxSim, поэтому он должен запускаться на симуляторе. Можете ли вы подтвердить, что это работает/не работает на симуляторе? Я использую симулятор iOS 6.1. – applefreak

+0

Мой плохой! Он работает только в том случае, если приложение поддерживает эту ориентацию! – applefreak

0

Я не знаю, что вы подразумеваете под программным путем, но если вы используете библиотеку UIAutomation, предоставляемую яблоком, а также шаблон автоматизации приложения Instruments, вы можете имитировать различные ориентации, поддерживаемые iPhone.

+0

Правда, я тоже нашел это. Я все еще ищу способ сделать это из самого приложения, в Objective-C. Вот как работает система тестирования KIF. –

-2

Почему это программно? Симулятор делает именно то, что вы хотите, он проверяет способность приложений обрабатывать изменения ориентации.

В симуляторе либо используйте верхнее меню «Оборудование»> «Повернуть влево/вправо», либо «Удерживайте нажатой» и используйте стрелки влево и вправо.

+3

Я хочу сделать это программно, потому что хочу иметь автоматические тесты пользовательского интерфейса, которые выполняются без моего вмешательства на сервере сборки. –

4

Чтобы смоделировать изменение ориентации в UI Automation, вы можете использовать метод setDeviceOrientation для UIATarget. Пример:

UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT); 

Метод нуждается в постоянном параметре «deviceOrientation». Дополнительная информация here

Этот 100% работает на реальном устройстве iOS. Я не уверен в симуляторе.

+0

Что вы предлагаете, это то, что нужно запустить из инструмента автоматизации пользовательского интерфейса. Это не сработает для меня. Мне нужен код Objective C, который можно вызвать из приложения. Вот как работает система тестирования KIF. Извините за то, что вы недостаточно ясно это сделали. –

Смежные вопросы