XCTestCase:等待应用程序空闲

时间:2015-11-10 07:12:29

标签: ios xcode7 xcode-ui-testing xctestcase

我的UI测试失败,因为测试等待无休止,直到应用程序闲置。我无法看到背景中发生了任何事情,比如加载微调器。

它只出现在一个标签上。所有其他选项卡都是可点击的,但测试在屏幕3上失败。我在屏幕3上捕获测试后点击另一个选项卡,测试恢复并成功完成。

有什么想法吗?

- (void)testExample
{

    XCUIElementQuery* tabBarsQuery = self.app.tabBars;

    [tabBarsQuery.buttons[@"Screen2"] tap];
    [tabBarsQuery.buttons[@"Screen3"] tap];
    [tabBarsQuery.buttons[@"Screen1"] tap];
    [tabBarsQuery.buttons[@"Screen4"] tap];

}

2 个答案:

答案 0 :(得分:8)

也许您有一些动画或其他一些背景(或前景)活动可以经常更新主线程上的UI。这导致应用程序永远不会“静止”#34; - 至少在这个标签上。在我们的应用程序中,我们使用UIView动画选项Repeat。 CPU使用情况很好并且没有电池耗尽,但它每次都会使测试失败。禁用动画修复了问题。我无法找到一种方法来强制测试不要等待空闲,所以我们最终使用#ifdef禁用动画用于UI测试目标,使用运行时参数,如下所述:{ {3}}

答案 1 :(得分:0)

let tabBarsQuery = self.app.tabBars
let button = tabBarsQuery.buttons[@"Screen2"]

在编写UI测试用例时,系统需要花费一些时间使其可命中,因此我们正在为其创建谓词并等待按钮。

let predicate = NSPredicate(format: "isHittable == 1") expectation(for: 
predicate, evaluatedWith: button, handler: nil)
waitForExpectations(timeout:10, handler: nil)
button.tap()