我的 iOS 应用程序需要一些权限(GPS、推送通知)。
当应用程序第一次启动时,iOS 会询问用户是否同意向应用程序授予这些权限。
我已经编写了一些 UITest,并希望在本地连接的 iPhone 上自动运行它们。
问题是我无法覆盖权限问题并且我的测试失败。
我发现 IDE(Xamarin Studio)部署的应用程序会请求权限,但通过 UITests 部署的应用程序不会。
所以我尝试了.AppBundle(path_to_app)
但它说这仅对部署到模拟器有效。
设置:System.Exception:此应用程序包对于运行无效
一个模拟器。要解决此问题,请确保您的目标设备
是一个模拟器。 DTPlatformName 是“iphoneos”,而不是“iphonesimulator”
应用程序 Info.plist。
就像它试图将 iPhone 应用程序部署到模拟器一样。但Xamarin Studio中的Target设置为真实设备。
我尝试添加.DeviceIdentifier
。当与以下一起使用时.InstalledApp
它正在启动(仍在请求权限)。
但是当我使用DeviceIdentifier
and AppBundle
出现与上面相同的错误。
我的测试在 Test Cloud 上运行良好。它们在模拟器上运行良好。
当我手动部署到设备、启动应用程序并批准权限然后运行 UI 测试时,它们工作正常。
我无法实现的是让 UITests 覆盖真实设备上的权限问题。
有人做过这个工作吗?
最后一件事是我发现在文档中AppBundle
方法
“将强制在模拟器上运行”https://developer.xamarin.com/api/member/Xamarin.UITest.Configuration.iOSAppConfigurator.AppBundle/p/System.String/ https://developer.xamarin.com/api/member/Xamarin.UITest.Configuration.iOSAppConfigurator.AppBundle/p/System.String/
所以我可能注定要完成这项任务,但也许有人知道解决方法?
您可以使用 InvokeUIA 来关闭 UITest 的系统对话框。以下测试通过点击 iOS 系统警报的“确定”按钮进行:
[Test]
public void AppLaunches ()
{
app.Screenshot ("First screen.");
app.InvokeUia ("uia.query('[:view {:marked \"OK\"}]')");
app.InvokeUia ("uia.tapMark(\"OK\")");
}
一个工作示例应用程序和 UITest 也在这里:https://github.com/King-of-Spades/InvokeUia-for-System-Dialogs https://github.com/King-of-Spades/InvokeUia-for-System-Dialogs
有关 Test Cloud 中系统对话框的警告
您在 Test Cloud 中没有看到此问题的原因是 Test Cloud 自动消除系统警报;所以通常你不必担心它。但是,如果您的警报启动得太早;因此它会在自动化完全启动您的应用程序之前出现,然后它将无法检测并消除警报并导致您的测试失败。
因此,您需要确保在测试云中运行应用程序时,权限请求会被延迟,或者如果特定测试没有明确需要它们,您甚至可以停用它们。此葫芦指南中提供了更多信息:https://github.com/calabash/calabash-ios/wiki/Managing-Privacy-Alerts%3A--Location-Services%2C-APNS%2C-Contacts https://github.com/calabash/calabash-ios/wiki/Managing-Privacy-Alerts%3A--Location-Services%2C-APNS%2C-Contacts
(即使它是 Calabash,您也可以在 UITest 中使用相同的策略;尽管使用的是 C# 语法。)
Xcode 8 / iOS 10 更新
Xcode 8 / iOS 10 删除了 UIAutomation,因此只有在使用 Xcode 7 和 iOS 7-9 时才能继续使用 InvokeUIA 解决方法。参考:
- UITest: https://developer.xamarin.com/guides/testcloud/UITest/xcode7/ https://developer.xamarin.com/guides/testcloud/UITest/xcode7/
- 蠡:https://developer.xamarin.com/guides/testcloud/calabash/xcode7/#Automation_API https://developer.xamarin.com/guides/testcloud/calabash/xcode7/#Automation_API
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)