Xcode UI 测试找不到以编程方式添加的视图
Posted
技术标签:
【中文标题】Xcode UI 测试找不到以编程方式添加的视图【英文标题】:Xcode UI Tests can't find views that are added programmatically 【发布时间】:2016-04-21 17:15:10 【问题描述】:我正在以编程方式向我的视图添加一个子视图,当我这样做时,我将所有可访问性参数附加到它:
[labelView setAccessibilityLabel:@"label"];
[labelView setIsAccessibilityElement:YES];
[labelView setUserInteractionEnabled:YES];
但是当我这样查询 UI 时:
let app = XCUIApplication()
app.staticTexts["label"]
测试失败,因为它找不到视图。
我该如何处理,如何使动态添加的视图可用于 UI 测试?
【问题讨论】:
你到底想测试什么?只是视图已加载,还是您正在尝试在视图中查找对象? labelView的父级是谁? 我正在尝试读取标签的内容 (.value)。 @TomasCamin 它是一个 UIEditText 但它有什么区别? 【参考方案1】:您需要确保标签视图(UIEditText?)的容器视图没有将isAccessibilityElement
设置为YES。如果是这样,它将隐藏其子视图(您的标签)的可访问性。
在Accessibility Programming Guide中检查使自定义容器视图的内容可访问
【讨论】:
感谢您的回答,虽然这是无障碍设计的一个可以理解的要求,但它在 Xcode UI 测试中是一个明显的缺点。 我自己花了一段时间才弄明白,但最后还是有点道理的。无论如何,这些文档值得一读。【参考方案2】:我有一个不同的解决方案,因为我给自己带来了一个以相同方式表现出来的不同问题,即 XCUITests 找不到基本元素。我的应用程序使用 UIWindow
并将 UIWindow.windowLevel
设置为 .normal + 2
在其他窗口的顶部显示全屏加载微调器。事实证明,即使该窗口不在视图层次结构、可访问性层次结构或响应者链中,仅由于它的存在,它就破坏了 UI 测试使用的可访问性/视图层次结构爬取系统。
为了验证这一点,我从应用程序中完全删除了额外的 UIWindow
实例。修复最终变得更简单,只使用windowLevel = .alert
,而不是向 UIKit 的常量添加常量。
【讨论】:
以上是关于Xcode UI 测试找不到以编程方式添加的视图的主要内容,如果未能解决你的问题,请参考以下文章