Тесты пользовательского интерфейса Xcode не могут найти представления, добавленные программно

Я добавляю дочернее представление к своему представлению программно, и когда я это делаю, я прикрепляю к нему все параметры доступности:

  [labelView setAccessibilityLabel:@"label"];
  [labelView setIsAccessibilityElement:YES];
  [labelView setUserInteractionEnabled:YES];

Но когда я запрашиваю пользовательский интерфейс следующим образом:

 let app = XCUIApplication()
 app.staticTexts["label"]

Тест завершается неудачно, потому что не может найти представление.

Как мне справиться с этим, как сделать динамически добавляемые представления доступными для тестирования пользовательского интерфейса?


person Mr.Me    schedule 21.04.2016    source источник
comment
Что именно вы пытаетесь проверить? Просто представление загрузилось, или вы пытаетесь искать объекты в представлении?   -  person Aaron Sofaer    schedule 21.04.2016
comment
Кто является родителем labelView?   -  person Tomas Camin    schedule 22.04.2016
comment
Я пытаюсь прочитать содержимое метки (.value). @TomasCamin это UIEditText, но какая разница?   -  person Mr.Me    schedule 22.04.2016


Ответы (2)


Вам нужно убедиться, что в представлении контейнера вашего представления метки (UIEditText?) isAccessibilityElement не установлено значение YES. Если это произойдет, он скроет доступность своих подвидов (ваш ярлык).

Установите флажок Сделать содержимое пользовательских представлений контейнеров доступным в Руководство по программированию специальных возможностей

person Tomas Camin    schedule 22.04.2016
comment
Спасибо за ответы, хотя это понятное требование для дизайна специальных возможностей, это очевидный недостаток в тестировании пользовательского интерфейса Xcode. - person Mr.Me; 22.04.2016
comment
Мне потребовалось некоторое время, чтобы понять это самому, но в конце концов это имеет смысл. В любом случае документы стоит прочитать. - person Tomas Camin; 22.04.2016

У меня было другое решение, потому что я создал себе другую проблему, которая проявлялась таким же образом, а именно XCUITests не мог найти основные элементы. Мое приложение использует UIWindow с UIWindow.windowLevel установленным на .normal + 2 для отображения полноэкранного индикатора загрузки поверх других окон. Оказывается, даже когда это окно не находится в иерархии представлений, или иерархии доступности, или цепочке респондентов, просто своим существованием оно нарушает систему обхода иерархии доступности/представлений, которую используют тесты пользовательского интерфейса.

Чтобы убедиться в этом, я полностью удалил дополнительные экземпляры UIWindow из приложения. Исправление оказалось проще, просто использовалось windowLevel = .alert и не добавлялись константы к константам UIKit.

person nteissler    schedule 08.01.2020