android - 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 & 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 设置。
解决方案
使用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 版本,也可以使用正则表达式。