XCUIElement 存在,但不可命中
Posted
技术标签:
【中文标题】XCUIElement 存在,但不可命中【英文标题】:XCUIElement exists, but is not hittable 【发布时间】:2018-02-17 20:14:49 【问题描述】:在我的 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
存在,但不可命中。
另一方面,我可以在快照中看到视图,即它存在并且可见。
这很奇怪,因为docs 说:
isHittable 如果元素存在并且可以在其当前位置单击、点击或按下,则返回 true。如果元素不存在、不在屏幕上或被另一个元素覆盖,则返回 false。
我想,也许它是可见的,但不能点击、轻敲或按下,因为userInteractionEnable
不是true
,但即使我将此属性设置为true
,视图也不会变为可点击。
我错过了什么?
【问题讨论】:
【参考方案1】:问题已解决:XCUIElement 只有在其 isAccessibilityElement
属性设置为 true 时才能被命中。docs 对属性isAccessibilityElement
说
此属性的默认值为 false,除非接收者是标准 UIKit 控件,在这种情况下该值为 true。 辅助应用程序只能获取有关由可访问性元素表示的对象的信息。因此,如果您实现了一个残障用户应该可以访问的自定义控件或视图,请将此属性设置为 true。
我以编程方式实例化的UIView
不是标准的 UIKit 控件。我一加
topMarker.isAccessibilityElement = true
测试
XCTAssertTrue(topMarker.isHittable, "Top marker is not hittable")
成功了。
【讨论】:
有谁知道如何在 SwiftUI 中做到这一点?以上是关于XCUIElement 存在,但不可命中的主要内容,如果未能解决你的问题,请参考以下文章