cocos2d またはその他の opengl アプリケーションで UIAutomation を使用することは可能ですか?
具体的には、ズッキーニ フレームワークを使用して cocos2d ゲームをテストしたいのですが、とにかく UIAutomation を使用するだけです。
cocos2d またはその他の opengl アプリケーションで UIAutomation を使用することは可能ですか?
具体的には、ズッキーニ フレームワークを使用して cocos2d ゲームをテストしたいのですが、とにかく UIAutomation を使用するだけです。
ズッキーニでカスタムステップを作成し、タップする座標を指定できます。例:
'Choose the red bird' : ->
target.tap({x:278, y:36})
'Press Fire' : ->
target.tap({x:170, y:260})
それで、私は calabash-iOS から始めて、そのバックドアを拡張しました。これは初心者向けですが、これにより現在の CCScene のアクセシビリティ ラベルを取得できるため、現在どの画面が表示されているかを確認し、スクリプト アクションに使用できます。私は objc ランタイムの操作に慣れていませんが、ご覧のとおり、プロパティやメソッドなどを取得することが可能です。もう少し掘り下げると、より多くの機能をラップできるはずです。うまくいけば、cocos2d CCNode 構造もラップできるようになるはずです。 . これは進行中の作業です。
これを使用するには、https://github.com/calabash/calabash-iosをインストールしてから、アプリ デリゲートに以下の関数を実装する必要があります。コードで .accessibilityLabel を @"menu"、@"game" などに設定することを忘れないでください。最適なのは、*-cal ターゲットの場合のみ、このコードを製品ビルドに含めたくないということです。
-(NSString*)calabashBackdoor:(NSString*)aIgnorable {
DLog(@"calabashBackdoor: %@", aIgnorable);
// UIApplication* app = [UIApplication sharedApplication];
if (aIgnorable != nil) {
NSArray* p = [aIgnorable componentsSeparatedByString:@" "];
NSString* command = [p objectAtIndex:0];
if ([command isEqualToString:@"getCurrentSceneLabel"]) {
CCDirector* director = [CCDirector sharedDirector];
DLog(@"director.runningScene.accessibilityLabel: %@", director.runningScene.accessibilityLabel);
return director.runningScene.accessibilityLabel;
}
else if ([command isEqualToString:@"class_copyMethodList"]) {
CCDirector* director = [CCDirector sharedDirector];
id inspectThisObject = director.runningScene;
DLog(@"inspectThisObject: %@, %@", [inspectThisObject class], inspectThisObject);
unsigned int count;
// To get the class methods of a class, use class_copyMethodList(object_getClass(cls), &count).
Method* methods = class_copyMethodList(object_getClass(inspectThisObject), &count);
//NSMutableString* returnstring = [NSMutableString string];
NSMutableArray* arrayOfMethodnames = [NSMutableArray array];
if (methods != NULL) {
for (int i = 0; i < count; i++) {
Method method = methods[i];
NSString* stringMethod = NSStringFromSelector(method_getName(method)); //NSStringFromSelector(method->method_name);
[arrayOfMethodnames addObject:stringMethod];
}
// An array of pointers of type Method describing the instance methods implemented by the class—any instance methods implemented by superclasses are not included. The array contains *outCount pointers followed by a NULL terminator. You must free the array with free().
free(methods);
}
DLog(@"arrayOfMethodnames: %@", arrayOfMethodnames);
return [arrayOfMethodnames componentsJoinedByString:@","];
}
else if ([command isEqualToString:@"class_copyPropertyList"]) {
CCDirector* director = [CCDirector sharedDirector];
id inspectThisObject = director.runningScene;
DLog(@"inspectThisObject: %@, %@", [inspectThisObject class], inspectThisObject);
unsigned int count;
// An array of pointers of type objc_property_t describing the properties declared by the class. Any properties declared by superclasses are not included. The array contains *outCount pointers followed by a NULL terminator. You must free the array with free().
//
// If cls declares no properties, or cls is Nil, returns NULL and *outCount is 0.
//
objc_property_t* properties = class_copyPropertyList(object_getClass(inspectThisObject), &count);
NSMutableArray* arrayOfProperties = [NSMutableArray array];
if (properties != NULL) {
for (int i = 0; i < count; i++) {
objc_property_t property = properties[i];
const char* CCS = property_getName(property);
NSString* str = [NSString stringWithUTF8String:CCS];
[arrayOfProperties addObject:str];
}
free(properties);
}
DLog(@"arrayOfProperties: %@", arrayOfProperties);
return [arrayOfProperties componentsJoinedByString:@","];
}
else {
DLog(@"Unhandled command: %@", command);
}
}
return @"calabashBackdoor nil!";
}
Prefix.pch にこれを入れます
#ifdef DEBUG
# define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
# define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
calabash-ios を実行して実行したら、これを step_definitions/somesteps.rb に追加します。
Then(/^I backdoor (.+)$/) do |x|
backdoor("calabashBackdoor:", x)
end