Poco
Poco copied to clipboard
list(poco())某元素集(list>1),list[1]存在,但list[1].parent()元素出现异常IndexOutOfBoundsException
(请尽量按照下面提示内容填写,有助于我们快速定位和解决问题,感谢配合。否则直接关闭。)
(重要!问题分类)
- 图像识别相关问题 -> https://github.com/AirtestProject/Airtest/issues
- 测试开发环境AirtestIDE使用问题 -> https://github.com/AirtestProject/AirtestIDE/issues
- 控件识别、树状结构、poco库报错 -> 此仓库
描述问题bug (简洁清晰得概括一下遇到的问题是什么。或者是报错的traceback信息。) 想根据某元素id,遍历取其父元素的兄弟,但发现list[下标大于0时].parent()会出现IndexOutOfBoundsException异常
hrpc.exceptions.RpcRemoteException: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
|-- Remote Traceback --|
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.LinkedList.checkElementIndex(LinkedList.java:565) at java.util.LinkedList.get(LinkedList.java:486) at com.netease.open.libpoco.sdk.Selector.selectImpl(Selector.java:93) at com.netease.open.libpoco.sdk.Selector.selectImpl(Selector.java:98) at com.netease.open.libpoco.sdk.Selector.select(Selector.java:37) at java.lang.reflect.Method.invoke(Native Method) at com.netease.open.hrpc.backend.RpcServer.onRequest(RpcServer.java:171) at com.netease.open.hrpc.backend.RpcServer.serve(RpcServer.java:57) at fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:840) at fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:189) at java.lang.Thread.run(Thread.java:929)
|-- Remote Traceback end --|
复现步骤
- a=list(poco("id_member_point_pointPage_exchange_toExchange")) print(a) 能获取到元素共5个:[UIObjectProxy of "id_member_point_pointPage_exchange_toExchange[0]", UIObjectProxy of "id_member_point_pointPage_exchange_toExchange[1]", UIObjectProxy of "id_member_point_pointPage_exchange_toExchange[2]", UIObjectProxy of "id_member_point_pointPage_exchange_toExchange[3]", UIObjectProxy of "id_member_point_pointPage_exchange_toExchange[4]"]
- 尝试list[0]取元素&list[0].parent()取元素正常 print(poco("id_member_point_pointPage_exchange_toExchange")[0].exists()) print(poco("id_member_point_pointPage_exchange_toExchange")[0].parent().exists()) 均能成功返回均为True
- 尝试list[下标1-4]取元素,正常&list[下标1-4].parent()取元素,异常报错 print(poco("id_member_point_pointPage_exchange_toExchange")[1].exists()) 能正常返回True print(poco("id_member_point_pointPage_exchange_toExchange")[1].parent().exists()) 出现异常,报错IndexOutOfBoundsException
预期效果 (预期想要得到什么、见到什么) 期望能正常取到list[下标大于0]的父亲&其兄弟&子元素
相关截图

python 版本: python3.7.8
poco 版本: 1.0.69
poco版本通过
pip freeze可以命令可以查到
设备:
- 型号: HUAWEI nova8/oppo r11
- 系统: HarmonyOS 2.0/android 8.1
- (别的信息)
其他相关环境信息 暂无,目前airtestIDE中编译均会报错
感谢指出,目前这个问题暂时还在查,可以用一个临时方案来解决,例如:
with poco.freeze() as frozen_poco:
node = frozen_poco("com.android.settings:id/dashboard_tile")[1].parent().exists()
暂时将当前UI树冻结到frozen_poco之后再获取就可以了,具体的BUG修复我们会在后续版本中放出
https://airtestproject.s3.netease.com/temp_downloads/pocoservice-debug.apk?download=true 可以删除手机上的旧pocoservice.apk,重新安装链接里这个apk,应该是能够解决这个问题的