• 能贴一下识别的图么,一般正常字是没什么问题的,识别不了的话可以调调 pytesseract 的配置参数或者对图片做预处理 (二值化、降噪等等)
    另外要看具体使用场景,看是否需要使用 OCR,有可能其他的方式也能做
    另外还有其他 AI 开放平台的 api 可以用,识别中文应该比 pytesseract 更好一些

  • 是 bug,既然前端都做了删除禁用,业务逻辑上当然是不能删除订单的,后端也要保持一致,只是后端没有去做这样的校验而已。健康的系统是必须前后端都做好校验的,可以反馈给开发,看他改不改,正常来说改一下也没有多大难度。如果是内部使用的工具,他也不想改,风险可控的话,可以抛出来让研发组长之类的人去做决定,看是否需要修复。

  • 楼上讲的取小数乘 1000 之后取整是 ok 的,另外还有一种办法,随机生成 0~N 的数,可以用随机数对 N 取余,这里是 (0, 1),数值比较小,就可以先扩大 10000 倍再对 1000 取余也是可以的。

  • 通过调节模板图片尺寸的方法来适配不同分辨率并不好用,以前的团队几年前就试过这个方法了,当图像场景复杂时,很容易出现既没有匹配到目标元素,还因为改变了尺寸,匹配到了其他不相关的元素,更加影响报错分析。

    通常不同图片在不同分辨率的变化是相同的,可能会有几种变化规律,只要对这几类变化规则进行总结,根据当前分辨率来对模板图片进行调整,就可以实现一张模板图用在不同分辨率上,比增加步长的方式更稳定。

    总结来说就是寻找变化的规律比瞎猜更有用。不过近几年 CV 发展挺快的,特征匹配和物体检测同样可以对模板匹配进行补充。

  • 没做过类似的测试,不过可以写写自己的思路。
    1.可以实现翻译库到 xml 文件的自动生成,按理说翻译库和 xml 文件都是有固定规则和模式的,开发没必要全部手动写 xml,这样只要自动生成的工具没问题,那翻译库和 xml 就永远是对应的。不再需要测试 xml 文件,只需要关注翻译库。

    2.同样利用翻译库和 xml 的规则,分别对翻译库和 xml 文件进行解析。再对比两边的数据,断言文本的个数、key,顺序以及对应的翻译值,和接口参数对比测试很像。

  • Template 类看起来像是读取本地图片然后转换成像素矩阵,也可以尝试重写 Template 类实现读取网络图片流,不过还是建议用本地文件夹来做缓存,全部从网络下载很容易受延迟的影响

  • 没怎么用过 airtest,看方法调用的话应该是框架已经写好读取本地图片了。
    可以换一种方法用程序把图片下载下来转成本地图片后再透传给 airtest

    class Pic:
    
        def __init__(self):
            self.pic1 = "filepath"
            self.pic2 = "filepath"
    
        def __getattribute__(self, item):
            filepath = object.__getattribute__(self, item)
            # 解析图片名
            # 本地图片文件夹有文件就返回本地路径
            # 本地没有就从互联网下载图片再返回本地路径
            return "local path"
    
    
    print(Pic().pic1)
    
    
  • 看起来场景和游戏规则还是比较简单的,可以讲一下我的思路。

    1. 获取场景信息:游戏共两个部分,上面的输入区域和下面的字母选择区域,上面区域的关键点在于输入区域的定位,用图像处理可以搞定,下面区域的关键点在于字母的识别,用 OCR 可以搞定。

    2. 处理游戏规则:这种填字游戏还是比较简单,录入一个单词库,然后枚举当前可输入字母和输入区域已有字母,组成单词然后匹配单词库就 ok,单词匹配成功后选择对应的字母就行。

    3. 用什么工具:airtest 完全可以搞定,自己写脚本的话会更灵活一些。我个人使用工具的话,图像处理方面可能会用 opencv,ocr 识别用 pytesseract,算是比较通用的库吧。广告的话在每个操作或识别前加一个广告的判断,有广告就执行取广告的操作就可以。

  • uiautomation 这个库其实就是使用句柄的,一个控件有很多属性,句柄只是一个识别 id,还有其他的 className, text 等等,有些控件是没有文本的,一个窗体下可能有多个相同的控件,所以类名也有可能重复。
    使用句柄的只适合一些系统自动应用或.net 框架写的应用,遇到一些自定义 ui 的应用就不适用,游戏类型的也拿不到里面的控件或页面信息,这时候就可以使用图像识别 + 键鼠模拟,图像识别做模板、特征匹配定位元素,键鼠 driver 执行对应的输入,点击等操作。
    可以看下网易的 air test,它不是最好的解决方案,但是基本包括了一些基础的做法,可以让你了解到怎么使用 CV+HID(human interface device) 的方式去做 UI 自动化。
    https://airtest.netease.com

  • 控制句柄的方式比较直接,直接调库就可以控制,类似 appium,也有对应的 windriver。windows 上的 ui 自动化也可以考虑用图像识别 + 键鼠控制的方式来做,图像识别用 opencv,控制用 pyautogui 之类的库。

  • 前面的用例挂了由前面的用例恢复环境,回到用例执行之前的入口,不要在后面的用例去判断,tear_down 要做到开始之前是什么样,结束之后就什么样。

  • 每一条用例都是有环境准备和后置处理的,尽量保证每一条用例都是独立的,不要依赖前一项用例。
    另外对于 UI 自动化来说,路径之间都是有逻辑可循的,用数据结构 - 图的方式记录 UI 节点之间的关系,跳转方式,其实可以写一套通用的页面跳转方法。