用于 XCUITest 的 iOS 模拟器中的强制软件键盘
Posted
技术标签:
【中文标题】用于 XCUITest 的 iOS 模拟器中的强制软件键盘【英文标题】:Force Software Keyboard in iOS Simulator for XCUITest 【发布时间】:2019-03-27 15:58:18 【问题描述】:我正在使用 XCUITest 测试存在键盘时的 UI 行为 - 例如,当键盘出现时内容是否正确上移。
出于某种原因,ios 模拟器坚持定期只禁用软件键盘。有时在模拟器重新启动时,但有时甚至只是在测试中间切换文本字段时。
有没有办法在模拟器中始终强制使用软键盘?例如XCUIDevice 上的命令行参数或属性?我在 CI 上运行这些测试,因此无法在模拟器中手动启用软件键盘。
【问题讨论】:
【参考方案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 上运行的,所以不幸的是,任何手动修复都是不可能的。仍然对答案投了赞成票,因为它可能会对在本地机器上遇到此问题的人有所帮助。 我认为问题中暗示了测试是自动化的 - 因此,无需手动单击模拟器菜单来启用软件键盘。以上是关于用于 XCUITest 的 iOS 模拟器中的强制软件键盘的主要内容,如果未能解决你的问题,请参考以下文章
XCUItest addUIInterruptionMonitor 未在 iOS14 模拟器和 xcode 12 上捕获警报