在EarlGrey中,等待元素出现的非轮询方式是什么?

时间:2016-07-07 21:56:44

标签: xctest earlgrey

目前我等待元素显示如下:

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")

对于要填充的集合视图,持续20秒进行轮询。是否有一种更好的,非民意的方式来实现这一目标?

2 个答案:

答案 0 :(得分:1)

EarlGrey建议使用synchronization来等待元素,而不是使用睡眠或条件检查,例如等待。

EarlGrey在GREYConfiguration中的变量kGREYConfigKeyInteractionTimeoutDuration值设置为30秒并声明 -

 *  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)

并且它将在没有超时的情况下填充。

答案 1 :(得分:0)

我喜欢将 Earl Gray 与基本的 XCTest 联系起来,我想出了一个简单的解决方法来解决等待元素的问题:

app.webViews.buttons["logout()"].waitForExistence(timeout: 5)
app.webViews.buttons["logout()"].tap()