2014-10-27 8 views

Antwort

17

Verwenden adb shell uiautomator dump Befehl:

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 

standardmäßig die Ansichten Hierarchie

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

zu $EXTERNAL_STORAGE/window_dump.xml Dumps Normalerweise würden Sie die Datei auf Ihren PC zur weiteren Verarbeitung zu ziehen, die ein zusätzlich wären Schritt. Aber es gibt einen netten Trick, der es erlaubt, Dumping und Ziehen zu einem einzigen Befehl zu kombinieren. Mit /dev/tty als Umspeicherungsziels würde einen einzigen Befehl machen, die die gesamte Dump der stdout drucken würde:

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

Wollte eine Notiz hinzufügen, dass nur ein UIAutomator-Client ausgeführt werden kann oder der Befehl wird "getötet" und nicht funktionieren. Ich war davon überrascht, bis ich herausfand, dass ich blockiert war, indem ich Tests mit einer offenen UIAutomator-Verbindung durchführte. –

+1

@Alex Ich versuchte, den Befehl ui Automator Dump zu laufen, um die ui-Hierarchie von Android-Emulator zu bekommen, aber es scheint, dass ich nicht den kompletten Dump bekomme. Was mache ich falsch? Ich versuche, den Dump für die Aktivität von UCBrowser im Android Emulator zu bekommen, so dass ich die Grenze eines Knopfes/Gegenstandes zum Klicken bekommen kann. Ich habe auch eine Frage über SO in Bezug auf die gleiche hier - http://stackoverflow.com/questions/43780490/automate-the-installation-of-ucbrowser – Jignesh

+1

Awesome Trick mit '/ dev/tty' –

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

öffnen /tmp/view.xml in einem Web-Browser wie:

google-chrome /tmp/view.xml 

adb exec -out uiautomator dump/dev/tty

von der anderen Antwort funktionierte nicht für mich.

+0

in meinem Computer nicht funktioniert. Ich wechsle zu diesem 'adb pull $ (adb Shell uiautomator Dump | egrep -o '/.*? xml')' – chinaanihchen

1

habe ich auf einem Mac das folgende Format XML an die Konsole drucken:

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

Unter Umständen müssen Sie den Pfad der /sdcard/window_dump.xml Datei ändern die XML-Datei ziehen auf, wo abgeladen wird.

1

AndroidViewClient/culebra 's dump Werkzeug können Sie genau das tun. AndroidViewClient kann als Bibliothek verwendet werden und bietet auch einige Werkzeuge wie dump und 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 

läuft dump ohne Optionen, druckt nur den Baum von Ansichten und einige seiner grundlegenden Eigenschaften, wie 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 

auf der anderen Seite, wenn Sie die Positionen der Ansichten möchten, können Sie kann

$ laufen -x Dump

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) 

Die Optionen geben Ihnen Kontrolle über den Ausgang. Sie können weitere Informationen erhalten here.