2015-12-14 4 views
5

Es ist schwierig, eine angemessene Dokumentation für das UI Testing Framework von Apple zu finden. Ich habe viele Beispiele gesehen, in denen es möglich ist, Schaltflächen und Labels mit bestimmten Namen zu finden, aber wie kann ich nach generischen UIViews suchen?Wie kann ich mit XCUIElementsQuery auf die Existenz einer UIView testen?

Angenommen, ich setze eine Ansicht mit accessibilityLabel == "Some View", wie kann ich während der Testausführung eine Ansicht mit diesem Namen finden?

Ich habe versucht (erfolglos) den folgenden Code:

XCUIElement *pvc = [[app childrenMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View'"]]; 

NSPredicate *exists = [NSPredicate predicateWithFormat:@"exists == true"]; 
[self expectationForPredicate:exists evaluatedWithObject:pvc handler:nil]; 
[self waitForExpectationsWithTimeout:10 handler:nil]; 

NSLog(@"%@", [[app childrenMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View Controller'"]]); 

Antwort

5

Das Problem, das ich mit dem Code sehen Sie oben haben, ist, dass Sie gezielt versuchen, einen Blick in den Kindern der App zu finden sind, statt die Nachkommen der App. Kinder sind streng Subviews einer Ansicht, und die Suche wird nicht auf Sub-Sub-Ansichten usw. schauen. Ansonsten sieht es gut aus.

Versuchen:

XCUIElement *pvc = [[app descendantsMatchingType:XCUIElementTypeAny] elementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityLabel == 'Places View'"]]; 

Auch die Standardeinstellung für UIView ist nicht in Zugänglichkeit zu beteiligen, so dass zusätzlich zu Einstellen des Etiketts (und übrigens das Code-Snippet in Ihrer Frage über Setzen einer Marke tut Vergleich statt Zuordnung) Sie sollten auch Sie Zugänglichkeit sicherstellen aktivieren:

view.isAccessibilityElement = YES 
view.accessibilityLabel = @"AccessibilityLabel" 
+0

Oh, ich sehe meinen Fehler bei der Suche nach den Kindern. Leider hat auch die Suche nach Nachkommen nicht funktioniert ... Ich habe versucht, ein großes Timeout zu setzen, aber Xcode hat keine Ansicht mit diesem accessibilityLabel gefunden. –

+0

Wenn Sie den Inspektor für Eingabehilfen verwenden, können Sie die Ansicht auswählen, die Sie finden möchten? Sie müssen sicherstellen, dass die Barrierefreiheit zusätzlich zum Festlegen eines Labels aktiviert ist. Standardmäßig glaube ich, dass UIView nicht für die Barrierefreiheit aktiviert ist. –

1

Die Abfrage von der anderen Antwort funktioniert, aber ich finde, dass Sie auch Ansichten einfach mit finden:

app.otherElements["MenuViewController.menuView"].swipeLeft() 

Wo in meinem Fall MenuViewController.menuView ist ein UIView mit einem accessibilityIdentifier Set.

Verwandte Themen