我正在开发的应用程序已使用 Appium 对其 ui 进行了测试。因此,我在视图上设置了可访问性标识符。
struct RootView: View {
var body: some View {
VStack {
Text("some text")
Text("more text")
}
// wrapper 1
.accessibilityElement(children: .contain)
.accessibilityIdentifier("ID 1111111111111")
// wrapper 2
.accessibilityElement(children: .contain)
.accessibilityIdentifier("ID 2222222222222")
}
}
(为了便于理解问题,代码过于简化)
在 iOS 14 上运行上面的代码将在检查视图时在 Appium Inspector 上输出:
<XCUIElementTypeOther type="XCUIElementTypeOther" name="ID 2222222222222" enabled="true" visible="true" accessible="false" x="157" y="408" width="76" height="41" index="0">
<XCUIElementTypeOther type="XCUIElementTypeOther" name="ID 1111111111111" enabled="true" visible="true" accessible="false" x="157" y="408" width="76" height="41" index="0">
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="some text" name="some text" label="some text" enabled="true" visible="true" accessible="true" x="157" y="408" width="76" height="21" index="0"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="more text" name="more text" label="more text" enabled="true" visible="true" accessible="true" x="159" y="428" width="73" height="21" index="1"/>
</XCUIElementTypeOther>
</XCUIElementTypeOther>
因此,每组accessibilityElement和accessibilityIdentifier都会创建一个XCUIElementTypeOther,其名称属性与accessibilityIdentifier设置的id相同。
对于较新的 iOS 版本,这些不再起作用,以下是检查视图时 Appium Inspector 上的输出:
<XCUIElementTypeOther type="XCUIElementTypeOther" name="ID 2222222222222" enabled="true" visible="true" accessible="false" x="157" y="408" width="76" height="41" index="0">
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="some text" name="some text" label="some text" enabled="true" visible="true" accessible="true" x="157" y="408" width="76" height="21" index="0"/>
<XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="more text" name="more text" label="more text" enabled="true" visible="true" accessible="true" x="158" y="428" width="74" height="21" index="1"/>
</XCUIElementTypeOther>
看起来第一组accessibilityElement和accessibilityIdentifier不再生成XCUIElementTypeOther。
有没有办法在较新的 iOS 版本上拥有与 iOS 14 相同的输出?
看起来 iOS 14 之前的输出不正确,现已修复。
当您使用
accessibilityElement
参数调用 children
时,iOS 会替换您应用到的视图的辅助功能元素的子级,而不是在每次调用时创建新的辅助功能元素。
SwiftUI 代码修改
VStack
容器两次,设置辅助功能元素以对 Text
子视图进行分组,并设置 accessibilityIdentifier
两次(因此第二个实例覆盖第一个实例)。
您想要使用第二个视图来创建第二个包装器,然后将外部
accessibilityIdentifier
应用于该视图。
如果您想为您的
VStack
创建不同的辅助功能表示,您可能需要查看 accessibilityChildren(children:)
或accessibilityRepresentation(representation:)
。