在关于Xcode中UI测试的WWDC会话中,您可以了解到在实际合成属性或读取值时对查询进行评估。防止重新评估XCUIElementQuery
那么何时对查询进行评估?所以他们并没有实际评估,只是当你创建它们。
它们按需或按需要进行评估。这意味着使用元素时,将在合成事件或读取属性值时评估查询。
您可以创建该元素,但在您使用它之前,不会评估该查询。同样,如果您直接创建查询,则会在您获得匹配数时或者您调用返回所有匹配的API之一时对其进行评估。它将不得不在这一点上进行评估,我们将在UI更改时重新评估查询。因此,根据测试的长度,您总是使用最新的应用程序视图,而不是十秒前或两分钟前的数据。所以通过这种方式,您可以将查询和元素与URL有点类似。
这是非常好的事,以确保您正在使用最新的UI状态,但它可能会非常缓慢,并阻止您执行需要高速度的测试。看到以下内容:
CFTimeInterval startTime = CACurrentMediaTime();
XCUIElement *button = [[XCUIApplication alloc] init]/*@[email protected]*/.scrollViews/*[[".windows[@\"\\n[FYB Debug]: Reachability Flag Status: -R t------ networkStatus\"].scrollViews",".scrollViews"],[[[-1,1],[-1,0]]],[0]]@[email protected]*/.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
所以我想知道,有没有办法在测试过程中暂时改变这种行为和查询元素只有一次?