6

そのため、React Native プロジェクトで XCode UI テストを実行しようとしています。私の目標は、fastlane/snapshot を使用してアプリのスクリーンショットを取得することです。

私は最終的に、自分のアプリをスクリプト化して、自分のやりたいことを実行する方法を見つけました。残念ながら、アプリはApp failed to quiesce within 60sを呼び出した後、メッセージでスタックしますapp.otherElements["mainButton"].tap()

私が人間として知る限り、私のアプリは静的で、何も更新もアニメーション化もしていないように見えます。しかし、UI テストが検出ヒューリスティックに何を使用しているかは明確ではないため、何らかの内部状態またはチェック スレッドを使用している可能性があります。

UI テストが完了したと見なされないようにする React Native の動作があるのではないかと思います。残念ながら、UI テストが何を行っているかを実際に確認する能力がないため、修正するために React Native を掘り下げる必要があるかどうかさえわかりません。:(

どんな助けでも大歓迎です!

4

1 に答える 1

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 {  

これにより、その特定のビューのアニメーションを無効にする環境変数が設定されます。唯一の欠点は、そのビューのアニメーションをテストしないことです。ハックな回避策ですが、今のところ機能します。

PS 本当にお世話になりました

于 2016-09-04T14:22:22.293 に答える