如何使用系统提供的控制器进行UI测试工作流程

时间:2018-08-17 07:33:32

标签: xcode xcode-ui-testing

我想通过UI测试一个应用工作流程,该工作流程除其他外还调用UIDocumentPickerViewController。我试图在Xcode中记录此工作流程,但是当我到达此控制器时,我收到一条错误消息,说

  

时间戳事件匹配错误:找不到匹配的元素

在这种情况下,我有办法传递此类控制器或对其进行模拟吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的麻烦。我的解决方法:

在您的UI测试中放置一个断点,当文件选择器位于前台时会命中该断点。

样本测试:

    func testBlah() {
        let app = XCUIApplication()
        // The next 2 lines interact with my app to cause it to pop up the file picker.
        // These will be different for your app :)
        app.navigationBars["Dashboard"].buttons["download"].tap()
        app.staticTexts["Browse"].tap()
        sleep(3) // Can place breakpoint here for example
    }

一旦遇到断点,请在调试器的右窗格中输入po app(将app对象的名称替换为XCUIApplication)来查看视图的层次结构:

(lldb) po app
    t =   193.67s Snapshot accessibility hierarchy for app with pid 941
    t =   194.22s Snapshot accessibility hierarchy for app with pid 941
Attributes: Application, pid: 941, label: 'Redacted'
Element subtree:
 →Application, 0x2814fdea0, pid: 941, label: 'Redacted'
    Window (Main), 0x2814fe4c0, {{0.0, 0.0}, {375.0, 667.0}}
      Other, 0x2814fe3e0, {{0.0, 0.0}, {375.0, 667.0}}

狙击

Cell, 0x2814f42a0, {{257.0, 131.0}, {90.0, 175.0}}, identifier: 'Waterfall Loop Trail, xml', label: 'Waterfall Loop Trail, xml, 9/16/19, 42 KB'
Cell, 0x2814f4380, {{28.0, 321.0}, {90.0, 175.0}}, identifier: 'Waterfall Loop Trail, gpx', label: 'Waterfall Loop Trail, gpx, 9/16/19, 42 KB'

由于我正在尝试点击Waterfall Loop Trail, gpx,因此现在可以执行以下操作: app.cells["Waterfall Loop Trail, gpx"].tap()

我想我可以使用类似的策略来与该屏幕上的其他元素进行交互。令人讨厌的是Xcode似乎在记录器中不支持它。