2015-09-26 4 views
16

Ich versuche, auf ein Element innerhalb einer Unteransicht zuzugreifen, und ich finde es unmöglich, dies zu tun.UI-Test XCode 7- kann nicht auf Element innerhalb der Unteransicht zugreifen

Die Hierarchie Wesen:

View Controller:

  • Ansicht
    • tempView
    • userEnterView
      • zipCodeEntered

Ich möchte das zipCodeEntered Textfeld zuzugreifen. Ich habe ein Accessibility-Label namens "zipCodeEntered".

Wenn ich versuche, die Automatisierung aufzuzeichnen, registriert es nur den Superview "userEnterView" und nicht das eigentliche Textfeld, das ich anzapfen kann.

Ich drucke "app.otherElements [SUPER_VIEW_NAME] .debugDescription", um zu sehen, welche Elemente in dieser Hierarchie sind, und es druckt keine.

Irgendwelche Ideen, warum ich nicht auf diese Elemente zugreifen kann/wie ich darauf zugreifen kann? enter image description here

+0

Können Sie stattdessen versuchen, die 'accessibilityIdentifer' zu setzen? –

+0

Joe: Ich habe deinen Test-Blog ausführlich gelesen und es hat mir eine Menge geholfen, also wollte ich dir einfach dafür danken. Ich habe den 'accessibilityIdentifier' zum zipCodeEntered textField hinzugefügt und kann ihn immer noch nicht finden. Verwenden Sie entweder 'app.otherElements [" zipCodeEntered "]' oder 'app.textFields [" zipCodeEntered "]'. Hinzugefügtes Bild des Storyboardlayouts – sebradloff

+0

Danke, froh, dass es geholfen hat! Haben Sie versucht, mit dem Platzhaltertext "Postleitzahl" auf das Element zuzugreifen? –

Antwort

21

Auf die Unteransichten kann nicht zugegriffen werden, da die übergeordnete Ansicht keine Containeransicht ist. Aus dem Abschnitt Making Your iOS App Accessible des Eingabehilfen-Programmierleitfadens:

Aus Sicht der Barrierefreiheit ist eine benutzerdefinierte Ansicht entweder eine individuelle Ansicht oder eine Containeransicht. Eine individuelle Ansicht enthält keine anderen Ansichten, auf die zugegriffen werden muss.

Eine Containeransicht hingegen enthält andere Elemente, mit denen Benutzer interagieren können.

Um die Subviews der übergeordneten Ansicht zugänglich zu machen sagen sollte UIAccessibility, dass es durch die Rückkehr NO aus -isAccessibilityElement und Umsetzung der Methoden des UIAccessibilityContainer Protokoll einen Zugänglichkeits Behälter ist.

+4

Danke! Das war genau das Problem. Es gibt zwei Wege, dies zu erreichen. 1) Deaktivieren Sie die Barrierefreiheit für alle Ansichtselemente, die ich hatte. 2) programmatisch im View-Controller den spezifischen View-Ausgang verwenden, um 'viewOutletVariable.isAccessibilityElement = false 'zu schreiben. – sebradloff

+0

Diese Antwort wurde grundsätzlich als ein Inhalator für mich gehandelt. – rambossa

+0

UIAccessibilityContainer ist nur für Ansichten verfügbar, die nicht von UIKit unterstützte Elemente enthalten. Zum Beispiel Zeichnen von Text und Bildern manuell mit 'drawAtPoint' und nicht mit UILabel oder UIImageView. –

-2

Ich stieß auch auf dieses Problem in meinem UITableView. Meine Zelle hat eine containerView (UIView), die Unteransichten (TextView, UIButton ...) und eine CollectionView mit seinen Zellen hat.

Ich versuchte die angenommene Antwort, aber es hat nicht funktioniert. (UI Recorder oder manuellen Code erkannte meine Unterelemente nicht). Aber manchmal stellte ich fest, dass der UITest plötzlich meine Unterelemente erkannte, wenn ich etwas auslöste, um den Tisch aufzufrischen.

Also gerade jetzt weiß ich, wenn UITest meine Subviews nicht finden kann, rufe ich tableView.reloadData auf, um die Ansicht zu aktualisieren, und dann ist das ganze Problem verschwunden.

Wie auch immer, dies ist nur ein Workaround, ich hoffe, dass Apple es so schnell wie möglich beheben kann.

+0

Wie rufen Sie TableView.reloadData in XCUI auf? –

+0

Diese Antwort steht in keinem Zusammenhang mit der Frage, da der Code und der Screenshot zeigen, dass es überhaupt kein 'UITableView' gibt. –