在 EarlGrey 中,等待元素出现的非轮询方式是啥?
Posted
技术标签:
【中文标题】在 EarlGrey 中,等待元素出现的非轮询方式是啥?【英文标题】:In EarlGrey, what's the non-polling way to wait for an element to appear?在 EarlGrey 中,等待元素出现的非轮询方式是什么? 【发布时间】:2016-07-07 21:56:44 【问题描述】:目前我正在等待一个元素显示如下:
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 秒以填充集合视图。有没有更好的非轮询方式来实现这一点?
【问题讨论】:
【参考方案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)
它会在没有超时的情况下被填充。
【讨论】:
所以我需要跟踪我们执行获取请求的后台队列,并且 earlgrey 能够与之同步。我看到调度队列空闲资源使用 idlingresource 协议。文档中没有提到这一点的任何原因?似乎我们可以将资源包装在 IdlingResource 中,以在我们的测试中实现更高的稳健性。【参考方案2】:我喜欢将 Earl Gray 与基本 XCTest 联系起来,我想出了这个简单的解决等待元素问题的方法:
app.webViews.buttons["logout()"].waitForExistence(timeout: 5)
app.webViews.buttons["logout()"].tap()
【讨论】:
以上是关于在 EarlGrey 中,等待元素出现的非轮询方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章