AirtestProject / AirtestProject/Poco

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

Đang mở
#207 1 bình luận 0 reaction 1 người được giao Được @adolli nhận Xem trên GitHub
Ngôn ngữ chính
Python
Star
2k
Fork
341
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.