【问题标题】:Force Software Keyboard in iOS Simulator for XCUITest用于 XCUITest 的 iOS 模拟器中的强制软件键盘
【发布时间】:2019-03-27 15:58:18
【问题描述】:

我正在使用 XCUITest 测试存在键盘时的 UI 行为 - 例如,当键盘出现时内容是否正确上移。

出于某种原因,iOS 模拟器坚持定期只禁用软件键盘。有时在模拟器重新启动时,但有时甚至只是在测试中间切换文本字段时。

有没有办法在模拟器中始终强制使用软键盘?例如XCUIDevice 上的命令行参数或属性?我在 CI 上运行这些测试,因此无法在模拟器中手动启用软件键盘。

【问题讨论】:

    标签: ios ios-simulator xcuitest uitest


    【解决方案1】:

    我在 Xcode 中添加了一个指令。它将默认 ConnectHardwareKeyboard NO 写入 ~/Library/Preferences/com.apple.iphonesimulator.plist 文件并退出模拟器。退出模拟器很重要,因为当测试重新启动模拟器时,它才会考虑我们编写的默认值。

    【讨论】:

    • killall Simulator defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false
    【解决方案2】:
    external_kb_connected=false
    
    osascript -e 'quit app "Simulator"'
    
    SIMUS_KEYBOARD=$(/usr/libexec/PlistBuddy -c "Print :DevicePreferences" ~/Library/Preferences/com.apple.iphonesimulator.plist | perl -lne 'print $1 if /^    (\S*) =/')
    
    echo "$SIMUS_KEYBOARD" | while read -r a; do /usr/libexec/PlistBuddy -c "Set :DevicePreferences:$a:ConnectHardwareKeyboard $external_kb_connected" ~/Library/Preferences/com.apple.iphonesimulator.plist || /usr/libexec/PlistBuddy -c  "Add :DevicePreferences:$a:ConnectHardwareKeyboard bool $external_kb_connected" ~/Library/Preferences/com.apple.iphonesimulator.plist; done
    

    在测试目标的“构建阶段”运行上述脚本将禁用所有模拟器中的外部键盘。

    【讨论】:

    • 如果 Apple 有默认设置允许连接硬件键盘并设置要显示的键盘,那肯定会很好。 : /
    • 在此脚本中复制当前设置文件并将其添加到运行前脚本并使用运行后脚本恢复它也可能会很好。如果我有时间,我会在另一个回复中添加它。
    • 美丽。谢谢!
    【解决方案3】:

    我遇到了同样的问题,这对我有用:

    (点击模拟器)>硬件>键盘

    然后取消选中“连接硬件键盘”

    【讨论】:

    • 感谢您的回复。我应该提到测试是在 CI 上运行的,所以不幸的是,任何手动修复都是不可能的。仍然对答案投了赞成票,因为它可能会对在本地机器上遇到此问题的人有所帮助。
    • 我认为问题中暗示了测试是自动化的 - 因此,无需手动单击模拟器菜单来启用软件键盘。
    猜你喜欢
    • 2021-11-22
    • 2018-04-13
    • 1970-01-01
    • 2014-11-13
    • 2017-09-09
    • 2015-01-10
    • 2015-03-14
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多