Элемент автоматизации пользовательского интерфейса iOS не находит подэлементов

Я только начинаю с UI Automation для своего приложения для iOS и уже испытываю проблемы. Я не могу прикрепить снимки экрана, поэтому постараюсь описать свой сценарий.

Я строю для iOS 6.0 и использую раскадровку. Приложение запускается на экран с контроллером навигации. Контроллер корневого представления содержит главное представление, которое имеет 1 подпредставление UIView, занимающее нижние 60% экрана, и сегментированный элемент управления, который находится над этим подпредставлением. Я был в состоянии настроить доступность для основного вида (метка «mainview»). Затем я могу найти этот элемент в моем тесте без проблем. Однако теперь у меня возникают проблемы с поиском сегментированного контроллера. Поэтому я решил выйти из системы "elements ()" и "segementedControls ()" из моего элемента "mainview", а длина каждого массива равна 0. Так или иначе, когда тест запускает мое приложение, он говорит, что нет подпрограмм -элементы на мой основной вид.

Еще одна вещь, на которую следует обратить внимание, - это то, что я не смог найти какой-либо раздел доступности в инспекторе удостоверений редактора раскадровки для сегментированного элемента управления. Однако я временно добавил кнопку в свой основной вид и настроил ее с меткой доступности, просто чтобы проверить, будут ли вызовы elements () или buttons () впоследствии показывать элемент для основного вида при запуске моего теста, но эти массивы все еще были возвращается как пустой, даже с кнопкой.

Вот мой сценарий:

var target = UIATarget.localTarget();
var app = target.frontMostApp();

function selectListView() {
var testName = "selectListView";

UIALogger.logStart(testName);

var view = app.mainWindow().elements()["mainview"];
if (!view.isValid()) {
    UIALogger.logFail("Could not locate main view");    
}

UIALogger.logMessage("Number of elements for sub element: " + view.elements().length);

var segmentedControl = view.segmentedControls()[0];
if (!segmentedControl.isValid()) {
    UIALogger.logFail("Could not locate segmented control on physician collection parent view");
}

var listButton = segmentedControl.buttons()[1];
if (!listButton.isValid()) {
    UIALogger.logFail("Could not locate list button on segemented controller on physician collection parent view"); 
}

UIALogger.logMessage("Tapping List button on physician collection view's segmented control");
listButton.tap();

UIALogger.logPass(testName);
}

selectListView();

Любая помощь с благодарностью.

РЕДАКТИРОВАТЬ: я добавил это в свой сценарий для поиска по всей иерархии представления из главного окна, установить значение метки доступности для моего сегментированного элемента управления в initWithCoder (так как я не могу установить один в редакторе раскадровки для сегментированного элемента управления, как я уже говорил ранее) и до сих пор не смог найти элемент - он как бы просто отсутствует в иерархии представлений, хотя он на экране и функционирует просто отлично:

function traverse(root, name) {
if (root.name() == name) {
    return root;
}

var elements = root.elements();

for (var i = 0; i < elements.length; i++) {
    var e = elements[i];

    var result = traverse(e, name);
    if(result != null) {
        return result;
    } 
}

return null;
}

function selectListView() {
var testName = "selectListView";

var segmentedControl = traverse(UIATarget.localTarget().frontMostApp().mainWindow(), "mysegementedcontrol");
if (segmentedControl == null) {
    UIALogger.logMessage("Still could not find it");
}

....
}

РЕДАКТИРОВАТЬ: Добавлен вызов app.logElementTree () и все еще нет сегментированного элемента управления в поле зрения («PhysicianCollectionParentView» - это мой «mainview» - вы можете видеть, там нет подэлементов):

РЕДАКТИРОВАТЬ: Вот несколько снимков экрана. Первый показывает мой «главный» вид контроллера. Далее показано, что в дополнение к сегментированному элементу управления существует также подпредставление UIView. 3-й показывает основную точку входа для приложения в моей раскадровке.

Вот расширение класса для моего «основного» контроллера представления, показывающее выходы для сегментированного элемента управления и другого подпредставления UIView:

@interface PhysicianCollectionMasterViewController ()
@property (strong, nonatomic) IBOutlet UISegmentedControl *viewSelectionControl;
@property (strong, nonatomic) IBOutlet UIView *physicianCollectionView;
@end

РЕДАКТИРОВАТЬ: Вот кое-что очень интересное - я решил пойти с совершенно новым сценарием, созданным в инструментах, и воспользоваться функцией записи. Когда я нажал на свой сегментированный элемент управления, вот JavaScript, который он создал, чтобы показать мне, как он получил доступ к одной из кнопок на моем сегментированном элементе управления:

var target = UIATarget.localTarget();

target.frontMostApp().mainWindow().elements()["PhysicianCollectionParentView"].tapWithOptions({tapOffset:{x:0.45, y:0.04}});

Итак, я думаю, в худшем случае я мог бы пойти с чем-то вроде этого, но для меня просто не имеет смысла, что UI Automation просто не думает, что элемент управления существует. Так странно. Там должно быть что-то, что я пропускаю, но мои настройки настолько просты, что я не могу себе представить, что это может быть.

Ответы на вопрос(2)

Ваш ответ на вопрос