Appium Appium 下通过 OCR 的方式读取安卓的 toast 进行验证测试

xudong · 2016年08月11日 · 最后由 lionel126 回复于 2016年09月26日 · 2689 次阅读

针对 appium 下安卓 toast 的验证,之前搜了一下发现还没有中文的讨论,而 appium 英文论坛上提供了这么一个思路的方法 这里是原帖,个人亲测有效,把过程和坑点给大家分享一下

核心思路是通过 tesseract 这个开源的 ocr 软件来识别截图中的文字,通过判断 toast 中的文字是否在其中,来验证 toast 是否存在
个人使用的是 Python 环境,主要的环境依赖就是两个库,pytesseract 和 pillow
先是 pip 安装 pytesseract 和 pillow,这个对任何平台都是一样的。
然后是装 tesseract 软件本身,Ubuntu 比较简单就 sudo apt-get install tesseract 即可,
无奈本人的环境是 win,因此碰到了麻烦,从 https://github.com/tesseract-ocr/tesseract/wiki/Downloads 可以看到官方只提供了老版本 (3.0.2) 的编译包和语言库,这个包是个坑,千万不要用,它的中文库识别能力几乎为 0。光对比体积就能看出来了,这个库只有 10m,新版本则为 40m,所以大家千万不要用官方的老版本。

然后下面有三个第三方包可选,个人的经验如下:
第一个是 dropbox 的,公司网络虽然有梯子可惜禁了 dropbox,因此不能下。(好坏未知)
第二个是某德国大学的,我先下的这个,然而那个德国大学的下载地址速度只有几 k,也是醉了
第三个下载地址更搞笑,说自己无法提供 host 了,感谢另外一个人提供 host,跳转到第三方的第三方之后,开始下载;
最神奇的事情出现了,那个德国大学的下载速度忽然就被带起来了 = =!

都下完了之后,考虑到那个第三方的第三方说自己都是 beta 包,我就还是装了那个大学的包,因此只有大学的包是亲测有效的,另外两个大家可以自行踩雷(姚明脸)

当然,要识别中文,还要在 https://github.com/tesseract-ocr/tessdata 下载 chi_sim 的库来支持中文识别,然后把这个库复制到 'tessdata' 目录, 默认是 C:\Program Files\Tesseract OCR\tessdata 这样。

最后就是运行了,准备工作和截图我就省略了,直接放一下验证的 demo

import pytesseract
from PIL import Image

toast_text = 'xxx'
screenshot_text = pytesseract.image_to_string(Image.open('Screenshot.png'), lang='chi_sim')
if toast_text in screenshot_text:
  print 'toast is shown'
else:
  print 'toast is not shown'

运行结果对于 toast 中文字的识别还是比较有效,毕竟 toast 文字的背景色比较固定,好识别,如果要用来识别 app 内部的内容,效果不稳定,大家可以自己尝试。

共收到 7 条回复 时间 点赞

之前用 java 也有的这个方法,太坑啊,识别率有点低,后来还是根据他们说的第三方 APP 的方法来实现验证的

tesseract 识别度一般。

用 selendroid 不就行了

有些 toast 是有延迟的,怎么去判断 toast 的等待时间进行截图?

tesseract 识别度一般。

可以使用截图并去噪后的图片,通过调整图片大小增加识别准确度。

代码看上去没几行 但是 识别出的几率几乎是 0
看评论也不可行
update:
也没那么不堪 能识别出部分汉字

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册