1

私たちのアプリケーションでは、デバッグ ビルドに非表示のテスト画面があり、アプリケーションの状態を操作できます。いくつかの UI テスト (スナップショットスクリプトを含む) では、このテスト画面にアクセスする必要があります。これは、画面上の任意の場所を 2 本の指でトリプルタップすることによって行われます。

extension XXXTestCase {
    /// Performs a hidden gesture which presents the testing screen.
    func navigateToTestingScreen(file: StaticString = #file, line: UInt = #line) {
        app.navigationBars
            .element
            .tap(withNumberOfTaps: 3, numberOfTouches: 2)
        testingScreen.assertExists(file: file, line: line)
    }
}

これは Xcode 9.2 (および 11.2 シミュレーター) では正常に機能しましたが、Xcode 9.3 (11.3 シミュレーター) では.tapメソッドで次のランタイム エラーが発生します。

No element found at point {5, 42} while computing gesture coordinates, internal error possibly due to orientation or remote view hosting.

タップを just に変更することで、XCUIElement自体に問題がないことを確認しました.tap()。これにより、実行時エラーは発生しません。Xcode 9.3 の XCTest では、マルチタッチに問題があるようです。どうすればこれを修正できますか?

もちろん、サルのアプローチはジェスチャーを変更してテスト画面にアクセスすることですが、私はそれほど簡単にあきらめません:)

追加の実験

+-------+-----------+--------+
| Xcode | Simulator | Result |
+-------+-----------+--------+
|  9.2  |   11.2    |    v   | <-- not an option when migrated to Swift 4.1
|  9.3  |   11.3    |    X   |
|  9.3  |   11.2    |    X   | *
|  9.3  |   11.1    |    X   | *
|  9.3  |   11.0.1  |    X   | *
|  9.3  |   10.3.1  |    v   | <-- not an option, iOS 10 status bar is styled noticeably different
+-------+-----------+--------+

* この組み合わせは、次の場所でクラッシュします。

app.tabBars["main-tab-bar"].buttons["some-identifier"].tap() 

最も便利なフレーズでEXC_BAD_ACCESS。要素は存在しますが (シミュレータでクリックして手動で操作できます)、要素に送信tap()すると例外が発生します。

4

0 に答える 0