由于最近有一个分量很重的windows Client需要测试,所以开始研究C/S的自动化。
其实一开始知道这个客户端是基于Node.js,并且使用Chromium内核,我是想使用Selenium的Webdriver驱动的。但是经过各种努力,发现无法突破第三方给Chromium自定义套的壳,且内核是不完整chromium,遂放弃。
也考虑过直接使用AutoIt来操作windows窗口,无奈在这种套壳Chromium下,窗口对象都是一团,无法操作。
也考虑过WindowsApplicationDriver,使用inspect或者FlaUInspect进行定位,或者使用windows更新推出的Accessibility Insights For Windows,但这些工具配套非常贫瘠,基本都没法用。
最后还是决定使用这类客户端自动化的最终解决方案 --- Robot framework+图像比对和识别
雏形:一个合格的UI自动化,需要以下几个要素:
1.元素定位方法
2.操作方法,最少包括鼠标和键盘操作
3.获取页面数据的方法
4.断言的方法
库的选择:老牌的图像比对和操作库,是大名鼎鼎的sikuli,但是sikuli后来专心去做sikulix去了,老的sikuli版本已经很久没有人维护了,所以主力图像识别库使用了RF官网首页上的ImageHorizonLibrary,反正大家都用的是opencv,虽然关键字比sikuli少一些,但是够用了(虽然后来还是做了很多二次开发)。
鼠标和键盘的操作,还是使用了AutoItLibrary,因为这个库可以补足ImageHorizonLibrary,通过图片获取其页面上的定位,然后操作坐标。
获取页面数据,考虑了很久,还是引入了OCR,通过Python的opencv库,对截图进行文字识别,由此,遇到了若干个坑:
1.获取验证码的方法,最后使用dddd库解决
2.编写获取指定区域的截图,封装了坐标和左上角图片,指定高和宽的矩形截图方法
3.灰化图像,忽略轻微色差造成的颜色差别
4.使用easyOCR库对图片内文字进行提取
5.编写解析EMBED的图像并保存的方法
6.编写在robot的html的log中插入本地截图的方法
7.编写基于特征的图片比对方法,根据阈值设定图像相似度
8.修改源代码,使其支持中文路径和中文图片名称



