让XCUIElement为Automate UITest执行3D触摸?

时间:2016-09-02 03:58:27

标签: ios swift xcode-ui-testing 3dtouch

我正在创建Automate UITest测试用例,我想在用户与元素进行3D Touch交互时测试场景,然后显示Peek和Pop视图。

我似乎找不到任何可能的方法来模拟元素上的3D Touch并继续。

任何人对此有任何疑问,或3D Touch仍无法测试?

谢谢

2 个答案:

答案 0 :(得分:4)

我能够在运行iOS 10.3的iPhone 7上的应用程序图标上执行强制按下/ 3D Touch。这在10.2上是不可能的。

<强>目标C

首先,您必须声明以下内容或导入this header

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;

@end

然后执行强制按

XCUIElement *element = ...; // Get your element
XCUICoordinate *coord = [mapsIcon coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)];

[[XCEventGenerator sharedGenerator] forcePressAtPoint:coord.screenPoint orientation:0 handler:^{}]; // handler cannot be nil

在这里,我在地图图标上执行强制按压。

斯威夫特(未经测试)

对于Swift,您必须声明/导入与上面相同的接口/标题,然后像这样执行强制按下

let el = ...; // Get your element
let coord = el.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5) )
let eventGenerator: XCEventGenerator = XCEventGenerator.sharedGenerator() as! XCEventGenerator

eventGenerator.forcePress(at: coord.screenPoint, orientation: 0) { }

答案 1 :(得分:0)

从Xcode 10开始,没有公共API可以实现此目的。但是,您可以使用pub fn do_foo_bar(){ println!("foo_bar"); } 私有API来模拟完整的Peek和Pop交互。这是一个简单的Swift扩展,提供了此功能。

-[XCUIElement forcePress]

请记住,这是一个私有API,因此在将来的Xcode发行版中可能会更改/删除。也就是说,在使用其他Xcode版本运行时,您的测试可能会开始崩溃。