На iPhone 6 (и меньше) телефон никогда не отображает разделенный вид в «расширенном» режиме. То есть первичный и вторичный контроллеры представления внутри разделенного представления всегда отображаются последовательно. Напротив, на iPhone 6Plus (и более крупных моделях) телефон будет отображать разделенные изображения в расширенном режиме в альбомной ориентации. То есть первичный и вторичный контроллеры представления показаны рядом.
Это создает проблему для тестов пользовательского интерфейса. Если устройство представляет собой телефон, а класс размера по горизонтали — Компактный (iPhone 6 и меньше), тогда должен быть один набор тестов. Если устройство представляет собой телефон, а класс размера по горизонтали — Regular, тогда должен быть отдельный набор тестов.
К сожалению, мне не удалось найти тест для классов размеров при работе с UIElements в UITests. Есть ли способ получить информацию о traitCollection при тестировании пользовательского интерфейса?
Объект UIDevice имеет свойство «модель». Это строка. При тестировании на симуляторе единственными значениями, которые я видел в этом свойстве, являются «телефон» или «планшет». Номер модели телефона, похоже, недоступен, и документация Apple не гарантирует какой-либо конкретной ценности.
Объект UIDevice также имеет свойство userInterfaceIdiom. Это перечисление может сообщать о таких вещах, как CarPlay и Apple TV, в дополнение к планшету и телефону, но опять же не возвращает никакой информации о номере модели.
XCUIDevice не сообщает ни о среде признака, ни о номере модели.
Мой обходной путь - вставить тестовый код в мой основной проект. В начальной сцене я даю одному из элементов идентификатор доступности, который отражает исходный класс горизонтального размера. Например, если есть заголовок, то идентификатор доступности становится «заголовок (компактный)» или «заголовок (обычный)». Это можно запросить в тестах пользовательского интерфейса во время установки, а глобальную переменную можно установить для последующего использования. Однако это довольно плохой кладж.
Я надеюсь, что кто-то знает об объекте (доступном в тестах пользовательского интерфейса), который вернет что-то вроде:
<some object>.supportsSplitViewInExandedMode
Это было бы прекрасно!