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

时间:2016-08-05 04:28:50

标签: 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测试看到事情已经完成。遗憾的是,如果没有任何真正的能力来查看UI测试正在做什么,我甚至不确定我需要深入研究React Native来修复它。 :(

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

上面链接的解决方法 对于有问题的视图和在

中禁用动画的行
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并设置变量。然后在你的setup方法中调用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对我来说真的很有帮助