Błąd dopasowania zdarzenia z sygnaturą czasową: nie udało się znaleźć pasującego elementu

94

Próbuję wygenerować UItest w Xcode. Kiedy próbuję przesunąć UIview, pojawia się błąd:

Timestamped Event Matching Error: Failed to find matching element

okno błędu

wprowadź opis obrazu tutaj

Dzieje się tak również, gdy spróbuję dotknąć UIView.

shay
źródło
Czy możesz wyjaśnić trochę więcej?
Dieter Meemken
Próbuję przesunąć lub dotknąć UIview, który ma coś zrobić (ma rekonfigurator gestów), ale kiedy wykonuję gest, pojawia się ten błąd. Jedynym sposobem, w jaki starałem się, aby to działało, są zapytania, ale jest to naprawdę skomplikowane i jestem pewien, że istnieje inny sposób
shay

Odpowiedzi:

47

Powinieneś sprawdzić, czy opcja `` Dostępność '' jest włączona dla obiektu UIView, z którego przesuwasz, na przykład:

wprowadź opis obrazu tutaj

AmitW
źródło
1
Włączenie ułatwień dostępu dla WebView spowodowało, że testy zakończyły się niepowodzeniem podczas rozpoznawania tekstu w WebView. Wyłączenie ułatwień dostępu dla UIView hostującego WebView sprawiło, że testy zakończyły się pomyślnie. Więc uważaj.
askielboe
1
Jako kolejny punkt, aby to zadziałało, musiałem nadać mu etykietę
Sean Lintern
Znalazłem ten post pomocny w używaniu fastlanedo robienia zrzutów ekranu tableView. stackoverflow.com/a/39331154/4475605
Adrian
Gdzie to jest? Jak to ustawić?
Cory McAboy
@CoryMcAboy, możesz ustawić go z kodu dla swojego niestandardowego widoku:isAccessibilityElement = true
Gleb Tarasov
14

Zwykle ten problem występuje, gdy element nadrzędny elementu, który chcesz zarejestrować, jest ustawiony na isAccessibilityElement = true. Ogólnie rzecz biorąc, aby uzyskać dostęp do elementu podrzędnego, element nadrzędny musi mieć wartość false. Na przykład: jeśli masz UILabel wewnątrz widoku, dostępność powinna być ustawiona na false dla widoku i ustawiona na true dla UILabel.

Souma Paul
źródło
1
To było dokładnie odtwarzalne. Jak powiedziałeś, nie działa, gdy element nadrzędny jest ustawiony na isAccessibilityElement = true! Po przełączeniu z powrotem na fałsz, znowu zadziałało.
pommes
3

W Xcode 9.3, gdzie najwyraźniej nadal stanowi problem, zrobiłem:

  • Zamknij Xcode
  • Zresetuj ustawienia symulatora (Sprzęt -> Wymaż całą zawartość i ustawienia)
  • Zamknij symulator
  • Usuń dane pochodne dla bieżącej aplikacji
  • Uruchom ponownie Xcode
  • Spróbuj ponownie nagrać - tym razem zadziałało.
Commanda
źródło
Podałem identyfikator jako „skipButton” dla przycisku, a przy identyfikowaniu przycisku zawsze kończy się niepowodzeniem, identyfikuję przycisk jako app.buttons [„skipButton”], dziękuję za pomoc
Sujit Baranwal
Te kroki nie działają dla mnie. W rzeczywistości problem dotyczy widżetów, na które wcześniej nie miał wpływu.
Geoff S
dlaczego to nie ma treści?
wrona
2

Jeśli chodzi o nagranie nowego testu, myślę, że nie ma jeszcze rozwiązania. Ale jeśli używasz rozszerzenia wymuszającego dotknięcie z testem, który już istnieje, działa.

Przykład użycia:

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

Możesz sprawdzić oryginalny post tutaj:

Test interfejsu użytkownika Xcode - niepowodzenie testowania interfejsu użytkownika - nie można przewinąć do widocznego (przez działanie AX) po dotknięciu przycisku „Anuluj” w polu wyszukiwania

Sophy Swicz
źródło
elementBoundByIndex 'został przemianowany na' element (boundBy :) ', Eg: cells.element (boundBy: 0) .tap ()
Sujananth
2

Od czasu do czasu napotykam ten problem. Wydaje się, że pomaga usunąć katalog aplikacji z DerivedData.

Dave L.
źródło
1

Rozwiązaniem, które sprawdziło się u mnie, była inna identyfikacja obiektu.
W Xcode 8 mogłem skorzystać z:

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

W przypadku Xcode 9 otrzymałem błąd wspomniany w tym pytaniu. Skończyło się na tym, co zadziałało (choć bardziej kruche niż oryginalna opcja)

XCUIApplication().cells.element(boundBy: 1).tap()
Charlie Seligman
źródło
@Developer w funkcji testowej
Huy-Anh Hoang