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 测试找不到以编程方式添加的视图的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8:UI 测试远程按钮错误:找不到焦点元素

XCode UI 测试未通过“找不到元素”检查

Xcode 在运行测试时出现“找不到图像”

找不到 -lAFNetworking 的 xcode 库

无法在 Xcode UI 测试中点击 UIBarButtonItem

ui测试xcode,如何使用cellquery点击表格视图单元格按钮