从 Web 诞生之日起,UI 自动化就成了测试的难点,尽管发展了很多的 webdriver 驱动和图片 diff 驱动的工具,但它们的投入产出比一直被质疑,自动化率越高维护成本越高,大部分都做着就放弃了,还有一部分在做与不做间纠结。本文结合一些开源的项目探索使用 GPT 自动做 UI 测试的可能性。当前 UI 的主要问题是通过 Webdriver 控制浏览器执行,这些工具都需要先查找到对应元素的 Elements,无论是录制的还是自己编写的在面对 UI 变化,元素变化时都需要耗费很大的精力去重新识别,解析 Dom 查找,这个工作乏味且没有效率;另一种是通过图像进行点击,比如 Sikuli 这种工具,主要的问题也是复用性较差,换个分辨率的机器或者图片发生少的改动就不可用。使用 GPT 做 UI 测试尝试了两种方案:第一种将 Html 元素投喂给 GPT,效果一般,因为 Html 比较大,Token 的消耗很大;第二种思路是让 GPT 像人一样思考和测试,比如一个人打开一个网页后,他通过眼睛看到的页面文字或图标,然后用手完成点击和输入的操作,最后通过页面的弹窗或者文字来识别是否有错误,这几个动作通过大脑统一协调。新的方案主要结合 Playwright,SoM视觉标记,GPT4Vison,GPT4,AutoGen来实现。主要的原理是:通过 Playwright进行浏览器操作,相当于“手”;进行SoM 视觉数据标记,相当于“眼睛”;通过GPT4+AutoGen 将这些步骤串起来实现协调控制,相当于“大脑”和“神经中枢”。使用 Playwright 注入 JS,进行 SoM 视觉提示标记。如前文提到的 GPT4V 并不能有效的识别 Web 的元素,所以在使用 GPT4V 之前进行图像标记,图像标记现在有两种方式,一种是通过 AI 识别图片进行标记,另一种是通过在浏览器中注入 pagemark.js,利用 Playwright 执行 js 函数来完成页面的标记。Prompt 提取元素坐标,利用正则表达式从GPT4V 的 response 中提取查询到的元素的 bbox id,结合在 SoM 标记中记录的 json 文件,找到编号的元素坐标。Playwright是一个非常强大的操作浏览器的工具,这里因为前面已经通过 GPT4V 识别了图片,所以我们主要通过 坐标 的方式来控制元素,不再需要解析Dom 来控制,主要的包括,点击,双击,鼠标拖动,输入,截图等。AutoGen是一个代理工具,它能够代理多个 LLM在不同会话间切换,能够自动的调用预定的函数,并协调这些 LLM 完成任务。在上面的程序中,实现了:眼睛:通过 GPT4V 来识别元素;手:通过 Playwright 来做各种操作;后面需要通过一个大脑来协调手、眼完成任务,这里通过 GPT4+AutoGen 来实现大脑的协同调度。当前的主要问题包括 GPT 在中文语境下识别的不太友好,AutoGen 对于处理预定义的动作也会有问题,GPT4V 真的很贵。未来的想法是将每次向 GPT4V请求的图像识别做本地化处理,结合现有的一些测试方法,从而减少 Token,缩短执行耗时;面向业务的 GPT需要不断训练,将系统使用手册和一有的 PRD 文档投喂给 GPT,增强 gpt 的系统识别和测试能力。