如何使用pythons UIAutomator获取列表框中的所有项目,其中一些项目没有显示在屏幕上

2024-09-28 21:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用Python和UIAutomator

  1. 计算整个页面上给定项目的数量(不只是显示)
  2. 在它们之间循环查看信息

在我的例子中,我有一个包含一些数据的呼叫列表,我想测试显示的呼叫数是否正确,并在列表中搜索特定的号码。 下面的练习是我想验证计数(以确保不会超过100)然后搜索部分调用的重复节点

    <node index="4" text="" resource-id="com.myd.dialer:id/fragment_recent_list_view" class="android.widget.ListView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="true" long-clickable="false" password="false" selected="false" bounds="[11,193][789,1145]">
      <node index="0" text="" resource-id="" class="android.widget.RelativeLayout" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[11,193][789,301]">
        <node index="0" text="1002" resource-id="com.myd.dialer:id/list_item_recent_text_view_name" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[86,204][432,247]" />
        <node index="1" text="11/07 08:40" resource-id="com.myd.dialer:id/list_item_recent_text_view_date" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[432,204][778,247]" />
        <node index="2" text="00:00:00" resource-id="com.myd.dialer:id/list_item_recent_text_view_duration" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[184,247][778,290]" />
      </node>
      <node index="1" text="" resource-id="" class="android.widget.RelativeLayout" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[11,302][789,410]">
        <node index="0" text="1004" resource-id="com.myd.dialer:id/list_item_recent_text_view_name" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[86,313][432,356]" />
        <node index="1" text="11/07 08:40" resource-id="com.myd.dialer:id/list_item_recent_text_view_date" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[432,313][778,356]" />
        <node index="2" text="00:00:00" resource-id="com.myd.dialer:id/list_item_recent_text_view_duration" class="android.widget.TextView" package="com.myd.dialer" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[184,356][778,399]" />
      </node>
      ...
    </node>



我能做到:

listViewObj = dev(resourceIdMatches="com.myd.dialer:id/fragment_recent_list_view")
listViewObj.fling.toEnd()  #will scroll to end of list
print("listViewObj count = ".format(str(listViewObj.count)))    # this is 0?
# get name objects
objs = dev(resourceIdMatches="com.myd.dialer:id/list_item_recent_text_view_name")
cnt = objs.count      # giving 9 not 99 or 100 etc (9 can show on the screen)
print("obs count = {}".format(str(cnt)))
for o in objs:
    print("{}".format(o.info['text']))  # will print text item

但这只会给我计数(并打印)屏幕上的项目。
我怎样才能访问整个列表

谢谢你


Tags: textcomviewidnodefalsetrueindex