Test de l’interface utilisateur Xcode – Échec du test de l’interface – Échec de défilement jusqu’à visible (par action AX) lorsque vous tapez sur le bouton “Annuler” du champ de recherche

J’essaie de supprimer le champ de recherche en appuyant sur le bouton «Annuler» dans la barre de recherche.

Le cas de test ne parvient pas à trouver le bouton Annuler. Il fonctionnait bien dans Xcode 7.0.1

J’ai ajouté un prédicat pour attendre que le bouton apparaisse. Le cas de test échoue lorsque nous tapons sur le bouton “annuler”

let button = app.buttons[“Cancel”] let existsPredicate = NSPredicate(format: "exists == 1") expectationForPredicate(existsPredicate, evaluatedWithObject: button, handler: nil) waitForExpectationsWithTimeout(5, handler: nil) button.tap() // Failing here 

journaux :

  t = 7.21s Tap SearchField t = 7.21s Wait for app to idle t = 7.29s Find the SearchField t = 7.29s Snapshot accessibility hierarchy for com.test.mail t = 7.49s Find: Descendants matching type SearchField t = 7.49s Find: Element at index 0 t = 7.49s Wait for app to idle t = 7.55s Synthesize event t = 7.84s Wait for app to idle t = 8.97s Type '[email protected]' into t = 8.97s Wait for app to idle t = 9.03s Find the "Search" SearchField t = 9.03s Snapshot accessibility hierarchy for com.test.mail t = 9.35s Find: Descendants matching type SearchField t = 9.35s Find: Element at index 0 t = 9.36s Wait for app to idle t = 9.42s Synthesize event t = 10.37s Wait for app to idle t = 10.44s Check predicate `exists == 1` against object `"Cancel" Button` t = 10.44s Snapshot accessibility hierarchy for com.test.mail t = 10.58s Find: Descendants matching type Button t = 10.58s Find: Elements matching predicate '"Cancel" IN identifiers' t = 10.58s Tap "Cancel" Button t = 10.58s Wait for app to idle t = 10.64s Find the "Cancel" Button t = 10.64s Snapshot accessibility hierarchy for com.test.mail t = 10.78s Find: Descendants matching type Button t = 10.78s Find: Elements matching predicate '"Cancel" IN identifiers' t = 10.79s Wait for app to idle t = 11.08s Synthesize event t = 11.13s Scroll element to visible t = 11.14s Assertion Failure: UI Testing Failure - Failed to scroll to visible (by AX action) Button 0x7f7fcaebde40: traits: 8589934593, {{353.0, 26.0}, {53.0, 30.0}}, label: 'Cancel', error: Error -25204 performing AXAction 2003 

Je suppose que le bouton “Annuler” retourne false pour les propriétés hittable être hittable , ce qui l’empêche de taper.

Si vous voyez tap() dans la documentation, il dit

 /*! * Sends a tap event to a hittable point computed for the element. */ - (void)tap; 

Il semble que les choses soient cassées avec XCode 7.1. Pour me tenir (et vous aussi) débloqué de ces problèmes, j’ai écrit une extension sur XCUIElement qui permet de taper sur l’élément même s’il n’est pas hittable. La suite peut vous aider.

 /*Sends a tap event to a hittable/unhittable element.*/ extension XCUIElement { func forceTapElement() { if self.hittable { self.tap() } else { let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0)) coordinate.tap() } } } 

Maintenant, vous pouvez appeler comme

 button.forceTapElement() 

Mise à jour – Pour swift 3 utilisation suivante:

 extension XCUIElement { func forceTapElement() { if self.isHittable { self.tap() } else { let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.0, dy:0.0)) coordinate.tap() } } } 

Pour moi, la cause profonde était que les objects que je voulais exploiter

  • ont été définis sur caché (et retour)
  • ont été enlevés et re-attachés

Dans les deux cas, la propriété isAccessibilityElement était false par la suite. Le remettre à true corrigé.

S’il vous plaît vérifier le trait de l’élément, je faisais face au même problème avec TableViewSectionHeader, j’essayais d’appuyer, mais il échouait à chaque point

entrer la description de l'image ici

Dans mon cas, il y avait un élément d’interface utilisateur ajouté par programme couvrant le bouton.

Si vous utilisez le simulateur AppCenter pour exécuter les tests, vous devez vous assurer que vous exécutez les tests sur la même version de périphérique que votre simulateur local. J’ai perdu 3 jours de travail à cause de cela.