2013-03-26 12 views
6

Sto provando a iniziare con Appium per testare le applicazioni mobili della mia azienda. Desidero utilizzare i binding Python per scrivere gli script e ho bisogno di iniziare con le app Android.Enumera tutti gli elementi in associazioni Selenium Python per Appium

Ho gli esempi di Appio tutto funzionante. Posso eseguire grunt android ei test funzionano e posso eseguire l'app di esempio android.py.

Ma io sono un newbie totale e non ho una chiara immagine di come identificare i controlli nelle app della mia azienda. Ho esperienza con Python quindi ho pensato di creare un elenco di elementi di controllo e di introspettarli.

Sono bloccato! Tutti i metodi come driver.find_elements_by_tag_name() richiedono un identificatore specifico (o almeno non ho trovato alcun carattere jolly che funzioni).

Come posso introspettare l'albero Appio di elementi che rappresenta l'app Android sottoposta a test? Come posso elencare tutti gli elementi in modo da poterli introspezionare? C'è un albero che posso camminare per trovare tutti gli elementi nell'app?

Speravo di riuscire a capire gli elementi senza dover ottenere il codice sorgente per le app, creare le app in Eclipse, ecc., Ma posso farlo se necessario.

P.S. Preferirei usare Python, ma sarebbe aperto a usare qualcos'altro per fare l'introspezione se questo funziona meglio. Potrei ancora scrivere i test effettivi in ​​Python, a meno che l'altra lingua non sia significativamente migliore in qualche modo.

risposta

2

Mi piacerebbe ancora un modo per analizzare l'interfaccia Selenium da Python. Ma ho trovato un modo efficace per avere un'immagine chiara di come è strutturata l'app, ed è abbastanza facile capire come scrivere i test del selenio.

Innanzitutto, esegui l'app in esecuzione su un dispositivo reale collegato al computer di sviluppo Android o in un emulatore. Fondamentalmente se esegui adb devices vuoi vedere un singolo dispositivo, quello che esegue la tua app. Successivamente, esegui lo strumento uiautomatorviewer, quindi fai clic sull'icona della barra degli strumenti Device Screenshot. (Ci sono solo due icone della barra degli strumenti: la prima è l'icona Open e sembra una cartella di file e quella che vuoi sembra una pila di telefoni cellulari.)

Una volta fatto, un'immagine della tua app appare, con uno screenshot a sinistra e un contorno di albero sfogliabile a destra. La struttura mostra tutti i controlli dell'app, insieme alle eventuali etichette di testo e altre informazioni (ad esempio se la proprietà clickable è true o false per quel controllo).

Un avvertimento: i controlli sono mostrati numerati, ma nelle associazioni di selenio, i numeri potrebbero non essere gli stessi. Nell'app di esempio ApiDemos, il pulsante Graphics ha il numero indice 4 poiché è il quinto pulsante, ma per accedervi dalla sua posizione dovevo usare l'indice 5. L'indice 0 era un oggetto non cliccabile con il testo "Demo API", in un diverso oggetto FrameLayout che costituisce l'intestazione per lo schermo.

Così, ero in grado di fare questa modifica allo script android.py:

#elem = driver.find_element_by_name('Graphics') 
elem = driver.find_elements_by_tag_name('TextView')[5] 

commento la chiamata driver.find_element_by_name(), e invece trovare la sesta TextView in tutta l'app. Non è una buona pratica, ma mostra che i risultati di uiautomationviewer mi consentono di visualizzare le cose che devo sapere sui controlli.

Ora so abbastanza per fare un po 'di introspezione:

for elem in driver.find_elements_by_tag_name('TextView'): 
    if elem.text == "Graphics": 
     break 
else: 
    print("Could not find desired item") 

Questo non è meglio che solo chiamare driver.find_element_by_name() ma dimostra che io sono sulla strada giusta.

uiautomatorviewer è una soluzione pratica al mio problema. Se ne hai uno in puro Python per favore fammelo sapere.

3

Appium supporta il metodo "origine pagina" di WebDriver. Quindi puoi fare questo:

# assume you have a driver object 
import json 

source = driver.page_source 
source = json.loads(source) 
# you can now work with source as a python object 
+0

Grazie per la risposta. Ho già provato questo, e non funziona per me ... la sessione di test termina con un errore. L'hai provato con un'applicazione iOS o un'applicazione Android? Scommetto che funziona correttamente per iOS, ma non penso che funzioni ancora per Android. – steveha

Problemi correlati