以编程方式禁用iOS模拟器“连接硬件键盘”

时间:2019-04-25 08:53:32

标签: ios swift testing xcuitest

我正在为视图编写XCUITests,该视图具有2个UITextField,并且通过默认设置,模拟器已连接了硬件键盘,因此未提供该软件。

是否可以设置一些设置(也许在模式中?)以在测试运行之前通过模拟器强制禁用连接硬件键盘。

我通过的链接很少,但似乎没有帮助。 iOS simulator - disable connect hardware keyboard programmatically

Disable Hardware Keyboard for iOS Simulator using UIAutomation

当我在xcode local上尝试此方法时,它可以工作,但是,XCUItest在CI上运行,并且在测试执行开始之前,我为此快速启动文件配置了这个快速键盘文件。 但这会引发错误

设置:条目,“:DevicePreferences :: ConnectHardwareKeyboard  “,不存在

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

经历了同样的问题。找到了一个简单的解决方案,可以在UI测试方案中添加规定。

首先,这是使用Xcode打开的plist文件的图像。该文件位于〜/ Library / Preferences / com.apple.iphonesimulator.plist

enter image description here

现在这是我添加到ui测试方案中的规范。阅读脚本中的注释以获取进一步的解释。

enter image description here

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

工作方式 首先,模拟器被杀死。接下来,“默认值”命令将键/值写入模拟器的plist。现在,当测试开始时,他们将启动模拟器,该模拟器将考虑我们在plist中编写的值。

希望它也对您有用。 :)

答案 1 :(得分:1)

要禁用iOS 模拟器Connect Hardware Keyboard设置(模拟器->硬件->连接硬件键盘),请在 AppDelegate 中添加此截图强>。 ref link

#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