目前我等待元素显示如下:
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秒进行轮询。是否有一种更好的,非民意的方式来实现这一目标?
答案 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()