2013-05-10 11 views
5

Sto utilizzando il KIF Framework per il test dell'interfaccia utente funzionale. Diciamo che sono su una schermata attuale dell'iPad in cui molte viste (etichette, pulsanti, campi di testo, ecc.) Hanno etichette di accessibilità univoche assegnate. Se ho la stringa accessibilityLabel a portata di mano, posso ottenere un riferimento allo UIView associato dalla schermata corrente che lo utilizza?Ottieni UIVIew da accessibilityLabel per l'automazione KIF

Ad esempio, [[UIView alloc] viewWithTag:5] restituisce UIVIew di tag fornito. Sto cercando qualcosa come [[UIView alloc] viewWithAccessiblityLabel:@"my label"].

P.S: So che il metodo forza bruta sarebbe quello di iterare ricorsivamente tutte le viste in self.subviews e confrontare l'etichetta di accessibilità per trovare quello che sto cercando. Sto cercando un approccio migliore.

+0

u puoi 'sottoclasse'' UIView' nelle tue classi 'Custom'. –

+0

L'unico modo per fare ciò che vuoi è di ripetere le sottoview e controllare. Questo tipo di comportamento probabilmente significa che hai un design scadente nella tua classe. Tutto ciò di cui avrai bisogno di fare riferimento in un secondo momento potrebbe essere memorizzato in una proprietà, o se è stato creato dinamicamente, in un NSDictionary che è memorizzato come una proprietà. –

risposta

9

Sto usando KIF per l'automazione dell'interfaccia utente! Ecco i passaggi per ottenere la vista da data accessibilityLabel. Il metodo viewContainingAccessibilityElement:element è il metodo di estensione alla classe UIAccessibilityElement.

UIAccessibilityElement *element = [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:label]; 
UIView *view = (UIView*)[UIAccessibilityElement viewContainingAccessibilityElement:element]; 
+2

Ho appena aggiunto 'keyWindow' come questo' [[[ApplicazioneApplicationApplication] keyWindow] accessibilityElementWithLabel: label]; 'e questo ha funzionato per me. Grazie! – KKendall

+0

Questa funzionalità è incorporata in KIF, ma non molto rilevabile. Vedi il commento di @ duncan-babbage per una soluzione più semplice. –

2

Mi sembra (dal tuo commento: "Ho bisogno di questa funzionalità per automatizzare i test dell'interfaccia utente") come se stessimo cercando lo accessibilityIdentifier. Dalla documentazione:

Il protocollo UIAccessibilityIdentification viene utilizzato per associare un identificatore univoco con elementi nell'interfaccia utente. È possibile utilizzare gli identificatori definiti negli script di automazione dell'interfaccia utente poiché il valore di accessibilityIdentifier corrisponde al valore restituito del metodo name di UIAElement.

+0

Grazie David. È utile, ma il framework di automazione KIF che sto utilizzando è basato sull'etichetta dell'accessibilità, quindi devo usarlo. – applefreak

+0

Si noti che KIF successivamente ha aggiunto la possibilità di scegliere gli elementi target anche da accessibilityIdentifier. –

10

V'è in realtà un modo incredibilmente semplice per ottenere ciò che si descrive quando si utilizza KIF per l'automazione interfaccia utente, anche se KIF non lo rende evidente che questo è possibile. waitForViewWithAccessibilityLabel restituisce un riferimento alla vista quando si trova:

Swift

let view = tester().waitForView(WithAccessibilityLabel: "My label") 

Objective-C

UIView *view = [tester waitForViewWithAccessibilityLabel:@"My label"]; 

Estremamente utile, una volta scoperto.

+0

Questo ha funzionato alla grande! –

+0

ma non riesce se la vista non esiste. c'è un modo per chiederlo e NON fallire se non lo si trova? – zaxy78

+0

Non sono a conoscenza di un modo per chiedere la vista ma non ha esito negativo se non viene trovata e, come è ovvio, "waitForViewWithAccessibiltyLabel" scadrà causando il fallimento del test se la vista non è presente. Questo è un aspetto negativo di questo approccio. –