两个Uiautomator性能提升技巧

发表于:2018-5-21 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:郭百度    来源:简书

  最近在给自己的AGI助理写眼睛,开头用requests库,后来发现很多信息是加密的,在引入图形识别和OCR之前,为了便捷处理用了uiautomator https://github.com/xiaocong/uiautomator,发现了几个问题
  开头尝试用
try:
d('过滤条件').info
expect:
print('未找到对应控件')
  的方式来监听是否在锁屏界面,后来发现这个代码执行效率非常之低。
  无意中发现使用
if d('过滤条件').count==0:
print('未找到对应控件')
  的方法,说明count比info效率更高。
  另一个性能问题是官方文档带来的:
# get the count of views with text "Add new" on current screen
d(text="Add new").count
# same as count property
len(d(text="Add new"))
# get the instance via index
d(text="Add new")[0]
d(text="Add new")[1]
...
# iterator
for view in d(text="Add new"):
view.info  # ...
  其中提到的 for view in d()的方式性能极其低下,似乎每取一个元素都耗费一次I/O,基本一个清单读取都要25-37秒的等待,在发现这个问题后,使用dump()出xml文本,进而逐行进行xml解析,一个list不到1秒就解析完成
def xmlKeyword(file,textBefore,textBehind):
eList=''
f=open(file)
for line in f:
beginNum = line.find(textBefore) + len(textBefore)
endNum = line.find(textBehind, beginNum)
result = line[beginNum:endNum]
#过滤条件1,找到末尾元素endNum为-1
if endNum == -1:
result=''
#过滤条件2,包含文字行过滤,等同文字行过滤
if '包含文字过滤' in result or result=='等同文字1' or result=='相同文字2':
result=''
print(result)
if result != '':
eList=eList + result + '\n'
f.close()
return eList
  中途还尝试了使用uiautomator2,后来由于端口调试问题,需要用到python2.7,最后放弃了这个性能更好的库。
  虽然mac里自带了2.x版本的python,但由于之前写过一段时间混编,而且使用配套的视图软件会导致android SDK自带的uiautomatorViewer连接不上手机,还是更换使用uiautomator。
  等工具运作起来下一阶段就是在工具的框架上替换升级模块,比如视觉部分可以从ID等升级到图形识别,手和大脑可以考虑升级自我学习,自我编辑验证脚本,能自己写自己代码的AI才是好AI。
  关于进展,目前的助理已经可以帮我完成各应用市场联想词的收集,类似市面上ASO100的数据,但由于是助理定制,接下来要写分析和决策模块,目的是解放互联网运营天天盯数据分析数据带来的重复劳动枷锁。
  前期还是重决策,希望快速进入决策模块编写,至少为该工具化形态写1000条以上的决策,分析提炼后进入自动化阶段,完成后再抽象思维真正进入AGI阶段。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号