XCUIElement存在,但不可命中

时间:2018-02-17 20:14:50

标签: xcode xcode-ui-testing

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

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

topMarker视图位于自定义表格视图单元格中。 在我的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存在,但不可命中。
另一方面,我可以在快照中看到视图,即它存在且可见 这是stange,因为docs说:

如果元素存在,

isHittable将返回true,并且可以在其当前位置单击,点击或按下该元素。如果元素不存在,屏幕外或其他元素覆盖,则返回false。

我想,也许它是可见的,但无法点击,点击或按下,因为userInteractionEnable不是true,但即使我将此属性设置为true,视图不会成为可击中的。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

问题解决了:
如果XCUIElement的isAccessibilityElement属性设置为true,则只能触及。
docs到属性isAccessibilityElement

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

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

topMarker.isAccessibilityElement = true  

测试

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

成功。