为自动UITesting设置模拟器

smn*_*mnk 1 automated-tests simulator ios run-script xcode-ui-testing

我需要设置我的Simulators for Automated UITesting.特别是从键盘上删除Autocorrection,Spellchecking,Prediction等.

我正在为一个模拟器这样做:

plutil -replace KeyboardAutocapitalization -bool NO -- ~/Library/Developer/CoreSimulator/Devices/319FF855-F54C-4BB7-BDED-F0CC4B1FF8FC/data/Library/Preferences/com.apple.Preferences.plist
Run Code Online (Sandbox Code Playgroud)

问题是,当测试在另一台设备上运行时,它将不会设置模拟器,因为UUID是硬编码的.

我也能够像这样启动/选择模拟器:

currentUUID="$(xcrun simctl list devices | grep "iPhone 7 (" | egrep -o -i "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")"
Run Code Online (Sandbox Code Playgroud)

我必须放在哪里iPhone 7 (才能获得UUIDiPhone 7而不是7+.这也只有在我之前在Xcode中选择iPhone 7作为模拟器时才有效.另一种方法是更换iPhone 7 (with booted.

但为了使其工作,脚本需要模拟器已经运行.当它已经运行时,更改plist文件实际上不会更新模拟器上的设置.

我怎样才能启动模拟器,然后在设置之前抓住它的UUID?

谢谢.

Bar*_*nda 5

plu创建了一个simctl能够操纵模拟器的宝石.它可以创建,删除,启动设备并执行更多操作.一个有趣的功能是禁用键盘助手.如果您使用Fastlane,您可以创建新的私人通道,这将禁用所有人的键盘助手.

要安装此gem,请使用:

[sudo] gem install simctl 
Run Code Online (Sandbox Code Playgroud)

在Fastfile添加此通道:

private_lane :disable_keyboard_helpers do
  require "simctl"
  SimCtl.list_devices.each do |d| 
    d.settings.disable_keyboard_helpers
  end
end
Run Code Online (Sandbox Code Playgroud)

现在在您的测试通道中,您可以disable_keyboard_helpers像这样使用:

lane :test do |options|
  disable_keyboard_helpers
  scan
end
Run Code Online (Sandbox Code Playgroud)

如果您没有使用Fastlane,您仍然可以simctl通过直接执行Ruby命令来使用:

ruby -e "require 'simctl'; SimCtl.list_devices.each { |d| d.settings.disable_keyboard_helpers }"
Run Code Online (Sandbox Code Playgroud)