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.