0

I'm trying to use CulebraTester2 to dump the Window hierarchy. I'm testing an app where the text of some TextView changes: the first time I call dumpWindowHierarchy the obtained JSON content corresponds to the text shown, when the text changes and I try to call again dumpWindowHierarchy, the text of the TextView remains unaltered in the JSON even if it actually has changed in the app. I've noticed instead that the bounds change. I need to get the actual text shown by the app, is there a way? Thanks.

UPDATE

I've tried using the mrin9 provided api and also using python vc.uiAutomatorHelper.ui_device.dump_window_hierarchy() and the result is the same: the text is not updated.

A snippet of the JSON:

{
    "id": 38,
    "parent": 36,
    "text": "Si pensa che porti fortuna mangiare:",
    "package": "com.mypackage",
    "checkable": false,
    "clickable": false,
    "index": 2,
    "content_description": "",
    "focusable": false,
    "resource_id": "questionDataQuestionText",
    "enabled": true,
    "password": false,
    "long_clickable": false,
    "long_text": "android.view.View_questionDataQuestionText id=38 parent=36",
    "clazz": "android.view.View",
    "scrollable": false,
    "selected": false,
    "checked": false,
    "focused": false,
    "bounds": [
        150,
        648,
        930,
        1010
    ],
    "children": []
}
silverIT
  • 11
  • 3

1 Answers1

0

I added the clock widget to the home screen as it has a changing text that we can use as an example (otherwise we both should install the same app which might not be possible).

clock widget

Then, using this script I could verify the text changes.

#! /usr/bin/env python3

import time

from com.dtmilano.android.viewclient import ViewClient

def search(resource_id, children):
    if not children:
        return
    for child in children:
        if child.resource_id == resource_id:
            print(child.text)
            return
        search(resource_id, child.children)


if __name__ == '__main__':
    device, serialno = ViewClient.connectToDeviceOrExit()
    vc = ViewClient(device, serialno, useuiautomatorhelper=True)

    while True:
        h = vc.uiAutomatorHelper.ui_device.dump_window_hierarchy()
        search('com.google.android.deskclock:id/clock', h.children)
        time.sleep(10)

and produces this output when run

⚠️ CulebraTester2 server should have been started and port redirected.
6:04
6:04
6:04
6:04
6:04
6:05
6:05
6:05
6:05
6:05
6:05
6:06
6:06
6:06

You can probably adapt the script and test your app.

Diego Torres Milano
  • 65,697
  • 9
  • 111
  • 134
  • I adapt the script and test my app but the problem of the text that is not updated remains. I found that if I tap the text before dump the window hierarchy then the text read from the script is correct: probably is a problem related to the app. Thank you for the help! – silverIT May 18 '22 at 17:27