2016-07-26 7 views
1

Meine App zeigt einen Startbildschirm. Wie kann ich meinen Test warten lassen, bis der Hauptbildschirm angezeigt wird? Ohne Wartezeit schlägt mein Test sofort nach dem Start der App fehl.Meine App zeigt einen Startbildschirm. Wie kann ich meinen Test auf den Hauptbildschirm warten lassen?

// in application:didFinishLaunchingWithOptions: of my AppDelegate... 
SplashViewController *splashVC = [[SplashViewController alloc] init]; 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.window.rootViewController = splashVC; 
[self.window makeKeyAndVisible]; 

NSTimeInterval splashScreenDuration = 0.5; 
[NSTimer scheduledTimerWithTimeInterval:splashScreenDuration 
           target:self 
          selector:@selector(hideSpashScreenAndDisplayMainViewController) 
          userInfo:nil 
           repeats:NO]; 

// hideSpashScreenAndDisplayMainViewController method simply sets self.window.rootViewController to the main view controller. 
+0

Könnten Sie bitte einen Ausschnitt Ihres Testcodes bereitstellen? – khandpur

Antwort

2

EarlGrey bietet die GREYCondition API, die Sie in Ihrem Setup-Methode oder den Anfang Ihrer spezifischen Test verwenden können, um EarlGrey warten, während Sie auf dem Startbildschirm warten zu verschwinden. Sie können dies mit Code tun, der dem ähnelt, was sie in ihrer faq page haben.

// Wait for the main view controller to become the root view controller. 
    BOOL success = [[GREYCondition conditionWithName:@"Wait for main root view controller" 
              block:^{ 
    id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate; 
    UIViewController *rootViewController = appDelegate.window.rootViewController; 
    return [rootViewController isKindOfClass:[MainViewController class]]; 
    }] waitWithTimeout:5]; 

    GREYAssertTrue(success, @"Main view controller should appear within 5 seconds."); 
Verwandte Themen