你如何查看XCUIElement树?

25
背景:

我正在使用XCode GM中的iOS 9.0进行UI级别测试。

问题:

在XCode GM中,是否有一种命令可以让你查看可访问元素及其关系的“树形”结构?类似于Appium中的“页面”命令?

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


你找到获取这个信息的方法了吗? - MatterGoal
不幸的是,苹果似乎没有计划提供这样的功能。下面的答案可能是解决问题的最佳方法,但并不理想。 - Joe Susnick
6个回答

41

在您希望查看树结构的位置设置断点... 在调试器中输入:

po print(XCUIApplication().debugDescription)

这将打印出XCUITesting可以访问的所有内容。您也可以将其直接添加到您的测试中:

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

那么如果您在查找某些内容时遇到困难,您可以让应用程序在您完成某项操作后自动打印出其所见到的内容。


1
debugDescription的问题在于它不能正确地格式化输出,很难阅读。使用po XCUIApplication()可以将层次结构以漂亮的树形格式打印出来。 - kakubei

12

这并不完全符合您的要求,但是Xcode的辅助功能检查器使得从易于访问的标识符角度来查看视图层次结构变得更加容易。需要注意的是,在IB的可访问性面板中,“Label”并不重要,而是“Identifier”字段。

在Xcode 7.2中,打开Xcode->打开开发人员工具->辅助功能检查器。(您可能需要在系统偏好设置中给应用程序授权运行。)然后从Xcode启动您的iOS应用程序,并悬停在模拟器中的任何UI元素上。您将看到有关元素类型、描述、层次结构等的详细信息。

每当记录UI操作时,如果输出结果不正确,请使用该工具确定需要添加、更改或删除的辅助功能描述(我花了几天时间尝试通过UI测试线束来更改一个嵌套的UISegmentedControl,一旦我知道如何使用辅助功能检查器工具,问题就显而易见了)。

感谢shinobicontrols.com团队提供的好建议!


1
我并不完全认同辅助功能检查器的易用性。我发现它非常不稳定,并且提供的信息不完整。 - Adrian

3
我建议从菜单栏中选择:调试(Debug) > 查看调试(View Debugging) > 运行调试时捕获视图层级(Capture View Hierarchy)。这不仅为您提供了一种可视化表示视图的方式,还可以在左侧的调试导航器(Debug Navigator)中显示层次结构。虽然这可能与UI测试的角度并非一对一,但它确实非常有帮助。希望这可以帮到您。

3
很酷,但它没有回答关于可访问性的问题...如果苹果提供一个方便的方法来获取带有标识符的可用元素列表,那就太好了。 - Joe Susnick
当您在Xcode的视图调试器中选择一个视图时,右侧的对象检查器会显示可访问性信息。那可能会很有用。 - wolfrevo

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

0

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


1
如果您知道答案,能否回答这个问题?https://stackoverflow.com/questions/58391393/how-does-a-ui-app-inspectors-like-the-one-in-appium-work - Just a coder

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接