所以我试图在我的React Native项目上运行XCode UI测试。我的目标是使用fastlane / snapshot来抓取我应用的截图。
我终于想出了如何编写我的应用程序脚本以执行我想要的操作。不幸的是,在调用App failed to quiesce within 60s
后,应用会遇到app.otherElements["mainButton"].tap()
消息。
据我所知,作为一个人,我的应用似乎是静态的,没有更新或动画任何东西。但我不清楚UI测试用于检测启发式的内容,因此它可能使用一些内部状态或检查线程。
我怀疑有一些React Native行为会阻止UI测试看到事情已经完成。遗憾的是,如果没有任何真正的能力来查看UI测试正在做什么,我甚至不确定我需要深入研究React Native来修复它。 :(
任何帮助将不胜感激!
答案 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对我来说真的很有帮助