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.


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


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.


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.

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


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.


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

@Developer w funkcji testowej
Huy-Anh Hoang
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.