Xamarin.UITest无法联系在应用程序中运行的测试后端

时间:2019-02-13 08:40:15

标签: ios xamarin xamarin.forms visual-studio-mac xamarin.uitest

我正在尝试使用Xamarin.UITest测试我的Xamarin.Forms应用。 Android工作正常,但iOS部分有问题。在执行我的第一个测试以进入REPL时,出现以下错误:

SetUp : System.Exception : Unable to contact test backend running in app. A common cause is that the app is not properly linked with Calabash. Please verify that it includes the Calabash component.

奇怪的是,将应用程序上载到Microsoft App Center时,它会开始测试。它挂起是因为找不到我的工具栏项目。我想通过在Mac上进行iOS测试来使用REPL检查有效查询,而我通常在Windows上的Visual Studio上工作。

我没有运气就尝试了在线找到的解决方案

  • 我的.iOS项目包括Xamarin.TestCloud.Agent
  • 在AppDelegate.cs中,我在global :: Xamarin.Forms.Forms.Init()之后直接拥有Xamarin.Calabash.Start()。
  • 我在UITest项目中有NUnit 2.6.4和NUnitTestAdapter 2.1.1
  • 我正在使用我的Debug / IPhoneSimulator配置

我正在从连接到Mac的Windows上的Visual Studio编译.app文件,然后在Mac上启动iOS测试。

这是我当前的AppInitializer代码:

return ConfigureApp.iOS.AppBundle(sPathToiOS).PreferIdeSettings().StartApp();

有时我还会收到其他错误:

SetUp : Xamarin.UITest.XDB.Exceptions.DeviceAgentException : Unable to contact DeviceAgent
  ----> System.AggregateException : One or more errors occurred.
  ----> Xamarin.UITest.XDB.Exceptions.DeviceAgentException : Unable to contact DeviceAgent on 127.0.0.1
  ----> System.Net.Http.HttpRequestException : An error occurred while sending the request
  ----> System.Net.WebException : Error: ConnectFailure (Connection refused)
  ----> System.Net.Sockets.SocketException : Connection refused

这似乎是在启动测试时模拟器未运行且启动模拟器需要很长时间的情况下发生的。

4 个答案:

答案 0 :(得分:1)

就我而言,在运行Xamarin.UITest时,我的Xamarin.iOS解决方案的构建中未包含Calabash。

我已按照以下documentation解决了我的问题:

  • 在Xamarin.iOS项目中添加Xamarin.TestCloud.Agent
  • 在AppDelegate.cs文件中启动Xamarin.Calabash.Start()

答案 1 :(得分:0)

因此,如果有人像我一样遇到类似问题并遇到以下问题:我的解决方案是将物理设备连接到Mac并在其上运行UI-Test。请记住,您必须在设备上的开发人员设置中激活UIAutomation。现在,我可以毫无问题地运行测试了。

答案 2 :(得分:0)

我必须确保已将应用程序重新部署到要测试的模拟器上,并已完成所有必要步骤。

我发生的具体情况是我将Xamarin.Calabash.Start()添加到了AppDelegate.cs文件中,但是我必须确保重新部署到模拟器(在我的情况下,仅以调试模式启动应用程序),退出,然后启动UI测试。

这将确保模拟器上具有正确的应用程序版本。这是在模拟器上进行测试的唯一方法。在运行测试之前,它不会为您部署应用。

答案 3 :(得分:0)

就我而言,Xamarin.Calabash.Start() 在未执行的预处理器指令 (#if TEST) 下。只要确保指令到位即可解决问题