iOS 隐私警报
备注
本文不解决在应用程序中使用 创建的 UIAlertViewController 警报。 可以通过适当的测试查询直接处理它们。 相反,本文介绍标准 UI 查询无法处理的 iOS 生成的警报。
在执行 iOS 应用程序时,当应用程序尝试激活或访问 Apple Push Notifications、Location Services、Contacts、设备麦克风或相机等以请求权限时,操作系统可能会在各种时间向用户显示警报。 这些弹出窗口有时称为警报、系统警报、系统弹出窗口、Springboard 警报或隐私对话框。 接受这些请求后,该接受状态将持久保存,因此用户通常不会在设备上再次看到该应用的该警报。
首次安装应用时,需要解决这些警报。 如果之前已接受请求,则在本地运行的测试可能无法找到警报。
测试在 App Center 测试中执行时,它们正在不受保护的设备上运行,当应用程序尝试访问受保护的服务或功能时,将触发警报。
在测试App Center警报的处理因测试框架而异。
Xamarin.UITest 和 Calabash iOS
Xamarin.UITest 和 Calabash 会自动接受他们了解的警报。 已知警报基于文本匹配。 如果尚未消除 SpringBoard 警报,请搜索文件 上的DeviceAgent.js 标题。
$ cd DeviceAgent.iOS
$ git pull
$ find Server/Resources.xcassets -name "alerts.json" -exec grep -q "to access your location" {} \; -print
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en_GB.dataset/alerts.json
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en_AU.dataset/alerts.json
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en.dataset/alerts.json
如果应用程序具有不在该文件中的警报,请转到"?" > 网站中的" 联系支持App Center以添加它们。 如果它们已在该文件中,则设备配置可能有一些问题,应报告为 bug,App Center测试支持。
备注
你可能会注意到 DismissSpringboardAlerts() 在 Xamarin.UITest API 中。 DismissSpringboardAlerts() 是 Xamarin.UITest 在内部使用的方法。 通常不需要在用户测试 DismissSpringboardAlerts() 代码中调用 。
XCUITest 与 UIAutomation
Xamarin.UITest 和 Calabash 使用两个 Apple 测试框架之一与设备交互。
- 如果在本地运行测试,则 Apple 测试框架为 XCUITest。
- 如果在 iOS 10 或更高版本的 App Center 测试中运行测试,则 Apple Test Framework 为 XCUITest。
- 如果在 iOS 版本低于 iOS 10 的 App Center Test 中运行测试,则使用的是 Apple 的 UIAutomation。
使用 UIAutomation 进行测试需要在出现第一个警报之前在应用程序中进行延迟,以便 Apple 的 UIAutomation 框架控制受测应用程序。 如果这是应用程序和测试的问题,请参阅 管理隐私警报:位置服务、APNS、联系人。
Calabash iOS
除了自动处理警报(如 Xamarin.UITest)外,Calabash 还允许手动管理警报。
- 若要检查是否显示警报并查询其属性,请参阅
/springboard-alertQueryRoutes.m。 - 若要消除警报,请通过触摸具有给定标题的按钮,请参阅
/set-dismiss-springboard-alertGestureRoutes.m。 - 若要消除已知警报并切换自动解除,请参阅
/dismiss-springboard-alerts/set-dismiss-springboard-alerts-automaticallyMetaRoutes.m 中的 和。 如果调用 并遇到/dismiss-spring-board-alerts未知警报,则引发异常。
此 Calabash iOS 代码片段演示如何使用这些方法:
...
# Turn off automatic alert dismissal
device_agent.dismiss_springboard_alerts_manually!
# Do whatever triggers the alert, then wait for the alert
# that may or may not appear.
begin
device_agent.wait_for_springboard_alert(10) # timeout is optional
device_agent.dismiss_springboard_alert("OK")
rescue RuntimeError
# Alert didn't appear, so there's nothing to do
end
...
# Turn automatic dismiss back on
dismiss_springboard_alerts_automatically!
Appium
有关警报,请参阅 Appium 文档。
XCUITest
请参阅用于 监视 UI 中断 的 Apple 文档。
获取帮助
始终可以通过 右上角的 "?" 图标与我们联系。 我们不提供24/7 支持,但会尽快回复。
如果你想要帮助测试运行,请导航到相关的测试运行,并从浏览器中复制该 URL 并将其粘贴到支持会话中。 测试运行 URL 类似于 https://appcenter.ms/orgs/OrgName/apps/App-Name/test/runs/77a1c67e-2cfb-4bbd-a75a-eb2b4fd0a747 。