accessibilityIdentifier 从 iOS 15 开始无法正常工作

问题描述 投票:0回答:1

我正在开发的应用程序已使用 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 xml swiftui accessibility appium-ios
1个回答
0
投票

看起来 iOS 14 之前的输出不正确,现已修复。

当您使用

accessibilityElement
参数调用
children
时,iOS 会替换您应用到的视图的辅助功能元素的子级,而不是在每次调用时创建新的辅助功能元素。

SwiftUI 代码修改

VStack
容器两次,设置辅助功能元素以对
Text
子视图进行分组,并设置
accessibilityIdentifier
两次(因此第二个实例覆盖第一个实例)。

您想要使用第二个视图来创建第二个包装器,然后将外部

accessibilityIdentifier
应用于该视图。

如果您想为您的

VStack
创建不同的辅助功能表示,您可能需要查看
accessibilityChildren(children:)
accessibilityRepresentation(representation:)

© www.soinside.com 2019 - 2024. All rights reserved.