XCTest - 在自定义坐标上使用捏合手势使用 XCUIElement 进行 UI 测试?

问题描述

假设我有一个应用,其 UI 看起来有点像下图:

UI to test

假设蓝色视图的行为类似于地图,而其他颜色是其他可交互的视图。

我需要做一个 XCTest,我需要“缩小”那个我厌倦了 pinchWithScale 的蓝色视图:

[blueView pinchWithScale:0.5 veLocity:-1];

不幸的是,这不起作用,因为其中一个红色视图或紫色视图(由于阴影和角落原因与蓝色视图稍微重叠)被触发,而不是蓝色视图上的 pinch 手势。

我看到我可以使用该方法获取视图的 coordinateWithNormalizedOffset(类似于 here):

- (XCUICoordinate *)coordinateWithnormalizedOffset:(CGVector)normalizedOffset;

这将允许我不使用整个蓝色视图来执行“缩小”手势:

XCUICoordinate* blueViewInset = [blueView coordinateWithnormalizedOffset:
                                 CGVectorMake(0.2f,0.2f)];

XCUICoordinate 对象 blueViewInset 不支持捏合手势。

因此,如何在坐标不在视图边界处的 XCUIElement 上执行捏合手势以“缩小”?

我还想知道是否有办法使用自定义捏合手势创建XCUIElement的扩展?我也希望得到任何提示

解决方法

我发现我可以(但不想)在我的 blueView 的顶部添加另一个空视图,并限制 其大小的一半。到目前为止,这适用于我的所有情况,因为到目前为止没有其他视图重叠。它看起来像这样:

UI with emtpy view for pinch gestures

在该空视图上执行 pinchWithScale 有效并且实际上捏住了 blueView

这是一个非常丑陋的解决方案,因为我必须添加一个仅用于 UI 测试的视图。

如果有人有关于如何为发布版本删除它的提示,请告诉我。

更新

我执行了一个运行脚本的构建步骤,该脚本仅在执行 UI 自动化测试目标时添加此视图。执行后使用源代码控制撤销添加的视图。