2015-11-26 33 views
9

Utilizzo Appium per testare un'applicazione ibrida Android che include frequenti transizioni tra NATIVE e il contesto WEBVIEW. Queste visualizzazioni Web sono sviluppate usando le librerie React.Accesso agli elementi di reazione utilizzando Appium per l'automazione

Per la mia comprensione e correggetemi se sbaglio, How React Works è che crea un DOM virtuale utilizzando il vero DOM e genera un nome classe dinamica corrispondenti a quelli del javascript. Il Diff Algorithm fornisce un modo efficace per differenziare gli oggetti utilizzando i nomi di classe auto generati.


Il problema che sto affrontando è che usando Appium non sono in grado di accedere agli elementi da queste webview utilizzando qualsiasi metodo findElementsBy. Il nome della classe essendo solo il parametro visibile a UIAutomator su cui potremmo realmente fare affidamento è cambiato da React su ogni nuova generazione generata.

  1. C'è un modo in modo che possa refactoring questi nomi delle classi generati automaticamente per alcuni nomi sensibili utilizzando la libreria stessa Reagire?

Il chrome inspect fornisce i dettagli del WebView nella mia applicazione come:

<div class="_32f8NoUfyUtNSxo3w4Ptbp" data-reactid=".0.1.$=13:0.0.0">…</div> 
  1. Tutte le idee su come accedere agli elementi DOM reale utilizzando Appium per questo caso?

Info: WebView.setWebContentsDebuggingEnabled(true) si trova nel codice di applicazione.

Apprezzerei anche eventuali cavi.

+0

Si sta utilizzando un caricatore di pacchetti Web per gli stili o come li componi/compili? –

+0

@DanielSchmidt: Non ho molto contesto sulla fine della compilazione delle viste. Fornirebbe presto i dettagli. – nullpointer

risposta

3

In base a questo link: https://github.com/facebook/react-native/issues/7135

La soluzione per questo problema: utilizzare sia accessibile e accessibleLabel sui vostri punti di vista

DOC sull'etichetta accessiblity: https://facebook.github.io/react-native/docs/accessibility.html#accessibilitylabel-ios-android

Sul mio reagiscono componente nativo:

<TextInput accessible={true} accessibilityLabel={'Tap Me'}></TextInput> 

Sul mio script Test:

mobileElement = find_Element(accessibilty_id, "Tap Me") 
mobileElement.send_keys "hello world" 
+0

Questo richiede l'uso di 'accessibile' e' accessiblityLabel' nel codice di visualizzazione? Inoltre, lo script che hai fornito funziona con Appium poiché non ho ancora utilizzato alcun attributo come selettore? – nullpointer

+0

sì, il mio script funziona con Appium, ma solo per componenti con attributo accessibilityLabel. Dopo aver letto la documentazione nativa reattiva, non tutti i componenti nativi reattivi hanno un attributo accessibilityLabel.preferisco usare calabash per i test automatizzati in react native, in calabash puoi trovare elementi basati su indice del componente, testo all'interno del componente o accessibilityLabel – RobbyWH