AirtestProject / AirtestProject/Poco

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

Abierto
#207 1 comentario 0 reacciones 1 asignado Reclamado por @adolli Ver en GitHub
Lenguaje dominante
Python
Estrellas
2k
Forks
341
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

**问题背景**
参考开源库 [DreamMultiDevices](https://github.com/saint228/DreamMultiDevices) 来实现安卓设备的自动授权安装apk
实现思路,一台PC机链接多个安卓设备,每个设备启动一个进程,
apk安装场景,每个进程启动两个线程,一个负责adb install,一个负责监控判断是否存在安装授权界面,如果有,则自动点击授权,目前问题点,出在 [MultiAdb.py](https://github.com/saint228/DreamMultiDevices/blob/master/core/MultiAdb.py) 中的 InputEvent 函数操作(本bug涉及的代码,不在 [DreamMultiDevices](https://github.com/saint228/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 树结构
![image](https://user-images.githubusercontent.com/386347/58746121-248d3580-848d-11e9-971a-c7d8c8969d53.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
![image](https://user-images.githubusercontent.com/386347/58745969-438ac800-848b-11e9-9031-77f5af9ff4f6.png)

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.