web-dev-qa-db-fra.com

L'accès aux boutons d'un UIActivityViewController dans un test d'interface utilisateur iOS 13 provoque un blocage

Quelqu'un d'autre a-t-il des problèmes lors de l'exécution des tests Xcode UI avec Xcode 11 ciblant un simulateur ou un appareil iOS 13 où la recherche des boutons sur UIActivityViewController provoque un crash?

J'ai plusieurs tests d'interface utilisateur qui vérifient les boutons qui apparaissent dans un UIActivityViewController. Ils font le travail de configuration attendu et recherchent ensuite le bouton avec quelque chose comme:

XCTAssertTrue(app.buttons["Copy"].exists)

Les tests ont bien fonctionné iOS 10, 11 et 12. Si j'essaie d'exécuter le même test sur un simulateur ou un appareil iOS 13, au moment où le code tente d'accéder aux boutons app.buttons, l'exécution s'arrête et je reçois un Thread 1: signal SIGABRT Suivi de Failed to get matching snapshots: Lost connection to the application (pid 33047). sur la ligne où j'essaie d'accéder à app.buttons.

Ajouter une attente ou même un sommeil à l'ancienne ne fait rien. J'ai essayé de fouiller certaines des autres requêtes suspendues à XCUIElementTypeQueryProvider pour trouver les éléments sans succès.

Si je débogue le test et que je mets un point d'arrêt avant que le test n'accède à app.buttons et que j'essaie d'imprimer ce qu'il contient, j'obtiens un message d'erreur différent.

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)

Cela ressemble à un bogue Xcode. Quelqu'un d'autre a-t-il rencontré cela?

Voici un peu de code si quelqu'un d'autre veut l'essayer.

Depuis un contrôleur de vue:

@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)
}

Le test de l'interface utilisateur:

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

Je ne sais pas exactement dans quelle version cela a été corrigé, mais les éléments de l'interface utilisateur sont disponibles dans une configuration légèrement différente à partir de la version Xcode 11.2.1 (11B500). Voici comment vous pouvez accéder au bouton Copier depuis UIActivityViewController maintenant:

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

HT à https://stackoverflow.com/a/48450562/19626 pour le sélecteur otherElements.

Le bouton de fermeture/annulation s'est également déplacé. Voici où je l'ai trouvé:

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