Zeitstempel-Ereignis-Übereinstimmungsfehler: Übereinstimmendes Element konnte nicht gefunden werden


93

Ich versuche, einen UI-Test in Xcode zu generieren. Wenn ich versuche, UIview zu wischen, wird eine Fehlermeldung angezeigt:

Timestamped Event Matching Error: Failed to find matching element

Fehlerfenster

Geben Sie hier die Bildbeschreibung ein

Dies passiert auch, wenn ich versuche, auf UIView zu tippen.


Können Sie uns etwas mehr erklären?
Dieter Meemken

Ich versuche, über UIview zu wischen oder zu tippen, die etwas tun sollen (hat Gesten-Reconizer), aber wenn ich die Geste mache, tritt dieser Fehler auf. Die einzige Möglichkeit, es zum Laufen zu bringen, sind Abfragen, aber es ist wirklich kompliziert und ich bin mir sicher, dass es einen anderen Weg gibt
shay

Antworten:


47

Sie sollten sicherstellen, dass die Option "Eingabehilfen" für das UIView-Objekt aktiviert ist, von dem Sie wischen. Beispiel:

Geben Sie hier die Bildbeschreibung ein


1
Durch Aktivieren der Barrierefreiheit für ein WebView sind meine Tests beim Auflösen von Text in WebView fehlgeschlagen. Durch Deaktivieren der Barrierefreiheit für das UIView, in dem das WebView gehostet wird, waren die Tests erfolgreich. Hüte dich.
Askielboe

1
Als ein weiterer Punkt, damit es für mich funktioniert, musste ich ihm ein Etikett geben
Sean Lintern

Ich fand diesen Beitrag hilfreich fastlane, um Screenshots einer tableView zu machen. stackoverflow.com/a/39331154/4475605
Adrian

Wo ist das? Wie stelle ich das ein?
Cory McAboy

@CoryMcAboy Sie können es aus Code für Ihre benutzerdefinierte Ansicht festlegen:isAccessibilityElement = true
Gleb Tarasov

14

Normalerweise tritt dieses Problem auf, wenn das übergeordnete Element des Elements, das Sie aufzeichnen möchten, auf isAccessibilityElement = true festgelegt ist. Im Allgemeinen muss das übergeordnete Element auf false gesetzt sein, um auf das untergeordnete Element zugreifen zu können. Beispiel: Wenn Sie ein UILabel in einer Ansicht haben, sollte die Barrierefreiheit für die Ansicht auf false und für das UILabel auf true festgelegt werden.


1
Dies war genau reproduzierbar. Wie Sie sagten, funktioniert es nicht, wenn das übergeordnete Element auf isAccessibilityElement = true gesetzt ist! Nachdem ich es wieder auf false gestellt hatte, funktionierte es wieder.
Pommes

3

In Xcode 9.3, wo dies anscheinend immer noch ein Problem ist, habe ich Folgendes getan:

  • Beenden Sie Xcode
  • Setzen Sie die Einstellungen des Simulators zurück (Hardware -> Alle Inhalte und Einstellungen löschen)
  • Beenden Sie den Simulator
  • Löschen Sie die abgeleiteten Daten für die aktuelle App
  • Starten Sie Xcode neu
  • Versuchen Sie es erneut - diesmal hat es bei mir funktioniert.

Ich habe die Kennung als "skipButton" für eine Schaltfläche angegeben und beim Identifizieren der Schaltfläche schlägt sie immer fehl. Ich identifiziere die Schaltfläche als app.buttons ["skipButton '], danke für Ihre Hilfe
Sujit Baranwal

Diese Schritte haben bei mir nicht funktioniert. Tatsächlich waren Widgets betroffen, die zuvor nicht von dem Problem betroffen waren.
Geoff S

Warum hat das keinen Inhalt?
Krähe

2

Für die Aufnahme eines neuen Tests gibt es meiner Meinung nach noch keine Lösung. Wenn Sie jedoch eine Erweiterung verwenden, die das Tippen mit einem bereits vorhandenen Test erzwingt, funktioniert dies.

Anwendungsbeispiel:

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

Sie können den Originalbeitrag hier überprüfen:

Xcode UI-Test - Fehler beim Testen der Benutzeroberfläche - Fehler beim Scrollen zum Sichtbaren (durch AX-Aktion), wenn Sie auf das Suchfeld "Abbrechen" tippen


elementBoundByIndex 'wurde in' element (boundBy :) 'umbenannt, zB: cells.element (boundBy: 0) .tap ()
Sujananth

2

Ich bin gelegentlich auf dieses Problem gestoßen. Das Löschen des App-Verzeichnisses aus DerivedData scheint zu helfen.


1

Eine Lösung, die für mich funktioniert hat, war, das Objekt anders zu identifizieren.
In Xcode 8 konnte ich Folgendes verwenden:

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

Mit Xcode 9 habe ich den in dieser Frage erwähnten Fehler erhalten. Endete mit der folgenden, die funktioniert (al beit mehr Flakey als die ursprüngliche Option)

XCUIApplication().cells.element(boundBy: 1).tap()

@ Entwickler in Ihrer Testfunktion
Huy-Anh Hoang
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.