我正在使用 XCode 的 XCTestCase 进行自动化 UI 测试,以衡量我的应用程序的性能。我目前有一个包含 25 000 个元素的 UITable,当尝试运行应该滑动此列表的测试时,它会一直运行并在完成测试之前崩溃。应用 objective-c PU 使用率此时为 100%。
控制台最后的输出是:
Snapshot accessibility hierarchy for
当将列表限制为几百个元素( Not Acceptable )时,自动化测试至少能够滚动列表,但每次滚动之间等待大约 3-4 秒。
测试场景:
let app = XCUIApplication();
app.buttons["Long list"].tap();
let table = app.tables.element;
table.swipeUp();
table.swipeUp();
那么有什么办法可以加快测试速度吗?也许禁用可访问性层次结构(不以任何方式使用可访问性标签进行测试)。
最佳答案
也许你可以像一样使用 api - (double)pressAtPoint:(struct CGPoint)arg1 forDuration:(double)arg2 liftAtPoint:(struct CGPoint)arg3 velocity:(double)arg4 orientation:(long long)arg5 name :(id)arg6 处理程序:(CDUnknownBlockType)arg7;
#ifndef XCEventGenerator_h
#define XCEventGenerator_h
typedef void (^CDUnknownBlockType)(void);
@interface XCEventGenerator : NSObject
+ (id)sharedGenerator;
// iOS 10.3 specific
- (double)forcePressAtPoint:(struct CGPoint)arg1 orientation:(long long)arg2 handler:(CDUnknownBlockType)arg3;
- (double)pressAtPoint:(struct CGPoint)arg1 forDuration:(double)arg2 orientation:(long long)arg3 handler:(CDUnknownBlockType)arg4;
- (double)pressAtPoint:(struct CGPoint)arg1 forDuration:(double)arg2 liftAtPoint:(struct CGPoint)arg3 velocity:(double)arg4 orientation:(long long)arg5 name:(id)arg6 handler:(CDUnknownBlockType)arg7;
@end
#endif /* XCEventGenerator_h */
- (void)testExample {
XCUIApplication* app = [[XCUIApplication alloc] init];
XCUICoordinate* start_coord = [app coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.3)];
XCUICoordinate* end_coord = [app coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.7)];
NSLog(@"Start sleeping");
[NSThread sleepForTimeInterval:4];
NSLog(@"end sleeping");
for(int i = 0; i < 100; i++)
{
[[XCEventGenerator sharedGenerator] pressAtPoint:start_coord.screenPoint
forDuration:0
liftAtPoint:end_coord.screenPoint
velocity:1000
orientation:0
name:@"drag"
handler:^{}];
[NSThread sleepForTimeInterval:1];
}
}
关于ios - XCTestCase 禁用快照可访问性层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43919350/