2016-05-30 4 views
0

条件を評価する前に15秒待つことになっているテストを書きました。現在のところ、それはずっと短く待機しており、すぐに評価ブロックに行き、エラーが発生します。 after秒のパラメータ:waitWithTimeoutが無視されているようです。EarlGrey GREYCondition waitWithTimeout:15が15秒間待機しない

私のテストコード:

- (void)testAsyncEvent { 

    [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Button")] 
     performAction:grey_tap()]; 

    // Wait for the main view controller to become the root view controller. 
    BOOL success = [[GREYCondition conditionWithName:@"Wait for label to change text" 
     block:^{ 

     NSError *error; 
     [[EarlGrey selectElementWithMatcher:grey_text(@"Delayed Appearance")] 
      performAction:grey_tap() 
        error:&error]; 

     if ([error.domain isEqual:kGREYInteractionErrorDomain] && 
      error.code == kGREYInteractionElementNotFoundErrorCode) { 
      return NO; 
     } 

     return YES; 

    }] waitWithTimeout:15]; 

    GREYAssertTrue(success, @"Label text should be changed after 5 seconds. "); 
} 

そして、ここでは、ボタンのタップアクションです:

- (IBAction)buttonPressed:(id)sender 
{ 
    self.titleLabel.text = @"Button Pressed"; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 4 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), 
    ^(void) 
    { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
     self.titleLabel.text = @"Delayed Appearance"; 
     }); 
    }); 
} 

がtitleLabelのテキストを派遣非同期を通して4秒後に「遅延外観」に変更することになっています。しかし、テストのブロックは非常に速く始まりますが、15秒に設定されています。 (そしてそのようなテキストを持つ要素が見つからないので失敗します)。

+0

GRAY APIの同期を無効にすることで、これを回避しました。[[GREYConfiguration sharedInstance] setValue:@(NO) forConfigKey:kGREYConfigKeySynchronizationEnabled];私は今指定した金額を待つ。ですから、同期APIが有効になっているときに早く消してしまう原因は何ですか? – Alex

答えて

2

私はそれがAPIの意図ではないと思います。このAPIは、X秒間条件が満たされるのを待つためのものです。タイムアウトのsecondsパラメータは、条件が満たされるのを実際に待つ時間です。それでも条件が満たされない場合は、タイムアウトしてNOを返します。 [[GREYConfiguration sharedInstance] setValue:@(5.0) forConfigKey:kGREYConfigKeyDispatchAfterMaxTrackableDelay];

は単にデフォルトにリセットすることを忘れないでください:あなたはdispatch_afterを使用していることから、あなたはdispatch_after通話の追跡時間を増やすことができ、 [[NSRunLoop currentRunLoop] runUntilDate:]

をそして:あなたは本当にわずか15秒間待つようにしたい場合に使用あなたがもはや5.0秒間のコールの後にディスパッチを追跡することをやめた後。

関連する問題