1

Currently I wait for an element to appear like this:

let populated = GREYCondition(name: "Wait for UICollectionView to populate", block: { _ in
    var errorOrNil: NSError?

    EarlGrey().selectElementWithMatcher(collectionViewMatcher)
              .assertWithMatcher(grey_notNil(), error: &errorOrNil)

    let success = (errorOrNil == nil)
    return success
}).waitWithTimeout(20.0)

GREYAssertTrue(populated, reason: "Failed to populate UICollectionView in 20 seconds")

Which polls constantly for 20 seconds for collection view to populate. Is there a better, non-polling way of achieving this?

4

2 に答える 2

1

EarlGrey可能な限り、スリープや待機などの条件付きチェックを使用するのではなく、要素を待機するために同期を使用することをお勧めします。

EarlGrey のGREYConfigurationには、 30 秒に設定された変数kGREYConfigKeyInteractionTimeoutDuration値があり、次のように指定されています。

 *  Configuration that holds timeout duration (in seconds) for action and assertions. Actions or
 *  assertions that are not scheduled within this time will fail due to timeout.

チェックのために 20 秒間待機しているので、代わりに単純に変更することができます -

EarlGrey().selectElementWithMatcher(collectionViewMatcher)
          .assertWithMatcher(grey_notNil(), error: &errorOrNil)

タイムアウトなしで入力されます。

于 2016-08-01T09:24:42.137 に答える