Xamarin UITest“无法在iOS模拟器上设置假位置”

时间:2018-07-27 13:27:43

标签: ios xamarin xamarin.forms xamarin.uitest

我正在使用Xamarin.UITest在Android和iOS上测试Xamarin Forms应用程序。由于应用程序取决于GPS位置,因此我需要设置一个虚假位置。我使用

App.Device.SetLocation(latitude, longitude)

...其中latitudelongitude是包含所需坐标的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,但是都没有成功。

那里发生了什么,如何解决?

这是我的设置:

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

几个月前,使用以下设置发生了相同的问题:

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

当时,我只是不理会它,但是现在是我需要修复的时候了。

1 个答案:

答案 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;