元素不保留其 Storyboard 可访问性标识符或运行时类型

Element does not retain its Storyboard accessibility identifier or type in runtime

我有一个自动 UI 测试来确保页面显示正确的元素,方法是使用 XCUI 元素查询来搜索它们

let instructionLabelID = "UIA_HelpViewController_InstructionLabel"
let callViewID = "UIA_HelpViewController_CallTextView"

var instructionLabel: XCUIElement { return app.staticTexts[instructionLabelID] }
var instructions: String { return instructionLabel.label }

var callLabel: XCUIElement { return app.textViews[callViewID] }
var callText: String { return callLabel.value as! String }

这是相应的故事板

由于未找到突出显示的视图,测试失败,即使我们可以在情节提要中看到它的标识符是正确的。使用断点,我可以在运行时检查所有元素,结果如下

正如我们所见,第一个元素是正确的,因为它位于 Other(其容器视图)下,具有 StaticText 类型,并具有其标识符。然而,第二个元素似乎被合并到它的容器中而不是它的子元素。两个容器都未选中“启用辅助功能”选项。我该如何解决这个问题?

您似乎已将文本视图设置为在容器上具有 accessibilityTraits = .notEnabled 而不是设置 isAccessibilityElement = false。

尽可能尝试在代码中设置这些属性,而不是在情节提要中设置这些属性,因为它可以为您提供更多控制 - 情节提要值很容易被覆盖,但如果您在代码中进行设置,则可以控制何时设置标识符以及如果有任何干扰,覆盖它们。