如何查看 XCUIElement 树?

Posted

技术标签:

【中文标题】如何查看 XCUIElement 树?【英文标题】:How can you see the XCUIElement tree? 【发布时间】:2015-12-23 20:25:43 【问题描述】:

背景:

我正在使用 XCode GM 在 ios 9.0 中进行 ui 级别测试。

问题:

XCode GM 中是否有一个命令可以让您查看可访问元素及其关系的“树”?类似于 Appium 中的“页面”命令?

理想情况下,我将能够在调试器中运行一个命令,该命令将为我提供可供选择/操作的元素列表。目前,您可以在单个 XCUIElement 上使用 debugDescription ,但这只会为您提供该元素的信息。

【问题讨论】:

您找到获取此信息的方法了吗? 不幸的是,苹果似乎没有计划提供的东西。下面的答案可能是最好的解决方法,但并不理想。 【参考方案1】:

在调试器类型中设置您希望查看树的断点...

po print(XCUIApplication().debugDescription)

这会打印出 XCUITesting 可以访问的所有内容。您也可以将其放入您的测试中:

func testTreeExample() 
  XCUIApplication().buttons["login"].tap()
  print(XCUIApplication().debugDescription)
  XCUIApplication().buttons["next"].tap()
  print(XCUIApplication().debugDescription)

如果您在查找某些内容时遇到问题,可以让它在您执行某项操作后自动打印出应用程序看到的内容。

【讨论】:

debugDescription 的问题在于它没有正确格式化输出并且很难阅读。po XCUIApplication() 将以漂亮的树格式打印层次结构【参考方案2】:

这并不完全符合您的要求,但 Xcode 的 Accessibility Inspector 使您可以更轻松地查看视图层次结构,了解哪些元素可通过标识符访问。 (注意,重要的不是 IB 辅助功能面板中的“标签”,而是“标识符”字段。):

在 Xcode 7.2 中,打开 Xcode->Open Developer Tool->Accessibility Inspector。 (您可能需要授予应用程序在系统偏好设置中运行的权限。)然后从 Xcode 启动您的 iOS 应用程序并将鼠标悬停在 SIMULATOR 中的任何 UI 元素上。您将看到有关元素类型、描述、层次结构等的全面信息。

每当您记录 UI 操作并且输出看起来不正确时,请使用该工具确定需要添加、更改或删除哪些可访问性描述。 (我花了几天时间尝试通过 UI 测试工具来更改深度嵌入的 UISegmentedControl,一旦我弄清楚如何使用 Accessibility Inspector 工具,问题就变得很明显。)

感谢 shinobicontrols.com 上的人们提供的精彩提示!

【讨论】:

我还没有完全接受 Accessibility Inspector 的易用性。我发现它非常不稳定,而且提供的信息不完整。【参考方案3】:

我建议从菜单栏中选择:Debug > View Debugging > Capture View Hierarchy 在调试中运行时。您不仅可以直观地表示视图,而且左侧的调试导航器也可以显示层次结构。从 UI 测试的角度来看,这可能不是一对一的,但它可能非常有用。希望对您有所帮助。

【讨论】:

这真的很酷,但它并没有在可访问性方面做出回答......如果苹果给我们一个方便的方法来获取带有标识符的可用元素列表,那就太好了。 当您在 Xcode 的视图调试器中选择视图时,右侧的对象检查器会显示可访问性信息。这可能有用。【参考方案4】:

Appium 这样做的方式是使用Facebook WebdriverAgent。 据我所知,他们的做法基本上是从根应用程序元素开始,收集有关每个孩子的信息,然后递归。

【讨论】:

如果您知道答案,介意回答这个问题吗? ***.com/questions/58391393/…【参考方案5】:

http://fbidb.io 呢?

使用idb ui describe-all 命令,您可以获得屏幕上所有元素(不是整个应用程序)的可访问性信息https://fbidb.io/docs/commands#accessibility-info

【讨论】:

【参考方案6】:

在您的任何测试中设置一个断点,然后执行:po XCUIApplication(),这将以易于阅读的树格式打印出整个应用的可访问性层次结构。

【讨论】:

以上是关于如何查看 XCUIElement 树?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 XCUIElement 的值?

10_Linux 环境中如何查看进程树

如何查看Maven仓库树

如何查看回归树? [复制]

如何在 XCUIElementQuery 中获取 XCUIElement 的索引?

如何查看 JMH 中的调用树分析?