【发布时间】:2017-04-20 03:06:11
【问题描述】:
在关于 Xcode 中的 UI 测试的 WWDC 会议中,您可以了解到查询是在您实际合成属性或读取值时进行评估的。
那么什么时候评估查询?因此,实际上并不是在您创建它们时才对它们进行评估。
它们会根据需要或根据需要进行评估。这意味着对于一个元素,查询将在您合成事件或读取属性值时进行评估。
您可以创建元素,但在您使用它之前,不会评估查询。同样,如果您直接创建查询,它将在您获得匹配数或调用返回所有匹配项的 API 之一时进行评估。届时必须对其进行评估,并且我们将在 UI 更改时重新评估查询。因此,您始终使用应用程序的最新视图,而不是十秒或两分钟前的数据,具体取决于测试的长度。因此,通过这种方式,您可以认为查询和元素有点类似于 URL。
始终确保您使用的是 UI 的最新状态非常好,但它可能会非常慢,并且会妨碍您执行需要高速的测试。请参阅以下内容:
CFTimeInterval startTime = CACurrentMediaTime();
XCUIElement *button = [[XCUIApplication alloc] init]/*@START_MENU_TOKEN@*/.scrollViews/*[[".windows[@\"\\n[FYB Debug]: Reachability Flag Status: -R t------ networkStatus\"].scrollViews",".scrollViews"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.otherElements.buttons[@"StartSDK_Button"];
[button tap];
[button tap];
[button tap];
[button tap];
[button tap];
CFTimeInterval endTime = CACurrentMediaTime();
NSLog(@"EXECUTION TIME = %f", endTime - startTime);
2017-04-20 11:04:03.381102+0800 XCTRunner[6368:854885] EXECUTION TIME = 5.619870
所以我想知道,有没有办法在测试期间临时改变这种行为并且只查询一次元素?
【问题讨论】: