Как вы можете увидеть дерево XCUIElement?

Фон:

Я экспериментирую с тестированием уровня ui в iOS 9.0 с XCode GM.

Вопрос:

Есть ли команда в XCode GM, которая позволит вам увидеть "дерево" доступных элементов и их отношений? Что-то похожее на команду 'page' в Appium?

В идеале я мог бы запустить команду в отладчике, которая предоставила бы мне список элементов, доступных для выбора/манипуляции. В настоящее время вы можете использовать debugDescription на одном XCUIElement, но это дает вам информацию только для этого элемента.

Ответ 1

Установите точку останова, где вы хотели бы видеть дерево... в типе отладчика:

po print(XCUIApplication().debugDescription)

Это распечатывает все, к чему имеет доступ XCUITesting. Вы также можете просто добавить это в свой тест:

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

Таким образом, если у вас возникают проблемы с поиском чего-либо, вы можете автоматически распечатать то, что приложение видит сразу после того, как вы что-то сделали.

Ответ 2

Это не совсем то, о чем вы просите, но Xcodes Accessibility Inspector упрощает просмотр вашей иерархии представлений с точки зрения того, какие элементы доступны через идентификаторы. (N.B. Это не "Ярлык" в панели специальных возможностей IB, это поле "Идентификатор".):

В Xcode 7.2 откройте Xcode- > Open Developer Tool- > Accessibility Inspector. (Возможно, вам нужно будет предоставить разрешение на использование приложения в Системные настройки.) Затем запустите приложение iOS из Xcode и наведите курсор на любой элемент пользовательского интерфейса в SIMULATOR. Вы увидите исчерпывающую информацию о типе элемента, описании, иерархии и т.д.

В любое время, когда вы регистрируете действия пользовательского интерфейса, и вывод не выглядит правильным, используйте инструмент, чтобы выяснить, какие описания доступности нужно добавлять, изменять или удалять. (Я провел пару дней, пытаясь получить глубоко внедренный UISegmentedControl для изменения с помощью жгута тестирования пользовательского интерфейса, и проблема стала очевидной после того, как я выяснил, как использовать средство проверки доступности.)

Спасибо людям за shinobicontrols.com за отличный совет!

Ответ 3

Я бы предложил выбрать из строки меню: Debug > View Debugging > Capture View Hierarchy при запуске в debug. Не только вы визуально представляете представления, но и навигатор отладки на левой стороне показывает иерархию. Это может быть не одно-на-один с перспективой тестирования пользовательского интерфейса, но это может быть очень полезно. Надеюсь, что это поможет.

Ответ 4

Appium делает это с помощью Facebook WebdriverAgent. Насколько я могу судить, то, как они это делают, по сути, начинается с корневого элемента приложения и собирает информацию о каждом дочернем элементе, а затем повторяется.