XCTestCase: Wait for app to idle

痞子三分冷 提交于 2019-12-04 08:41:17

问题


My UI-test fails because the test waits endless until the app idles. I can not see that there is anything happening in the background, like a loading spinner.

It just occurs on one tab. All others tabs are tapable but the test fails on Screen 3. I I click on another tab after the test is caught on Screen 3 the test resumes and finishes successfully.

Any ideas?

- (void)testExample
{

    XCUIElementQuery* tabBarsQuery = self.app.tabBars;

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

}

回答1:


Perhaps you have some animation or some other background (or foreground) activity that updates your UI on the main thread frequently. This causes the app to never be "quiesce" - at least on this tab. In our application we had UIView animation with option Repeat. CPU usage was fine and it wasn't a battery drain, but it made the test fail every time. Disabling the animation fixed the issue. I couldn't find a way to force the test not to wait to be idle, so we ended up disabling the animation using #ifdef for the UI test target using runtime arguments as described here: https://stackoverflow.com/a/33466038/168996




回答2:


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

while writing UI test cases, system taking time to make it hittable so we are creating a predicate for it and waiting for the button.

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


来源:https://stackoverflow.com/questions/33624650/xctestcase-wait-for-app-to-idle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!