针对 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 内部的内容,效果不稳定,大家可以自己尝试。