【问题标题】:XCUI Test fails due to MBProgressHud由于 MBProgressHud,XCUI 测试失败
【发布时间】:2019-02-06 17:06:15
【问题描述】:

我正在视图控制器上运行 XCUI 测试。每次初始化视图时,都会进行一次 api 调用并显示 MBProgressHud。我的测试要求搜索一个按钮并点击它,但是我无法点击,因为显示了重叠的 MBProgressHud,而且 api 没有收到显示按钮所需的响应。这导致了测试失败。

我的问题是我做错了什么。

  1. 我们能否在我们的 ui 测试中包含此类场景(如 api 调用)?
  2. 如何等待api调用完成才能继续我们的ui测试?

【问题讨论】:

    标签: ios xcuitest


    【解决方案1】:

    是的。我们可以将这些场景包含在我们的 ui 测试中。这是我们需要等待ui元素出现的函数:

    func waitForElementToAppear(_ element: XCUIElement) -> XCUIElement? {
        let predicate = NSPredicate(format: "exists == true")
        let expectation = XCTNSPredicateExpectation(predicate: predicate,
                                                    object: element)
    
        let result = XCTWaiter().wait(for: [expectation], timeout: 10)
        if result == .completed {
            return element
        }
    
        return nil
    }
    

    这个函数会等待api调用完成,需要ui元素出现。

    【讨论】:

    • 我们在自动化套件中大量使用了类似的 API。然而,创建谓词并等待它是一项繁重的操作。为了优化这个 API 所花费的时间,我们首先检查一次 element.exists 是否为真,立即返回。否则继续等待谓词。这个简单的改变为我们节省了很多时间。
    【解决方案2】:

    您可以使用,而且效果很好。

    func waitForExistence(timeout: TimeInterval) -> Bool
    

    https://developer.apple.com/documentation/xctest/xcuielement/2879412-waitforexistence

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2022-06-14
      • 2020-01-16
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多