Наконец, я написал скрипт, который редактирует файл .plist симулятора и устанавливает для ConnectHardwareKeyboard
свойства false значение для выбранного симулятора. Вы правильно поняли, это изменяет свойство для специально выбранного симулятора в словаре «DevicePreferences», а не редактирует глобальное свойство.
Сначала создайте сценарий оболочки с именем disable-hardware-keyboard.sh со следующим содержимым. Вы можете поместить его в «YourProject / xyzUITests / Scripts /».
echo "Script: Set ConnectHardwareKeyboard to false for given Simulator UDID"
if [[ $1 != *-*-*-*-* ]]; then
echo "Pass device udid as first argument."
exit 1
else
DEVICE_ID=$1
fi
DEVICE_PREFERENCES_VALUE='<dict><key>ConnectHardwareKeyboard</key><false/></dict>'
killall Simulator # kill restart the simulator to make the plist changes picked up
defaults write com.apple.iphonesimulator DevicePreferences -dict-add $DEVICE_ID $DEVICE_PREFERENCES_VALUE
open -a Simulator # IMPORTANT
Теперь выполните следующие шаги, чтобы вызвать его, передав в качестве аргумента udid выбранного симулятора:
- Отредактируйте свою схему XCode (или UI тестирует определенную схему, если у вас есть)
- Перейти к: Тест> Предварительные действия
- Чтобы добавить новый сценарий, коснитесь символа «+»> «Действие запуска нового сценария».
- Важное замечание: В раскрывающемся списке «Предоставить параметры сборки из» выберите цель основного приложения, а не цель тестирования пользовательского интерфейса.
- Теперь добавьте следующий скрипт в текстовую область ниже.
Скрипт внутри Test> Pre-actions:
#!/bin/sh
# $PROJECT_DIR is path to your source project. This is provided when we select "Provide build settings from" to "AppTarget"
# $TARGET_DEVICE_IDENTIFIER is the UDID of the selected simulator
sh $PROJECT_DIR/xyzUITests/Scripts/disable-hardware-keyboard.sh $TARGET_DEVICE_IDENTIFIER
# In order to see output of above script, append following with it:
# | tee ~/Desktop/ui-test-scheme-prescript.txt
Время проверить это:
- Запустить симулятор
- Включить аппаратную клавиатуру для него
- Запустите любой тест пользовательского интерфейса с помощью клавиатуры. Наблюдайте, как симулятор перезагружается и аппаратная клавиатура отключена. И взаимодействие с клавиатурой теста работает нормально. :)