Poco icon indicating copy to clipboard operation
Poco copied to clipboard

Poco元素查询耗时很长

Open steveleeh opened this issue 2 years ago • 10 comments

问题分类 控件识别、树状结构

描述问题bug 在 Poco 1.0.87 版本后,某些场景出现查询节点耗时很慢的问题。

# 例子运行在AirTest中,直接python触发效果也等同,因此排除AirTest导致。
from airtest.core.api import *
import json
import inspect
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)


auto_setup(__file__)


last_time = time.time()
ui = poco.agent.hierarchy.dump()
print("poco获取dump耗时" + str(time.time() - last_time))

last_time = time.time()
poco("add_passenger_button").exists()
print("poco查询元素存在耗时" + str(time.time() - last_time))

last_time = time.time()
poco("add_passenger_button").click()
print("poco点击耗时" + str(time.time() - last_time))

# 打印的结果
============================================================

[Start running..]
save log in '/var/folders/1x/65cvlf_d715ct5kzqtbnzdqm0000gn/T/AirtestIDE/scripts/5abc0f154388cfbfe093f75f50d61f56'
poco_target
/Applications/AirtestIDE.app/Contents/MacOS/poco/drivers/android/uiautomation.py
poco获取dump耗时0.5019688606262207
poco查询元素存在耗时10.28783893585205
[12:18:34][INFO]<airtest.core.android.rotation> update orientation None->0
poco点击耗时14.770931243896484
----------------------------------------------------------------------
Ran 1 test in 28.339s

OK
[Finished]

============================================================

#耗时正常日志
============================================================

[Start running..]
save log in '/var/folders/1x/65cvlf_d715ct5kzqtbnzdqm0000gn/T/AirtestIDE/scripts/5abc0f154388cfbfe093f75f50d61f56'
poco获取dump耗时1.6259679794311523
poco查询元素存在耗时0.3818488121032715
[12:31:51][INFO]<airtest.core.android.rotation> update orientation None->0
poco点击耗时4.8794450759887695
----------------------------------------------------------------------
Ran 1 test in 9.681s

OK
[Finished]

============================================================

复现步骤

  1. 降低Poco版本到 1.0.84 此问题没有出现。
  2. 继续测试发现,将Poco的版本保持在1.0.84(低版本),Poc Service 的APK的版本升级到 1.0.45(高版本),耗时变得很长。
  3. 将Poco的版本保持在1.0.87(高版本),Poc Service 的APK的版本降低到 1.0.43(低版本),耗时正常。

由此推断,是Poco Service Apk升级后,导致某些场景查询exist 和 click事件耗时很长。

预期效果 希望查询耗时正常。

相关截图 (贴出遇到问题时的截图内容,如果有的话)

python 版本: Python 3.8.9

poco 版本: 1.0.87

设备:

  • 型号: [三星s8+]
  • 系统: [eAndroid 9]
  • (别的信息)

其他相关环境信息 排除平台和手机特性导致。测试了不同机型的手机,和所有平台的环境,均能稳定复现。

steveleeh avatar Aug 16 '22 04:08 steveleeh

原因 因为pocoservice.apk,有个waitForIdle的方法耗时会很长。这个方法,如果页面没有稳定,就会一直等,等到最大10s超时,然后获取结果。query,exist等方法,这种情况下返回都会很慢(>10s)。 解决的方法 把超时时间改短,waitForIdle(500) ,重新打包,基本不会有什么问题。 本质原因 我们的项目中,有循环动画,会导致一直重复触发Accesiblity 动画开始事件,导致画面一直没法处于稳定状态。但是因为我们的动画场景很多,因此选择了修改waitForIdle。 建议 设置这个waitForIdle是否可以开放设置,这种动画场景应该也挺常见的。

steveleeh avatar Oct 19 '22 13:10 steveleeh

原因 因为pocoservice.apk,有个waitForIdle的方法耗时会很长。这个方法,如果页面没有稳定,就会一直等,等到最大10s超时,然后获取结果。query,exist等方法,这种情况下返回都会很慢(>10s)。 解决的方法 把超时时间改短,waitForIdle(500) ,重新打包,基本不会有什么问题。 本质原因 我们的项目中,有循环动画,会导致一直重复触发Accesiblity 动画开始事件,导致画面一直没法处于稳定状态。但是因为我们的动画场景很多,因此选择了修改waitForIdle。 建议 设置这个waitForIdle是否可以开放设置,这种动画场景应该也挺常见的。

如何重新打包这个pocoservice.apk呢,请教一下方法,最近脚本跑的实在有点太慢了

chengxiao avatar Nov 25 '22 14:11 chengxiao

这个是已经打包好的apk,在airtest相关安装路径替换即可,mac下在 /Library/Python/3.8/site-packages/poco/drivers/android/lib/pocoservice-debug.apk

------------------ 原始邮件 ------------------ 发件人: "AirtestProject/Poco" @.>; 发送时间: 2022年11月25日(星期五) 晚上10:27 @.>; @.@.>; 主题: Re: [AirtestProject/Poco] Poco元素查询耗时很长 (Issue #559)

原因 因为pocoservice.apk,有个waitForIdle的方法耗时会很长。这个方法,如果页面没有稳定,就会一直等,等到最大10s超时,然后获取结果。query,exist等方法,这种情况下返回都会很慢(>10s)。 解决的方法 把超时时间改短,waitForIdle(500) ,重新打包,基本不会有什么问题。 本质原因 我们的项目中,有循环动画,会导致一直重复触发Accesiblity 动画开始事件,导致画面一直没法处于稳定状态。但是因为我们的动画场景很多,因此选择了修改waitForIdle。 建议 设置这个waitForIdle是否可以开放设置,这种动画场景应该也挺常见的。

如何重新打包这个pocoservice.apk呢,请教一下方法,最近脚本跑的实在有点太慢了

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

steveleeh avatar Nov 28 '22 12:11 steveleeh

原因 因为pocoservice.apk,有个waitForIdle的方法耗时会很长。这个方法,如果页面没有稳定,就会一直等,等到最大10s超时,然后获取结果。query,exist等方法,这种情况下返回都会很慢(>10s)。 解决的方法 把超时时间改短,waitForIdle(500) ,重新打包,基本不会有什么问题。 本质原因 我们的项目中,有循环动画,会导致一直重复触发Accesiblity 动画开始事件,导致画面一直没法处于稳定状态。但是因为我们的动画场景很多,因此选择了修改waitForIdle。 建议 设置这个waitForIdle是否可以开放设置,这种动画场景应该也挺常见的。

如何重新打包这个pocoservice.apk呢,请教一下方法,最近脚本跑的实在有点太慢了

附件似乎是被Github过滤掉了,邮件里和回复里都找不到附件..... 可否重新发个mail给我 [email protected] , 谢谢

chengxiao avatar Nov 30 '22 09:11 chengxiao

@steveleeh 也遇到了相同的问题,10s,结果已经过去了。这个apk,能发下吗,非常感谢。 [email protected]

chaooe avatar Dec 07 '22 10:12 chaooe

我们公司的测试项目在使用poco 1.0.87的时候也遇到了类似的问题,一度还以为是应用本身的问题或者uiautomator的问题,希望社区能将waitForIdle的等待时间开放设置。另外如果有大佬已经有重新打包的apk,能不能发个邮件到[email protected],或者放到某个网盘上面,谢谢。

9nehS avatar Dec 08 '22 02:12 9nehS

我们公司的测试项目在使用poco 1.0.87的时候也遇到了类似的问题,一度还以为是应用本身的问题或者uiautomator的问题,希望社区能将waitForIdle的等待时间开放设置。另外如果有大佬已经有重新打包的apk,能不能发个邮件到[email protected],或者放到某个网盘上面,谢谢。

Did you get the apk? Can you send it to my email please. [email protected]

traffhub avatar Dec 27 '22 14:12 traffhub

我们公司的测试项目在使用poco 1.0.87的时候也遇到了类似的问题,一度还以为是应用本身的问题或者uiautomator的问题,希望社区能将waitForIdle的等待时间开放设置。另外如果有大佬已经有重新打包的apk,能不能发个邮件到[email protected],或者放到某个网盘上面,谢谢。

Did you get the apk? Can you send it to my email please. [email protected]

Not yet

9nehS avatar Dec 28 '22 10:12 9nehS

@steveleeh Can you send it to my email please. [email protected]

luohui1993 avatar Dec 04 '23 09:12 luohui1993

这个问题是不是在v1.0.94中已经解决了?

9nehS avatar Jan 08 '24 08:01 9nehS