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

Предыстория:

Я экспериментирую с тестированием уровня пользовательского интерфейса в iOS 9.0 с помощью XCode GM.

Вопрос:

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

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


person Joe Susnick    schedule 25.09.2015    source источник
comment
Вы нашли способ получить эту информацию?   -  person MatterGoal    schedule 17.10.2015
comment
К сожалению, не похоже, что Apple планирует что-то предоставить. Ответ ниже, вероятно, лучший способ сделать это, но он не идеален.   -  person Joe Susnick    schedule 19.10.2015


Ответы (5)


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

po print(XCUIApplication().debugDescription)

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

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

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

person h.w.powers    schedule 16.01.2017

Это не совсем то, о чем вы просите, но Инспектор доступности Xcode значительно упрощает просмотр иерархии представлений с точки зрения того, какие элементы доступны через идентификаторы. (Примечание: значение имеет не «Ярлык» на панели специальных возможностей IB, а поле «Идентификатор».):

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

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

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

person Debo    schedule 03.01.2016
comment
Я не совсем согласен с простотой использования Инспектора доступности. Я обнаружил, что он очень ненадежный и предоставляет неполную информацию. - person Adrian; 14.11.2019

Я бы предложил выбрать в строке меню: Отладка > Просмотр отладки > Захват иерархии представлений при работе в режиме отладки. Вы не только визуально представляете представления, но и левый навигатор отладки показывает иерархию. Это может быть не однозначно с точки зрения UI-тестирования, но может быть очень полезным. Надеюсь, это поможет.

person Nick McConnell    schedule 29.09.2015
comment
Это действительно круто, но с точки зрения доступности это не отвечает... Было бы неплохо, если бы Apple предоставила нам удобный метод для получения списка доступных элементов с идентификаторами. - person Joe Susnick; 30.09.2015
comment
Когда вы выбираете представление в отладчике представлений Xcode, инспектор объектов справа показывает информацию о специальных возможностях. Это может быть полезно. - person wolfrevo; 23.06.2016

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

person TinyTimZamboni    schedule 12.03.2019
comment
не могли бы вы ответить на этот вопрос, если знаете ответ? stackoverflow.com/questions/58391393/ - person Just a coder; 28.10.2019

А как насчет http://fbidb.io?

С помощью команды idb ui describe-all вы получаете информацию о доступности всех элементов на экране (не всего приложения) https://fbidb.io/docs/commands#accessibility-info

person Estevão Lucas    schedule 13.05.2020