2015-09-26 13 views
16

Sto provando ad accedere a un elemento all'interno di una sottoview e trovo impossibile farlo.Test UI XCode 7- non può accedere all'elemento nella sottoview

L'essere gerarchia:

View Controller:

  • View
    • tempView
    • userEnterView
      • zipCodeEntered

voglio accedere al campo di testo zipCodeEntered. Ho un'etichetta di accessibilità su di esso denominata "zipCodeEntered".

Quando provo a registrare l'automazione, registra solo la superview "userEnterView" e non il campo di testo effettivo a cui posso accedere.

Stampo "app.otherElements [SUPER_VIEW_NAME] .debugDescription" per vedere quali elementi sono in quella gerarchia e non ne stampa nessuno.

Qualche idea sul motivo per cui non riesco ad accedere a questi elementi/come posso accedervi? enter image description here

+0

Puoi provare a impostare 'accessibilityIdentifer', invece? –

+0

Joe: Ho letto il tuo blog di test dell'interfaccia utente ampiamente e mi ha aiutato tantissimo, quindi volevo solo ringraziarti per questo. Ho aggiunto 'accessibilityIdentifier' al campo di testo zipCodeEntered e ancora non riesco a trovarlo. Usando 'app.otherElements [" zipCodeEntered "]' o 'app.textFields [" zipCodeEntered "]'. Aggiunta immagine del layout dello storyboard – sebradloff

+0

Grazie, felice è stato di aiuto! Hai provato ad accedere all'elemento tramite il suo testo segnaposto, "Codice postale"? –

risposta

21

Le visualizzazioni secondarie non sono accessibili perché la vista principale non è una vista Contenitore. Dalla sezione Making Your iOS App Accessible della Guida alla programmazione Accessibilità:

Dal punto di vista dell'accessibilità, una vista personalizzata è una vista singola o una vista contenitore. Una singola vista non contiene altre viste che devono essere accessibili.

Una vista contenitore, d'altra parte, contiene altri elementi con cui gli utenti possono interagire.

Per effettuare i subviews accessibili vista primaria dovrebbe dire UIAccessibility che è un contenitore accessibilità restituendo NO dal -isAccessibilityElement e implementare i metodi del protocollo UIAccessibilityContainer.

+4

Grazie! Questo era esattamente il problema. Ci sono due modi per ottenere questo. 1) deselezionare l'accessibilità per tutti gli elementi di visualizzazione che ho avuto. 2) a livello di programmazione, nel controller della vista utilizzare l'uscita vista specifica per scrivere 'viewOutletVariable.isAccessibilityElement = false'. – sebradloff

+0

Questa risposta è stata praticamente gestita come un inalatore per me. – rambossa

+0

UIAccessibilityContainer è solo per le viste che contengono elementi di backup non UIKit. Ad esempio, disegnare manualmente testo e immagini con 'drawAtPoint' anziché con UILabel o UIImageView. –

-2

Ho riscontrato questo problema anche nel mio UITableView. La mia cella ha un containerView (UIView) che ha subviews (TextView, UIButton ...) e un collectionView con le sue celle.

Ho provato la risposta accettata, ma non ha funzionato. (Registratore UI o codice manuale non riconosceva i miei sottoelementi). Ma a volte ho scoperto che l'UITest ha improvvisamente riconosciuto i miei sottoelementi quando ho attivato qualcosa per aggiornare il tavolo.

Quindi adesso so che se UITest non riesce a trovare le mie sotto-visualizzazioni, invoco lo tableView.reloadData per aggiornare la vista, e quindi tutto il problema è scomparso.

In ogni caso, questa è solo una soluzione, spero che Apple possa risolvere il problema il prima possibile.

+0

Come si richiama tableView.reloadData in XCUI? –

+0

Questa risposta non è in alcun modo correlata alla domanda, dal momento che il codice e lo screenshot mostrano che non vi è alcun coinvolgimento di 'UITableView'. –

Problemi correlati