Xcode UITesting: метка исчезает из иерархии и больше не возвращается
Это использование Xcode 7.2.1 и Swift 2.0.
У меня есть ячейка таблицы, содержащая UILabel
, которая используется для отображения сообщения об ошибке. Поэтому при начальной загрузке он заглушается с помощью кода, подобного этому:
cell.errorLabel.alpha = 0.0
cell.errorLabel.text = nil
Затем позже, когда я обнаружил ошибку, которую я хочу отобразить, я делаю это:
cell.label.text = "to"
cell.errorLabel.alpha = 1.0
cell.errorLabel.text = "Error !!!!"
Это прекрасно работает при запуске приложения. Однако при запуске в тесте пользовательского интерфейса я пытаюсь проверить, что ошибка отображается следующим образом:
let toCell = XCUIApplication().tables.... // Finds the cell with label 'to'
XCTAssertTrue(toCell.staticTexts["Error !!!!"].exists)
И она терпит неудачу. Я проверил, что я ... получение нужной ячейки путем проверки другой ('to') метки присутствует. Которого она является. Но тестирование пользовательского интерфейса не увидит метки ошибки. Я проверил это, добавив точку останова и используя отладчик следующим образом:
(lldb) p toCell.staticTexts.count
t = 427.03s Get number of matches for: Descendants matching type StaticText
t = 427.29s Snapshot accessibility hierarchy for enterprise.com.me
t = 427.31s Find: Descendants matching type Table
(UInt) $R2 = 1
t = 427.31s Find: Descendants matching type Cell
t = 427.32s Find: Elements containing elements matching type StaticText with identifier 'to'
t = 427.32s Find: Descendants matching type StaticText
Значение (UInt) $R2 = 1
, указывающее на наличие одного статического текста. Однако, глядя на тренажер, я ясно вижу две UILabels.
Я попробовал несколько вещей индивидуально, чтобы изолировать проблему-используя только alpha
или установив текст в nil
, или используя UIView hidden
собственность. Использование любой из этих опций для первоначального скрытия метки делает ее невидимой для тестов пользовательского интерфейса, когда позже она становится видимой, независимо от того, что я пытаюсь.
expectationForPredicate(...)
, но UILabel
не появился.1 ответ:
Проблема оказалась в том, что я не установил свойство
Таким образом, если вы создаете пользовательские ячейки для табличного представления, убедитесь, что вы задали свойствоaccessibilityElements
на ячейки. Поэтому у accessibility возникли проблемы, пытаясь выяснить, что было в каждом из них.accessibilityElements
, чтобы тестирование могло найти содержимое ячеек.