1

目前我等待一个元素出现如下:

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 秒以填充集合视图。有没有更好的非轮询方式来实现这一目标?

4

2 回答 2

1

EarlGrey建议使用其同步来等待元素,而不是尽可能使用睡眠或条件检查(如等待)。

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)

它会在没有超时的情况下被填充。

于 2016-08-01T09:24:42.137 回答
0

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

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

于 2021-05-06T12:09:27.537 回答