Xamarin UITest "Unable to set fake location on iOS Simulator"



我正在使用Xamarin.UITest在Android和iOS上测试Xamarin Forms应用程序。由于该应用程序依赖于GPS位置,我需要设置一个假位置。我使用

App.Device.SetLocation(latitude, longitude)

其中CCD_ 1和CCD_。

这在Android上运行良好,但在iPhone模拟器上失败,以下例外:

SetUp : Xamarin.UITest.XDB.Exceptions.DeviceAgentException : Unable to set location
ExitCode: 4
-d,--device-id  <device-identifier> iOS Simulator GUID or 40-digit physical device ID
set-location <latitude,longitude>
Expected lat,lng: Got 48,135831,11,573423

我做了一些研究,在Xamarin论坛上发现了一个帖子,上面说把假坐标四舍五入到小数点后只有4位可能有帮助,但没有帮助。除此之外,我尝试对坐标进行硬编码,并使用floats而不是doubles,但这两种尝试都不起作用。

那里发生了什么,如何修复?

这是我的设置:

  • Xamarin.UI测试版本2.2.4
  • 在iPhone 6上运行iOS 9.3的iOS模拟器
  • 主机:Mac mini运行MacOS High Sierra 10.13.6

几个月前,以下设置也出现了同样的问题:

  • Xamarin.UI测试版本2.2.1
  • 在iPhone X上运行iOS 11.2的iOS模拟器
  • 主机:运行MacOS High Sierra的Mac Mini(10.13.3(

当时,我只是把它放在一边,但现在是我需要修复的时候了。

Expected lat,lng: Got 48,135831,11,573423

这似乎是一个错误,因为Xamarin在将这些double发送到simctl时使用您的本地语言环境将其转换为字符串(simctl需要基于小数点的字符串引用的小数,因此它正在解析这是4个独立的数字(。

在设置位置之前的测试代码中,将区域性更改为en-US,如果需要,稍后将其设置回实际区域性。

像这样的东西应该起作用:

var currentCulture = CultureInfo.DefaultThreadCurrentCulture;
CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-US");"
// do some location setting / testing
CultureInfo.DefaultThreadCurrentCulture = currentCulture;

最新更新