首页 > 解决方案 > ADB 如何查找设置和提取坐标以便我可以通过编程方式执行点击?

问题描述

这是以下问题:ADB 无法打开列出并允许添加帐户的帐户设置

我知道 1 -adb shell am start -a android.settings.SETTINGS打开设备设置 2 -adb exec-out uiautomator dump /dev/tty我可以得到 UI 转储

我理解了

<node index="0" text="Passwords &amp; accounts" resource-id="android:id/title" class="android.widget.TextView" package="com.android.settings" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[198,1361][752,1441]" />

是我追求的选项,我可以从那里提取坐标,所以我可以以编程方式点击设置。

问题是没有唯一标识符(这因设备和操作系统版本而异)。某人如何唯一标识一个设置?

https://play.google.com/store/apps/details?id=cn.trinea.android.developertools这样做是为了改变 de Don't Keep Activity 设置。

标签: androidadb

解决方案


使用AndroidViewClient/culebra您可以执行以下操作:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

from com.dtmilano.android.viewclient import ViewClient

device, serialno = ViewClient.connectToDeviceOrExit()
device.startActivity(component='com.android.settings/.homepage.SettingsHomepageActivity')
vc = ViewClient(device, serialno)

MAX = 3
count = 0
text = "Accounts"

while True:
    vc.findViewByIdOrRaise("com.android.settings:id/main_content_scrollable_container").uiScrollable.flingForward()
    vc.dump(window=-1)
    try:
        vc.findViewWithTextOrRaise(text).touch()
        break
    except:
        count += 1
        if count > MAX:
            raise RuntimeError(f"Coulnd't find {text}");

dump请记住,如果您要查找的项目不在视图中(不包括屏幕外项目),您可能需要滚动列表。

此外,如果文本不同,您可以将其调整为您的 android 版本,也可以使用正则表达式。


推荐阅读