poco c android,安卓apk安装授权UI存在但poco无法判断其存在(规律:从第 1、2 节点为起始点做poco检查,就会失败;从第3节点(android:id/content)位置开始做...

问题背景

参考开源库 DreamMultiDevices 来实现安卓设备的自动授权安装apk

实现思路,一台PC机链接多个安卓设备,每个设备启动一个进程,

apk安装场景,每个进程启动两个线程,一个负责adb install,一个负责监控判断是否存在安装授权界面,如果有,则自动点击授权,目前问题点,出在 MultiAdb.py 中的 InputEvent 函数操作(本bug涉及的代码,不在 DreamMultiDevices 库里,但关键代码语句,已贴在下文)

问题概述

安卓apk安装授权UI存在但poco无法判断其存在,不知道为啥?

核心代码语句(对应UI树信息可参考 “附:airtestIDE获取的 UI 树结构”)

pc1 = pocoAndroid("android.widget.FrameLayout").child("android.widget.LinearLayout").child(

"android:id/content").child("vivo:id/vivo_adb_install_buttons_panel").child(

"vivo:id/vivo_adb_install_ok_button")

if pc1.exists():

pc1.click()

实际调试发现,不会触发到 pc1.click() 代码行。

日志信息提示无法找到节点

oops! Cannot find any visible node by query UIObjectProxy of "android.widget.FrameLayout/android.widget.LinearLayout"

问题分析

通过调试发现,

poco('a')、poco('b')、poco('c')都能找到,但是poco('a').offspring('b').offspring('c')找不到。

(也试过offspring改成 child一样找不到,代码中有给到足够时间、和次数,轮询20次、每次sleep(1))

下面是具体调试过程记录

pycharm 单步调试也能获取到目标节点的父节点

目标节点

type : android.widget.Button

name : vivo:id/vivo_adb_install_ok_button

text : 安装

获取父节点调试代码

# 先通过 freeze 方式判断目标节点是否存在,如果存在,则继续exists click等操作,反之继续下一轮循环。方案来自群友 m-广州

with pocoAndroid.freeze() as fz_poco:

pc0 = fz_poco("vivo:id/vivo_adb_install_ok_button")

if pc0.exists():

obj = pc0.parent()

for _ in range(10): # 这里的 10 ,如果能依据 pc0 的 UI 层级深度的属性获取就好

try:

print(f'从目标节点开始打印其父节点 {obj.attr("name")}')

obj = obj.parent()

except:

break

上述调试代码,输出的父节点信息,符合 airtestIDE 获取到的 UI 树结构

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 321 从目标节点开始打印其父节点 vivo:id/vivo_adb_install_buttons_panel

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 321 从目标节点开始打印其父节点 android.widget.RelativeLayout

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 321 从目标节点开始打印其父节点 android:id/content

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 321 从目标节点开始打印其父节点 android.widget.LinearLayout

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 321 从目标节点开始打印其父节点 android.widget.FrameLayout

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 336 UI节点分开检查 android.widget.FrameLayout

2019-06-01 15:57:16 Module: MultiAdb, Function: InputEvent, Line: 342 oops! Cannot find any visible node by query UIObjectProxy of "android.widget.FrameLayout/android.widget.LinearLayout"

2019-06-01 15:57:17 Module: MultiAdb, Function: InputEvent, Line: 307 6SS4NNZHUSMFNRGM apk安装权限确认,循环第4次

附:airtestIDE获取的 UI 树结构

8d00444fbe57d0758f19d0b3a6c03750.png

环境信息

windows 7 64位 专业版 Service Package 1,16GB内存

vivo x6d手机,android 5.1,vivo ROM: Funtouch OS_2.5

airtestIDE: AirtestIDE_v1.2.1_2019-04-16_py3_win64_20190509161900

48a4da0bcf3d5a141d5c08451321c22b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值