Pour des raisons environnementales, je ne peux utiliser queadb
commandes.
Existe-t-il un moyen d'obtenir les attributs de présentation actuels tels que id
, position
, text
etc?
Semblable à ce queuiautomatorviewer
montre.
Utilisez la commande adb Shell uiautomator dump
:
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
Par défaut, il affiche la hiérarchie des vues dans $EXTERNAL_STORAGE/window_dump.xml
.
adb Shell uiautomator dump
UI hierchary dumped to: /sdcard/window_dump.xml
Habituellement, vous souhaiterez extraire ce fichier sur votre PC pour un traitement ultérieur, ce qui constituerait une étape supplémentaire. Mais il existe une astuce qui permet de combiner le dumping et le tirage en une seule commande. Utiliser /dev/tty
en tant que destination de vidage créerait une seule commande permettant d’imprimer le vidage complet sur la 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
L'outil dump
de AndroidViewClient/culebra vous permet de le faire précisément. AndroidViewClient peut être utilisé comme une bibliothèque et fournit également des outils tels que dump
et 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
en exécutant dump
sans options, affiche simplement l'arborescence des vues et certaines de ses propriétés de base, telles que l'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'autre part, si vous voulez les positions des vues, vous pouvez exécuter
$ dump -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)
Les options vous donneront le contrôle de la sortie. Vous pouvez obtenir plus d'informations ici .
adb pull $(adb Shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml
Ouvrez /tmp/view.xml
dans un navigateur Web tel que:
google-chrome /tmp/view.xml
adb exec-out uiautomator dump/dev/tty
de l'autre réponse n'a pas fonctionné pour moi.
J'ai utilisé ce qui suit sur un Mac pour imprimer du XML formaté sur la console:
adb Shell uiautomator dump && adb pull /sdcard/window_dump.xml $TMPDIR && more $TMPDIR/window_dump.xml | xmllint --format -
Vous devrez peut-être modifier le chemin du fichier /sdcard/window_dump.xml
à extraire en fonction de l'emplacement où le fichier xml est vidé.
Utilisez ce qui suit pour afficher la mise en page XML dans le bloc-notes ou votre éditeur de texte par défaut
db shell uiautomator dump && adb pull /sdcard/window_dump.xml && start window_dump.xml