2014-10-27 22 views

risposta

17

Uso adb shell uiautomator dump comando:

Usage: uiautomator <subcommand> [options] 

Available subcommands: 

help: displays help message 

runtest: executes UI automation tests 
    runtest <class spec> [options] 
    <class spec>: <JARS> < -c <CLASSES> | -e class <CLASSES> > 
     <JARS>: a list of jar files containing test classes and dependencies. If 
     the path is relative, it's assumed to be under /data/local/tmp. Use 
     absolute path if the file is elsewhere. Multiple files can be 
     specified, separated by space. 
     <CLASSES>: a list of test class names to run, separated by comma. To 
     a single method, use TestClass#testMethod format. The -e or -c option 
     may be repeated. This option is not required and if not provided then 
     all the tests in provided jars will be run automatically. 
    options: 
     --nohup: trap SIG_HUP, so test won't terminate even if parent process 
       is terminated, e.g. USB is disconnected. 
     -e debug [true|false]: wait for debugger to connect before starting. 
     -e runner [CLASS]: use specified test runner class instead. If 
     unspecified, framework default runner will be used. 
     -e <NAME> <VALUE>: other name-value pairs to be passed to test classes. 
     May be repeated. 
     -e outputFormat simple | -s: enabled less verbose JUnit style output. 

dump: creates an XML dump of current UI hierarchy 
    dump [--verbose][file] 
     [--compressed]: dumps compressed layout information. 
     [file]: the location where the dumped XML should be stored, default is 
     /storage/emulated/legacy/window_dump.xml 

events: prints out accessibility events until terminated 

Di default discariche la vista gerarchia per $EXTERNAL_STORAGE/window_dump.xml

adb shell uiautomator dump 
UI hierchary dumped to: /sdcard/window_dump.xml 

Di solito si vorrebbe tirare quel file sul PC per ulteriori elaborazioni che sarebbe un extra passo. Ma c'è un trucco preciso che consente di combinare il dumping e il tiro in un unico comando. Utilizzando /dev/tty come destinazione discarica sarebbe stato un unico comando che stampare l'intera discarica al stdout:

adb exec-out uiautomator dump /dev/tty 
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><hierarchy rotation="0"><node ...></node></hierarchy>UI hierchary dumped to: /dev/tty 
+1

Desidera aggiungere una nota che può essere in esecuzione un solo client UIAutomator oppure il comando verrà "ucciso" e non funzionerà. Sono stato perplesso da questo fino a quando ho scoperto che ero bloccato eseguendo test utilizzando una connessione UIAutomator aperta. –

+1

@Alex Ho provato a eseguire il comando ui automator dump per ottenere la gerarchia ui dall'emulatore Android, ma sembra che non riesca a ottenere il dump completo. Che cosa sto facendo di sbagliato? Sto cercando di ottenere il dump per l'attività di UCBrowser in esecuzione in emulatore Android in modo da poter ottenere il limite di un pulsante/elemento da fare clic. Ho anche fatto una domanda su SO riguardo lo stesso qui - http://stackoverflow.com/questions/43780490/automate-the-installation-of-ucbrowser – Jignesh

+1

Il trucco impressionante con '/ dev/tty' –

2
adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml 

Aprire /tmp/view.xml in un browser web come:

google-chrome /tmp/view.xml 

exec adb -out scarico uiautomator/dev/tty

dall'altra risposta non ha funzionato per me.

+0

nel mio computer non funziona. passo a questo 'adb pull $ (adb shell uiautomator dump | egrep -o '/.*? xml')' – chinaanihchen

1

Ho usato il seguente su un Mac per la stampa in formato XML per la console:

adb shell uiautomator dump && adb pull /sdcard/window_dump.xml $TMPDIR && more $TMPDIR/window_dump.xml | xmllint --format -

Potrebbe essere necessario modificare il percorso del file /sdcard/window_dump.xml a tirare in base a dove viene scaricato il file xml.

1

AndroidViewClient/culebra Lo strumento dump consente di fare esattamente questo. AndroidViewClient può essere utilizzato come libreria e fornisce anche alcuni strumenti come dump e culebra.

usage: dump [OPTION]... [serialno] 

Options: 
    -H, --help      prints this help        
    -V, --verbose     verbose comments        
    -v, --version 
    -I, --ignore-secure-device  ignore secure device       
    -E, --ignore-version-check  ignores ADB version check      
    -F, --force-view-server-use  force view server use (even if UiAutomator present:w) 
    -S, --do-not-start-view-server don't start ViewServer      
    -k, --do-not-ignore-uiautomator-killed don't ignore UiAutomator killed    
    -w, --window=WINDOW    dump WINDOW content (default: -1, all windows) 
    -a, --all      dump all information about Views    
    -i, --uniqueId     dump View unique IDs       
    -x, --position     dump View positions       
    -b, --bounds      dump View bounds        
    -d, --content-description  dump View content descriptions    
    -g, --tag      dump View tags        
    -c, --center      dump View centers        
    -f, --save-screenshot=FILE  save screenshot to file      
    -W, --save-view-screenshots=DIR save View screenshots to files in directory 
    -D, --do-not-dump-views   don't dump views, only useful if you specified -f or -W 
    -A, --device-art=MODEL   device art model to frame screenshot (auto: autodetected) 
    -Z, --drop-shadow    drop shadow for device art screenshot   
    -B, --glare      screen glare over screenshot     
    -h, --use-uiautomator-helper  use UiAutomatorHelper Android app    
    -X, --debug=LIST     debug options 

esecuzione dump senza opzioni, si limita a stampare l'albero di Vista e alcune delle sue proprietà di base, come ID

android.widget.FrameLayout 
    com.android.launcher3.Workspace com.google.android.apps.nexuslauncher:id/workspace 
     android.widget.FrameLayout com.google.android.apps.nexuslauncher:id/workspace_blocked_row 
     android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text1 May 1 
     android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text2 MONDAY, 2017 
     android.widget.TextView Maps 
    android.widget.ImageView com.google.android.apps.nexuslauncher:id/g_icon 
    android.widget.ImageView com.google.android.apps.nexuslauncher:id/all_apps_handle 
    android.view.ViewGroup com.google.android.apps.nexuslauncher:id/layout 
     android.widget.TextView Messenger 
     android.widget.TextView Chrome 

d'altra parte, se si desidera che le posizioni dei punti di vista, si può essere eseguito

$ discarica -x

android.widget.FrameLayout (0, 0, 1440, 2392) 
    com.android.launcher3.Workspace com.google.android.apps.nexuslauncher:id/workspace (0, 0, 1440, 2392) 
     android.widget.FrameLayout com.google.android.apps.nexuslauncher:id/workspace_blocked_row (30, 126, 1380, 372) 
     android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text1 May 1 (1037, 194, 337, 162) 
     android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text2 MONDAY, 2017 (1092, 356, 282, 73) 
     android.widget.TextView Maps (30, 1614, 276, 372) 
    android.widget.ImageView com.google.android.apps.nexuslauncher:id/g_icon (30, 214, 276, 196) 
    android.widget.ImageView com.google.android.apps.nexuslauncher:id/all_apps_handle (636, 1986, 168, 98) 
    android.view.ViewGroup com.google.android.apps.nexuslauncher:id/layout (0, 2084, 1440, 308) 
     android.widget.TextView Messenger (306, 2112, 276, 280) 
     android.widget.TextView Chrome (858, 2112, 276, 280) 

Le opzioni vi darà controllo sull'output. È possibile ottenere ulteriori informazioni here.