【问题标题】:iOS emulator location for UITesting用于 UITesting 的 iOS 模拟器位置
【发布时间】:2017-04-23 19:48:47
【问题描述】:

我正在尝试在持续集成服务器上运行我的 UITests(我正在使用 Bitrise)。因此,在我的一个 UITests 中,我有以下内容:

let myLocationPin = app.otherElements["My Location"]
        self.expectation(for: exists, evaluatedWith: myLocationPin, handler: nil)

        self.waitForExpectations(timeout: 20, handler: nil)

        expect(myLocationPin.exists).to(beTrue())
        expect(myLocationPin.isHittable).to(beTrue())
        myLocationPin.tap()

它在我的本地机器上运行良好,但是一旦在 CI 服务器上运行测试它就会失败。我发现失败的原因是运行测试的模拟器没有任何选定的位置。我试图添加一个 GPX 文件,但这也不起作用。有什么建议么 ?

【问题讨论】:

    标签: ios continuous-integration xcode-ui-testing ui-testing bitrise


    【解决方案1】:

    您是否在运行前从下拉列表中选择了本地计算机上的位置?

    如果是这种情况,那么您将无法使用图形 UI 在 bitrise 上执行此操作,但是可以根据方案选择位置。

    您可以按照此帖子在您的方案中设置位置: Automating Xcode' Debug > Simulate Location command

    更新:

    如果上述方法没有解决问题,另一种解决方案是:

    要更改模拟器本身的位置,您需要在 UITest 之前添加一个script 步骤,包括以下脚本:

    # download set-simulator-location
    brew install lyft/formulae/set-simulator-location
    
    # run simulator
    export IOS_SIMULATOR_UDID=`instruments -s devices | grep "iPhone 6 (10.3) \[" | awk -F '[ ]' '{print $4}' | awk -F '[\[]' '{print $2}' | sed 's/.$//'`
    echo $IOS_SIMULATOR_UDID
    open -a "simulator" --args -CurrentDeviceUDID $IOS_SIMULATOR_UDID
    
    # wait simulator to start fully
    sleep 15
    
    # set location
    set-simulator-location -q London
    

    不要忘记将iPhone 6 (10.3) 更改为您需要的模拟器,将London 更改为您自己的位置,使用-c 标志您也可以设置坐标。

    有关set-simulator-location的更多信息,请访问:set-simulator-location

    【讨论】:

    • 感谢您的回答。我已经尝试过建议的解决方案,但模拟器似乎不尊重所选的测试位置。
    • 显然使用xcodebuild时没有读取GPX文件:openradar.me/48748246。相反,lyft 解决方案似乎有效:)
    【解决方案2】:

    如果您想在模拟器中自定义位置,请选择模拟器并按照这两个步骤操作。

    改变位置

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2016-01-04
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2016-02-28
      • 2014-11-08
      相关资源
      最近更新 更多