我正在使用Xamarin.UITest在Android和iOS上测试Xamarin Forms应用程序。由于应用程序取决于GPS位置,因此我需要设置一个虚假位置。我使用
App.Device.SetLocation(latitude, longitude)
...其中latitude
和longitude
是包含所需坐标的double类型变量。
这在Android上工作正常,但在iPhone Simulator上失败,但以下情况除外:
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
而不是double
s,但是都没有成功。
那里发生了什么,如何解决?
这是我的设置:
几个月前,使用以下设置发生了相同的问题:
当时,我只是不理会它,但是现在是我需要修复的时候了。
答案 0 :(得分:1)
Expected lat,lng: Got 48,135831,11,573423
这似乎是一个错误,因为Xamarin在将它们发送到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;