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

Моя раскадровка имеет только один пользовательский интерфейс и панель навигации с одним UIBarButtonItem с системным элементом: Добавить. Он также имеет другую информацию UIButton. При тестировании пользовательского интерфейса на английском все работает без проблем. Но если переключать язык на другой, всегда не получается. Вот фрагмент кода тестирования:

app.navigationBars["My Product"].buttons["Add"].tap()
app.buttons["More Info"].tap()

Согласно журналу ошибок, Xcode находит его на другом языке. Вот:

Ошибка утверждения: ошибка тестирования пользовательского интерфейса — для кнопки «Подробнее» не найдено совпадений

Ввод запроса был

Button 0x7fa4ca65a1d0: traits: 8724152321, {{8.0, 31.5}, {21.0, 21.0}}, label: '戻る',
Button 0x7fa4ca657700: traits: 8589934593, {{330.5, 26.0}, {40.0, 30.0}}, label: '追加',
Button 0x7fa4ca4658d0: traits: 8589934593, {{312.0, 605.0}, {22.0, 22.0}}, label: '詳細情報'

Однако я не создал для него никакой локализованной строки, так как это просто изображение, созданное системой iOS. Кто-нибудь знает, как это исправить? Огромное спасибо.


person clu    schedule 05.10.2015    source источник


Ответы (3)


Вариант 1. Установите язык по умолчанию

Создайте новую схему для тестирования пользовательского интерфейса и установите язык приложения по умолчанию. Это заблокирует приложение в одном локализованном файле, чтобы вы могли написать все свои тесты для этого языка.

Установите параметр Продукт -> Схема -> Управление схемами или ⌘⇧,. Затем выберите вкладку «Параметры» и установите язык.

Xcode — установка языка приложения по умолчанию

Плюсы: простое одноразовое изменение.

Минусы: нельзя использовать для создания локализованных скриншотов с помощью моментального снимка (инструмент, запускает ваше приложение с помощью тестирования пользовательского интерфейса и попутно создает скриншоты App Store).

Вариант 2. Используйте -accessibilityIdentifier для локализованных строк

Вместо доступа к элементам через их отображаемый текст или значение используйте accessibilityIdentifier. Это считывается фреймворком тестирования пользовательского интерфейса, но никогда не отображается и не читается пользователям (даже при включенных специальных возможностях). В старых документах UIAutomation Apple упоминает об использовании этого для функций разработчика, что выглядит как хороший вариант использования.

Затем вы можете продолжить устанавливать accessibilityLabel и accessibilityValue, как обычно, с локализованными версиями.

Плюсы: можно использовать для более универсальных решений, таких как автоматическое создание скриншотов.

Минусы: может потребоваться дополнительная работа по изменению каждого ярлыка, который вам нужен «нелокализованным» для тестирования.

person Joe Masilotti    schedule 05.10.2015
comment
Спасибо за комментарии. Я пытаюсь принудительно перевести язык на английский, основываясь на вашем предложении, но это вообще не работает. Не уверен, что это ошибка Xcode. - person clu; 19.11.2015
comment
Я проверил его метку доступности и идентификатор, и все они пусты, не знаю, почему он все еще переведен. Поэтому я добавляю для нее метку, в моем случае я просто добавляю «Дополнительную информацию» для этой кнопки, теперь она может без проблем работать на всех других языках. Я открыл отчет об ошибке в Apple для варианта 1. Спасибо, Джо! - person clu; 26.11.2015

Вы рассматривали возможность использования

[[app.buttons elementBoundByIndex: 0] tap];  //0-2

вместо того, чтобы пытаться идентифицировать кнопку по ее метке? Это менее утонченное решение вашей проблемы, но оно может выполнить работу.

person James Goe    schedule 26.11.2015

С быстрыми тремя вы можете использовать BarButtons с кодом ниже

app.navigationBars.buttons.element(boundBy: 0).tap()

вы можете изменить индекс в соответствии с вашими потребностями

person Aks    schedule 19.09.2017