программно отключить симулятор iOS `` подключить аппаратную клавиатуру ''

Я пишу XCUITests для просмотра, имеет 2 UITextField, и по умолчанию симулятор имеет подключенную аппаратную клавиатуру, поэтому программная не представлена.

Можно ли установить некоторые настройки (может быть, в схеме?), Чтобы принудительно отключить подключение аппаратной клавиатуры симулятором перед запуском теста.

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

Отключить аппаратную клавиатуру для симулятора iOS с помощью UIAutomation

Когда я пробую это на локальном xcode, он работает, но XCUItest работает на CI, и я настроил файл fastlane для этого, называемого скриптом включения клавиатуры, до начала выполнения теста. Но это выдает ошибку

Установить: Запись, ": DevicePreferences :: ConnectHardwareKeyboard", не существует

Любая помощь могла бы быть полезна


person Nitisha Sharma    schedule 25.04.2019    source источник


Ответы (2)


Прошла та же проблема. Нашел простое решение добавить прескрипт в схему UI тестов.

Во-первых, это изображение файла plist, открытого с помощью Xcode. Он находится в ~ / Library / Preferences / com.apple.iphonesimulator.plist.

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

А теперь рецепт, который я добавил в схему тестирования пользовательского интерфейса. Прочтите комментарии в сценарии для дальнейшего объяснения.

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

killall Simulator
defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false

Как это работает Сначала симулятор убит. Затем команда "defaults" записывает ключ / значение в список симуляторов. Теперь, когда запускаются тесты, они запускают симулятор, который учитывает значение, которое мы написали в plist.

Надеюсь, это сработает и для вас. :)

person Hasaan Ali    schedule 30.07.2019
comment
Он работает, если тест запускается из XCode, но не работает, если вы запускаете с быстрой полосы - person nr5; 26.02.2020
comment
Согласовано. Срывается с быстрой полосы - person Mark Thormann; 17.03.2020
comment
У меня нет опыта игры на скоростной полосе. Я использую XcodeServer только для запуска тестов CI. - person Hasaan Ali; 18.03.2020
comment
Fastlane должен сам отключать подключенную аппаратную клавиатуру. Для этого есть открытый билет: github.com/fastlane/fastlane/issues/16083. - person Andre Yonadam; 06.04.2020
comment
Кажется, это больше не работает. Это убивает симулятор, но не влияет на клавиатуру. Ключ поменяли? У вас есть обновленный скрипт? - person Simon McLoughlin; 26.06.2020

Чтобы отключить настройку Connect Hardware Keyboard iOS Simulator (Simulator - ›Hardware -› Connect Hardware Keyboard), добавьте этот фрагмент в AppDelegate. ref ссылка

#if targetEnvironment(simulator)
// Disable hardware keyboards.
let setHardwareLayout = NSSelectorFromString("setHardwareLayout:")
UITextInputMode.activeInputModes
    // Filter `UIKeyboardInputMode`s.
    .filter({ $0.responds(to: setHardwareLayout) })
    .forEach { $0.perform(setHardwareLayout, with: nil) }
#endif
person Ömer Faruk Öztürk    schedule 21.04.2020