"App failed to quiesce within 60s"在 React-Native 项目中

"App failed to quiesce within 60s"in React-Native project

所以我正在尝试 运行 对我的 React Native 项目进行 XCode UI 测试。我的目标是使用 fastlane/snapshot 抓取我的应用程序的屏幕截图。

我终于想出了如何编写我的应用程序脚本来做我想做的事。不幸的是,应用程序在调用 app.otherElements["mainButton"].tap().

后卡住了 App failed to quiesce within 60s 消息

据我所知,我的应用程序似乎是静态的,没有更新或动画化任何东西。但我不清楚 UI 测试用于其检测启发式的是什么,因此它可能正在使用一些内部状态或检查线程。

我怀疑有一些 React Native 行为使 UI 测试无法将事情视为已完成。不幸的是,没有任何真正的能力来查看 UI 测试在做什么,我什至不确定我需要在哪里深入研究 React Native 来修复它。 :(

如有任何帮助,我们将不胜感激!

上面 link 的解决方法 对于有问题的视图和禁用动画的行

viewWillAppear:
- (void) viewWillAppear: (BOOL)animated {  
    if ([[[NSProcessInfo processInfo] environment][@"UITEST_DISABLE_ANIMATIONS"] isEqualToString:@"YES"]) {  
        [UIView setAnimationsEnabled:NO];  
    }  
}  

并在 viewWillDisappear 中重新打开动画:

- (void) viewWillDisappear:(BOOL)animated {  
    if ([[[NSProcessInfo processInfo] environment][@"UITEST_DISABLE_ANIMATIONS"] isEqualToString:@"YES"]) {  
        [UIView setAnimationsEnabled:YES];  
    }  
}  

在您的测试中扩展 XCUIApplication 并设置变量。然后在你的设置方法中调用 launchvariables 函数

extension XCUIApplication {  
    func launchTestsWithEnvironmentVariables() {  
             launchEnvironment = [  
                 "UITEST_DISABLE_ANIMATIONS" : "YES"  
             ]  
     self.launch()  
    }  
}  




 override func setUp() {  
        super.setUp()  
        continueAfterFailure = false  
        XCUIApplication().launchTestsWithEnvironmentVariables()  
    }  




func testblahblah {  

这将设置一个环境变量,该变量将禁用该特定视图的动画。唯一的缺点是,如果您喜欢的话,您将不会为该视图测试动画。 Hacky 解决方法,但目前有效。

PS 对我很有帮助