Erreur de correspondance d'événement horodaté: impossible de trouver l'élément correspondant

94

J'essaye de générer un UItest dans Xcode. Lorsque j'essaye de faire glisser UIview, j'obtiens une erreur:

Timestamped Event Matching Error: Failed to find matching element

fenêtre d'erreur

entrez la description de l'image ici

Cela se produit également si j'essaie d'appuyer sur UIView.

shay
la source
Pouvez-vous expliquer un peu plus?
Dieter Meemken
J'essaie de faire glisser ou d'appuyer sur UIview qui suppose de faire quelque chose (a un reconiseur de geste) mais lorsque je fais le geste, cette erreur se produit. la seule façon dont j'ai réussi à le faire fonctionner est avec des requêtes, mais c'est vraiment compliqué et je suis sûr qu'il existe un autre moyen
shay

Réponses:

47

Vous devez vérifier que l'option 'Accessibilité' est activée pour l'objet UIView à partir duquel vous effectuez le balayage, par exemple:

entrez la description de l'image ici

AmitW
la source
1
L'activation de l'accessibilité pour une WebView a fait échouer mes tests lors de la résolution de texte dans WebView. La désactivation de l'accessibilité pour l'UIView hébergeant WebView a permis de réussir les tests. Alors méfiez-vous.
askielboe
1
Comme autre point pour que cela fonctionne pour moi, je devais lui donner une étiquette
Sean Lintern
J'ai trouvé cet article utile pour fastlaneprendre des captures d'écran d'une tableView. stackoverflow.com/a/39331154/4475605
Adrian
Où est-ce? Comment définir cela?
Cory McAboy
@CoryMcAboy, vous pouvez le définir à partir du code pour votre vue personnalisée:isAccessibilityElement = true
Gleb Tarasov
14

Ce problème survient généralement lorsque l'élément parent de l'élément que vous souhaitez enregistrer est défini sur isAccessibilityElement = true. En général, vous devez définir l'élément parent sur false pour accéder à l'élément enfant. Par exemple: si vous avez un UILabel dans une vue, l'accessibilité doit être définie sur false pour la vue et sur true pour l'UILabel.

Souma Paul
la source
1
C'était exactement reproductible. Comme vous l'avez dit, cela ne fonctionne pas de l'élément parent est défini sur isAccessibilityElement = true! Après que je l'ai remis à faux, cela a fonctionné à nouveau.
pommes
3

Dans Xcode 9.3, où cela pose apparemment toujours un problème, ce que j'ai fait était:

  • Quitter Xcode
  • Réinitialisez les paramètres du simulateur (Matériel -> Effacer tout le contenu et les paramètres)
  • Quittez le simulateur
  • Supprimer les données dérivées de l'application actuelle
  • Redémarrez Xcode
  • Essayez à nouveau d'enregistrer - cela a fonctionné cette fois pour moi.
commanda
la source
J'ai fourni l'identifiant comme "skipButton" pour un bouton et sur le bouton d'identification, il utilise toujours pour échouer, j'identifie le bouton comme app.buttons ["skipButton '], apprécions votre aide
Sujit Baranwal
Ces étapes n'ont pas fonctionné pour moi. En fait, les widgets qui n'étaient pas auparavant affectés par le problème ont été affectés.
Geoff S
pourquoi cela n'a-t-il pas de contenu?
corbeau le
2

Pour enregistrer un nouveau test, je ne pense pas qu'il y ait encore de solution. Mais, si vous utilisez une extension forçant le robinet avec un test qui existe déjà, fonctionne.

Exemple d'utilisation:

extension XCUIElement {

    func forceTapElement() {
        if self.hittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
            coordinate.tap()
        }  
    }
}

func testSomethingWithCells() {

   let app = XCUIApplication()
   let cells = app.tables.cells
   sleep(1)
   cells.elementBoundByIndex(0).forceTapElement()
}

Vous pouvez vérifier le message original ici:

Test de l'interface utilisateur Xcode - Échec du test de l'interface utilisateur - Échec du défilement vers visible (par action AX) lorsque vous appuyez sur le bouton "Annuler" du champ de recherche

Sophy Swicz
la source
elementBoundByIndex 'a été renommé' element (boundBy :) ', Par exemple: cells.element (boundBy: 0) .tap ()
Sujananth
2

J'ai parfois rencontré ce problème. Supprimer le répertoire de l'application de DerivedData semble aider.

Dave L
la source
1

Une solution qui a fonctionné pour moi était d'identifier l'objet différemment.
Dans Xcode 8, j'ai pu utiliser les éléments suivants:

XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()

Avec Xcode 9, j'ai l'erreur mentionnée dans cette question. J'ai fini par utiliser ce qui suit, qui a fonctionné (bien que plus floconneux que l'option d'origine)

XCUIApplication().cells.element(boundBy: 1).tap()
Charlie Seligman
la source
@Developer dans votre fonction de test
Huy-Anh Hoang