【问题标题】:disable iOS simulator 'connect hardware keyboard' programmatically以编程方式禁用 iOS 模拟器“连接硬件键盘”
【发布时间】:2019-09-14 15:43:30
【问题描述】:

我正在为视图编写 XCUITests 有 2 个 UITextField 并且默认情况下模拟器连接了硬件键盘,因此没有显示软件。

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

我浏览了几个链接,但似乎没有一个有用。 iOS simulator - disable connect hardware keyboard programmatically

Disable Hardware Keyboard for iOS Simulator using UIAutomation

当我在本地 xcode 上尝试此操作时,它可以工作,但是 XCUItest 在 CI 上运行,并且我在测试执行开始之前为此配置了名为启用键盘脚本的 fastlane 文件。 但它会引发错误

设置:Entry, ":DevicePreferences::ConnectHardwareKeyboard ", 不存在

任何帮助将不胜感激

【问题讨论】:

    标签: ios swift testing xcuitest


    【解决方案1】:

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

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

    现在这是我添加到我的 ui 测试方案中的处方。阅读脚本中的 cmets 以获得进一步的解释。

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

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

    希望它也对你有用。 :)

    【讨论】:

    • 如果测试是从 XCode 运行的,它可以工作,但如果你从 fastlane 运行,它会失败
    • 同意。从快车道失败
    • 我没有使用 fastlane 的经验。我只使用 XcodeServer 运行 CI 测试。
    • Fastlane 应该禁用连接的硬件键盘本身。有一张公开的票:github.com/fastlane/fastlane/issues/16083.
    • 这似乎不再起作用了。它杀死了模拟器但不影响键盘。钥匙变了吗?你有更新的脚本吗?
    【解决方案2】:

    要禁用 iOS Simulators Connect Hardware Keyboard 设置(Simulator -> Hardware -> Connect Hardware Keyboard),请在 AppDelegate 中添加此 sniped .参考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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2011-03-14
      • 2019-11-25
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多