当 运行 应用程序在模拟器中时,删除本地通知的 iOS 权限警报
Removing iOS permission alert for local notifications when running app in simulator
我正在尝试在 KIF on an app that asks for local notification permissions pretty early on. Unfortunately due to iOS simulator security reasons it isn't possible to automate accepting iOS permission alerts using KIF. Per 中编写验收测试,看起来有办法禁用位置、地址簿、日历和照片的权限警报,但我找不到方法禁用本地通知权限。我尝试了链接问题中的权利方法,但以下键的 none 有效:
kTCCServiceNotifications
kTCCServiceNotification
kTCCServiceLocalNotification
kTCCServiceLocalNotifications
还有其他想法吗?现在我正在解决这个问题,方法是更改我的生产代码以在验收测试 运行 时有条件地禁用本地通知,但理想情况下我不必这样做。
不幸的是,我认为在自动化测试中没有执行此操作的好方法。我知道即使重置模拟器有时也不足以重置权限。我会将您的测试设计为不测试系统调用,而是测试您自己的应用程序代码。
根据用户是否允许通知来测试不同功能的一种方法是提取调用以检查权限,然后在测试中将此方法存根。此方法是最佳实践,因为目标不是测试 iOS 是否有效,而是测试您的应用程序代码是否正确。
可以通过在 applicationState.plist 中授予权限来禁止通知权限:
- 运行 您在模拟器上的应用,然后点击 "ok" 以获取任何权限弹出窗口
- 导航到“~/Library/Developer/CoreSimulator/Devices/{$deviceId}/data/Library/BackBoard/applicationState.plist”
- 在引导之前将 UI 测试模拟器的 applicationState.plist 替换为上述模拟器
我正在尝试在 KIF on an app that asks for local notification permissions pretty early on. Unfortunately due to iOS simulator security reasons it isn't possible to automate accepting iOS permission alerts using KIF. Per
kTCCServiceNotifications
kTCCServiceNotification
kTCCServiceLocalNotification
kTCCServiceLocalNotifications
还有其他想法吗?现在我正在解决这个问题,方法是更改我的生产代码以在验收测试 运行 时有条件地禁用本地通知,但理想情况下我不必这样做。
不幸的是,我认为在自动化测试中没有执行此操作的好方法。我知道即使重置模拟器有时也不足以重置权限。我会将您的测试设计为不测试系统调用,而是测试您自己的应用程序代码。
根据用户是否允许通知来测试不同功能的一种方法是提取调用以检查权限,然后在测试中将此方法存根。此方法是最佳实践,因为目标不是测试 iOS 是否有效,而是测试您的应用程序代码是否正确。
可以通过在 applicationState.plist 中授予权限来禁止通知权限:
- 运行 您在模拟器上的应用,然后点击 "ok" 以获取任何权限弹出窗口
- 导航到“~/Library/Developer/CoreSimulator/Devices/{$deviceId}/data/Library/BackBoard/applicationState.plist”
- 在引导之前将 UI 测试模拟器的 applicationState.plist 替换为上述模拟器