AirtestProject / AirtestProject/Poco

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

Open
#207 1 comment 0 reactions 1 assignee Claimed by @adolli View on GitHub
Dominant language
Python
Stars
2k
Forks
341
PR merge metrics
No merged PRs in 30d

Description

**问题背景**
参考开源库 [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)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.