我正在使用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位可能有帮助,但没有帮助。除此之外,我尝试对坐标进行硬编码,并使用float
s而不是double
s,但这两种尝试都不起作用。
那里发生了什么,如何修复?
这是我的设置:
- 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;