我想测试我的应用处理方向更改(纵向/横向)的能力。我目前正在使用KIF,据我所知,它无法做到这一点。有没有办法以编程方式为iOS模拟器模拟旋转事件?
我不在乎它是否是一些未记录的私有API或黑客,因为这只会在测试期间运行,并且不会成为生产版本的一部分。
答案 0 :(得分: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;
}];
}
注意:将设备平放在桌子上,或者加速度计更新会将视图旋转回来。
答案 1 :(得分:4)
要在UI自动化中模拟方向更改,可以使用UIATarget的setDeviceOrientation方法。例如:
UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT);
方法需要一个参数'deviceOrientation'常量。 更多信息here
这100%适用于真正的iOS设备。我不确定模拟器。
答案 2 :(得分:0)
我不知道你的'编程'是什么意思,但是如果你使用apple提供的UIAutomation库和Instruments应用程序的自动化模板,你可以模拟iPhone支持的不同方向。
答案 3 :(得分:-2)
为什么要以编程方式进行?模拟器完全符合您的要求,它测试应用程序处理方向更改的能力。
在模拟器中,使用顶级菜单硬件>向左/向右旋转或按住Command并使用向左和向右箭头。