在React-Native项目中,"应用程序未能在60秒内停顿"

Mik*_*ert 6 ios react-native xcode-ui-testing fastlane fastlane-snapshot

所以我试图在我的React Native项目上运行XCode UI测试.我的目标是使用fastlane/snapshot来抓取我的应用的截图.

我终于想出了如何编写我的应用程序脚本来做我想要的.不幸的是,应用程序App failed to quiesce within 60s在调用后卡住了一条消息app.otherElements["mainButton"].tap().

据我所知,作为一个人,我的应用程序似乎是静态的,不会更新或动画任何东西.但我不清楚UI测试用于其检测启发式的内容,因此它可能使用一些内部状态或检查线程.

我怀疑有一些React Native行为会阻止UI Test看到事情已经完成.不幸的是,没有任何真正的能力来看看UI测试正在做什么,我甚至不确定我需要深入研究React Native来修复它.:(

任何帮助,将不胜感激!

小智 1

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

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

并在 viewWillDisappear 中重新打开动画:

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

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

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




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




func testblahblah {  
Run Code Online (Sandbox Code Playgroud)

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

PS这对我真的很有帮助