XCUIElement 存在,但不可命中

XCUIElement exists, but is not hittable

在我的 UI 测试中,我使用(缩短的)

以编程方式创建了一个 UIView
let topMarker = UIView.init(frame: CGRect.init())
…
topMarker.accessibilityIdentifier = kTopMarker  

topMarker 视图位于自定义 table 视图单元格中。 在我的 UI 测试中,我使用

let new1stCell = app.cells.element(boundBy: 0)
let topMarker = new1stCell.otherElements[kTopMarker]
let topMarkerExists = topMarker.waitForExistence(timeout: 15)
XCTAssertTrue(topMarkerExists, "Top marker does not exist")
XCTAssertTrue(topMarker.isHittable, "Top marker is not hittable")

当我设置测试失败断点时,测试在最后一行停止,即 topMarker 存在,但未命中 table.
另一方面,我可以在快照中看到视图,即它存在并且可见。
这很奇怪,因为 docs 说:

isHittable returns 如果元素存在并且可以在其当前位置单击、点击或按下,则为真。如果该元素不存在、在屏幕外或被另一个元素覆盖,则 returns 为 false。

我想,也许它是可见的,但不能点击、轻敲或按下,因为userInteractionEnable不是true,但即使我把这个属性设置为true,视图不会变成命中table。

我错过了什么?

问题已解决:
XCUIElement 仅当其 isAccessibilityElement 属性 设置为真时才可命中。
docs 到 属性 isAccessibilityElement

此 属性 的默认值为 false,除非接收器是标准 UIKit 控件,在这种情况下值为 true。
辅助应用程序只能获取有关由可访问性元素表示的对象的信息。因此,如果您实现了应该可供残障用户访问的自定义控件或视图,请将此 属性 设置为 true。

我以编程方式实例化的 UIView 不是 标准 UIKit 控件。我一添加

topMarker.isAccessibilityElement = true  

测试

XCTAssertTrue(topMarker.isHittable, "Top marker is not hittable")  

成功。