AirtestProject / AirtestProject/Poco
安卓apk安装授权UI存在但poco无法判断其存在(规律:从第 1、2 节点为起始点做poco检查,就会失败;从第3节点(android:id/content)位置开始做检查,就成功)
- 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 树结构

**环境信息**
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

Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.