web-dev-qa-db-ja.com

iOS 13 UIテストでUIActivityViewControllerのボタンにアクセスするとクラッシュする

UIActivityViewControllerのボタンを探すとクラッシュする、iOS 13シミュレータまたはデバイスをターゲットとするXcode 11でXcode UIテストを実行するときに問題が発生している人はいますか?

UIActivityViewControllerに表示されるボタンを確認する複数のUIテストがあります。彼らは期待されるセットアップ作業を行い、次のようなボタンを探します:

_XCTAssertTrue(app.buttons["Copy"].exists)
_

テストはiOS 10、11、12で正常に実行されました。iOS13シミュレーターまたはデバイスで同じテストを実行しようとすると、コードがapp.buttonsにアクセスしようとすると実行が停止し、_Thread 1: signal SIGABRT_の後にapp.buttonsにアクセスしようとする行でFailed to get matching snapshots: Lost connection to the application (pid 33047).が続きます。

待機を追加したり、古い学校の睡眠を追加したりしても、何も起こりません。運の悪い要素を見つけるために、XCUIElementTypeQueryProviderにぶら下がっている他のクエリのいくつかを調べてみました。

テストをデバッグし、テストがapp.buttonsにアクセスする前にブレークポイントを設定し、その内容を印刷しようとすると、別のエラーメッセージが表示されます。

_po app.buttons
    t =    49.37s Requesting snapshot of accessibility hierarchy for app with pid 37576
expression produced error: error: /var/folders/f2/zhwz28mn1hd815pc78kg02q80000gp/T/expr5-3b2971..Swift:1:72: error: 'XCUIElementQuery' is not a member type of 'XCTest'
Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer<XCTest.XCUIElementQuery>(bitPattern: 0x10c73f4d0)!.pointee)
_

これは確かにXcodeのバグのように感じられます。他の誰かがこれに遭遇しましたか?

誰か他の人が試してみたい場合のコードを次に示します。

ビューコントローラーから:

_@IBAction func showPressed(_ sender: Any) {
    let text = "I have something to share."

    let vc = UIActivityViewController(activityItems: [text], applicationActivities: nil)
    vc.popoverPresentationController?.sourceView = self.view

    self.present(vc, animated: true, completion: nil)
}
_

UIテスト:

_func testActivityViewController() {
    let app = XCUIApplication()
    app.launch()

    app.buttons["Show AVC"].tap()

    let buttons = app.buttons
    let copy = buttons["Copy"]
    sleep(2) // Just keeping things simple for the example.

    XCTAssertTrue(copy.exists)
}
_
6
Mattio

これが修正されたバージョンは正確にはわかりませんが、UI要素はXcodeバージョン11.2.1(11B500)とは少し異なる構成で使用できます。 UIActivityViewControllerから[コピー]ボタンにアクセスする方法は次のとおりです。

XCUIApplication().otherElements["ActivityListView"].cells.containing(.label(equals: "Copy")).firstMatch

OtherElementsセレクターのHTを https://stackoverflow.com/a/48450562/19626 に変更します。

閉じる/キャンセルボタンも移動しました。ここで私はそれを見つけました:

XCUIApplication().otherElements["ActivityListView"].buttons["Close"].tap()
0
Mattio