Xcode 11 XCUITest Nie udało się uzyskać pasujących migawek: Błąd podczas pobierania głównego okna kAXErrorServerNotFound

21

Po zbudowaniu aplikacji w Xcode 11 i uruchomieniu pakietu XCUITests otrzymuję wiele przypadkowych awarii z następującymi.

Nie udało się uzyskać pasujących migawek: Błąd podczas pobierania głównego okna kAXErrorServerNotFound

Bez względu na to, jak długo zwiększam limity czasu, problemy pojawiają się sporadycznie. Wygląda na to, że występują problemy z migawką w hierarchii interfejsu użytkownika. Nasze testy przechodzą konsekwentnie w Xcode 10.

Ponownie zainstalowałem Xcode. Usunięto wszystkie symulatory. Wyczyszczono dane pochodne. Zmodyfikowane limity czasu. Aktualizacja z Xcode 11.1 do Xcode 11.2.1.

Dzięki!

 

Luke Street
źródło
nawet ja mam ten sam problem, czy masz jakieś obejście tego samego.
Samarth Kejriwal

Odpowiedzi:

9

Miałem problem z dopasowaniem podczas uruchamiania prostego testu UITest w Xcode 11.3. Aby zadziałało, musiałem najpierw wkleić: XCUIApplication().activate()lub XCUIApplication().launch().

Денис Грищенко
źródło
To działa .. dziękuję
RJ168
Ta odpowiedź wydaje się być dobrym rozwiązaniem, ale mam problemy ze zrozumieniem, co to znaczy? Gdzie powinienem wpisać XCUIApplication (). Activate () i / lub XCUIApplication (). Launch ()?
Charlie Seligman
Wewnątrz funkcji testowania interfejsu użytkownika
Денис Грищенко
0

Doświadczyłem tego samego problemu z Xcode 11 i zdałem sobie sprawę, że tester nie został zabity podczas zatrzymywania testów (lub jeśli test z jakiegoś powodu się zawiesił). Uruchomienie testów po raz drugi odrodziłoby nowego testera i w tym momencie miałem dwóch biegaczy próbujących wejść w interakcję z tą samą aplikacją, co doprowadziło do tego bardzo dziwnego błędu.

Aby udowodnić, że wykonałem następujące czynności:

  1. Utworzono test interfejsu użytkownika, który wpisuje długi tekst w widoku tekstu
  2. Uruchom test i ręcznie go zatrzymałem, gdy w widoku tekstowym było kilka zdań
  3. Ręcznie otwórz aplikację w symulatorze (nie uruchamiając testu)
  4. Zaobserwowano, że losowe znaki pojawiały się w widoku tekstowym, mimo że nie uruchomiono żadnych testów.

Obejściem tego problemu było zamknięcie i ponowne otwarcie symulatora, aby upewnić się, że wszystkie procesy zostały zabite. Mam nadzieję, że to rozwiąże twoje problemy

erudel
źródło
Dzięki za wgląd! Teraz, kiedy to mówisz, zgadza się to z tym, co zaobserwowałem. Niestety, jak powiedziałem w moim oryginalnym poście, próbowałem już usunąć wszystkie symulatory. Te testy są uruchamiane w ramach naszych kompilacji zarówno lokalnie, jak i w naszym systemie CI. Czy wiesz, jak zautomatyzować ten proces?
Luke Street,
I To, co zakończyliśmy w naszym systemie CI, polegało na zabiciu Symulatora przed uruchomieniem pakietu testowego. Możesz na przykład uruchomić killall "Simulator" 2> /dev/null; xcrun simctl erase alllub jeśli używasz Fastlane, w skanie są dostępne opcje resetowania symulatora.
erudel,
0

Używam różnych maszyn. Moje starsze komputery Mac znacznie częściej występują ten błąd. Domyślam się, że starsze komputery Mac nie mają pamięci wymaganej do poprawnego uruchomienia niektórych XCUITestów.

Charlie Seligman
źródło
0

Od czasu do czasu rozwiązuję ten problem w Xcode 11.1. Zauważyłem, że problem występuje podczas oczekiwania na elementy interfejsu użytkownika, zwłaszcza gdy podczas testu pokazywany jest widok strony internetowej. Kiedy pojawił się problem, używałem XCUIElement.waitForExistence(timeout:)lub oczekiwałem NSPredicate(format: "exists == true"). Kiedy zmieniłem na oczekiwanie, NSPredicate(format: "hittable == true")problem zniknął, ale nie wiem dlaczego. Różnica między 2 atrybutami polega na tym, że hittablewykrywają tylko elementy ekranowe, podczas gdy existswykrywają elementy poza ekranem, takie jak komórki poza ekranem widoku tabeli.

expectation(for: NSPredicate(format: "hittable == true"), evaluateWith: element, handler: nil)
waitForExpectations(timeout: 60, handler: nil)
Juny
źródło
0

Miałem podobny problem na Xcode 11.

Okazało się, że zanim zezwolono na ten sam identyfikator dostępności na wielu stronach.

Ale teraz korzystając z nowego modalnego stylu prezentacji, powinieneś używać różnych identyfikatorów na swoich stronach, aby uniknąć konfliktów.

touti
źródło