我在共享应用程序的iOS端运行我的Xamarin UItests时遇到一些问题。测试在Android上没有问题,但我得到了一个
当我尝试在iOS上运行它们时System.Exception
。
SetUp:System.Exception:此应用包无法在运行时生效 一个模拟器。要解决此问题,请确保您的目标设备 是一个模拟器。在物理设备上运行已安装的应用程序 你可以使用安装的应用程序(“ie.eoin.myapp”)
我尝试在模拟器上以及在具有相同异常的真实设备上运行测试。下面是堆栈跟踪的开始。
Xamarin.UITest.iOS.iOSAppLauncher.LaunchAppLocal(Xamarin.UITest.Configurati`enter code here`on.IiOSAppConfiguration appConfiguration, Xamarin.UITest.Shared.Http.HttpClient httpClient, System.Boolean clearAppData) [0x0008a] in <b034e37336b84a95a2482a0c5f0be621>:0
at Xamarin.UITest.iOS.iOSAppLauncher.LaunchApp (Xamarin.UITest.Configuration.IiOSAppConfiguration appConfiguration, Xamarin.UITest.Shared.Http.HttpClient httpClient, Xamarin.UITest.TestCloud.TestCloudiOSAppConfiguration testCloudAppConfiguration, Xamarin.UITest.Shared.Http.HttpClient testCloudWsClient, Xamarin.UITest.Shared.Http.HttpClient xtcServicesClient, System.Boolean testCloudUseDeviceAgent) [0x0007a] in <b034e37336b84a95a2482a0c5f0be621>:0
at Xamarin.UITest.iOS.iOSApp..ctor (Xamarin.UITest.Configuration.IiOSAppConfiguration appConfiguration) [0x00302] in <b034e37336b84a95a2482a0c5f0be621>:0
at Xamarin.UITest.Configuration.iOSAppConfigurator.StartApp (Xamarin.UITest.Configuration.AppDataMode appDataMode) [0x00017] in <b034e37336b84a95a2482a0c5f0be621>:0
at Shared.UITest.AppInitializer.StartApp () [0x00036] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/AppInitializer.cs:23
at Shared.UITest.Common.SetUp () [0x00002] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/Common.cs:17
at Shared.UITests.MapScreensTests.SetUp () [0x00002] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/MapScreens/MapScreensTests.cs:16
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in /private/tmp/source-mono-4.6.0/bockbuild-mono-4.6.0-branch/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/corlib/System.Reflection/MonoMethod.cs:305
在startApp()
类的AppInitializer
方法中,路径指向bin目录中的正确.app
文件。
public static IApp StartApp()
{
switch (TestEnvironment.Platform)
{
case TestPlatform.Local:
#if __IOS__
platform = Platform.iOS;
return ConfigureApp
.iOS
.AppBundle(GetLocalIOSTestAppPath()) .StartApp(Xamarin.UITest.Configuration.AppDataMode.Clear) as IApp;
#endif
}
我不确定为什么测试不会运行。我尝试过更改为实际的设备。此外,.app
文件看起来像停车标志中的符号作为其图标。不确定这意味着什么。我会看看接下来意味着什么,但是现在我很难过。任何帮助表示赞赏。严重困在这里。
答案 0 :(得分:0)
你解决了这个问题吗? 正如假设:也许您需要使用.ipa文件而不是.app
答案 1 :(得分:0)
希望您已经解决了这个问题,但是对于发现此问题的其他人: iOS对于真实设备与模拟器的配置非常挑剔。 This bit of the docs应该可以为您提供帮助,但总而言之:
对于真实设备,您的应用配置应如下所示:
IApp app = ConfigureApp
.iOS
.InstalledApp("your.app.name")
.StartApp();
如果您使用已安装的应用程序,则必须先在设备上安装该应用程序,然后才能尝试运行测试。
对于模拟器设备,您的应用配置应如下所示:
IApp app = ConfigureApp
.iOS
.AppBundle("your.app.bundle")
.StartApp();
在撰写本文时,还有InstalledApp
“配置已安装的应用程序使用。将强制在物理设备上运行。”而AppBundle
“配置应用程序捆绑使用。将强制在模拟器上运行。”这些区别似乎是iOS独有的。在Android上的行为有所不同。
还有两个其他应用程序配置设置可能在此处适用:DeviceIdentifier
和PreferIdeSettings
。您可以使用“设备标识符”指定要在哪个设备上运行,但要注意的是,模拟器和设备在不同的计算机上都具有不同的ID,因此请谨慎检查该配置。PreferIdeSettings应该允许您将Visual Studio用于Mac设备定位-请参阅测试布局,单元测试板和测试应用程序。配置正确后,您将同时看到一个ios和android项目,并且目标显示类似Virtual Device / my_android_emulator (API 28)
或Device / Your iPhone
的内容。