3 个命令上手 Maestro AI:发版前自动揪出 UI 缺陷,还能顺手提取屏幕文本

发布时间:2026/9/11 11:26:34
3 个命令上手 Maestro AI:发版前自动揪出 UI 缺陷,还能顺手提取屏幕文本 3 个命令上手 Maestro AI发版前自动揪出 UI 缺陷还能顺手提取屏幕文本【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro发版前最耗时的环节之一是人工逐屏看截图找文字溢出、找布局错位、找颜色反了的地方。Maestro 的 AI 能力可以把这一步半自动化——在测试脚本里加一条命令截屏直接送去做 UI 缺陷检测返回结构化的问题列表同一套入口还支持把屏幕上的文本按自然语言查询提取出来存成变量。这篇文章带你走通 Maestro AI 这三件事assertNoDefectsWithAI、assertWithAI、extractTextWithAI。最小可跑示例一条命令检测整屏 UI 缺陷先给最短主流程。导出云端 key占位符换成你自己的export MAESTRO_CLOUD_API_KEYyour-cloud-api-key export MAESTRO_CLI_AI_KEYsk-your-llm-key在 Maestro 测试脚本末尾加一条断言appId: com.example.app --- - launchApp - assertNoDefectsWithAI跑maestro test flow.yaml。assertNoDefectsWithAI会自动截取当前整屏未压缩的原图字节交给云端分析没有缺陷就静默通过有缺陷则这一步直接失败报告里打印每条缺陷的reasoning。这就是它能解决的问题截图进缺陷列表出不用人肉盯像素。怎么调用 Maestro AI 的三个命令assertNoDefectsWithAI怎么调用、返回什么解决整屏有没有视觉问题。脚本里不需要传任何路径命令自己负责截图——你只需要保证此刻屏幕上是你想检查的页面。- launchApp - tapOn: 首页 - assert: 余额显示区 - assertNoDefectsWithAI底层走 maestro-ai/ 里的AIPredictionEngine.findDefects(screen: ByteArray)输入是截图字节数组输出是ListDefect每个Defect只有两个字段category和reasoning。拿到非空列表后Orchestra 会抛AssertionFailure失败消息形如Found 2 possible defects: - ...失败截图会被存进 debug 产物目录。解读它没有坐标、没有严重度分级给的是分类加自然语言理由定位靠你自己回看产物里的截图。assertWithAI怎么把一句自然语言断言跑起来解决某个该出现的内容出现了没有比如验证码输入框、活动横幅这类精确文本匹配不好写的界面。命令接收一个assertion字符串把截图和这句话一起送云端判断。- launchApp - tapOn: 登录 - assertWithAI: 屏幕上显示了用于输入验证码的输入框对应源码里performAssertion(screen, assertion)的返回是Defect?null表示断言通过非空时defect.reasoning就是失败原因同样会抛出AssertionFailure。解读断言写得越具体越稳。页面显示验证码输入框比页面正常有用得多后者会让模型给出含糊的判定。extractTextWithAI提取文本的查询参数怎么写解决屏幕上有文字但我拿不到它的确切值——WebView 里渲染的数字、Canvas 上的余额、动态生成订单号都属于这类。命令接收query自然语言和outputVariable变量名。- extractTextWithAI: query: 页面上显示的订单总金额只要数字 outputVariable: orderTotal - assert: text: 确认支付 visible: true - assertVariable: orderTotal 不为空返回是一个纯字符串存进outputVariable后给后续步骤用比如tapOn或再套一层正则断言。失败点很直接key 没配会抛CloudApiKeyNotAvailable查询太模糊返回的字符串可能是整段无关文案。把三个命令串进发版前的回归流程三者有明确的先后依赖先找茬再确认最后取值。- launchApp - assert: 首页 - assertNoDefectsWithAI # 第一关整屏无视觉缺陷 - assertWithAI: 顶部导航栏包含我的订单入口 # 第二关关键入口存在 - extractTextWithAI: query: 当前账户余额只要数字 outputVariable: balance - assertVariable: balance 只包含数字和小数点 # 第三关取到的值格式正确先跑assertNoDefectsWithAI是为了把纯视觉问题和内容缺失分开第一关挂了说明是渲染层面的回归第一关过了、第二关挂了说明内容本身没到位。最后一步只在前两步都过的前提下才有意义——从错屏里提取文本没有价值。把这条链放在登录页、首页、订单页等核心页面的用例末尾就能在常规 E2E 之外多筛出一层视觉回归。避坑与调优清单两个环境变量一个都不能少MAESTRO_CLOUD_API_KEY驱动云端缺陷/文本接口MAESTRO_CLI_AI_KEYOpenAIsk-...或 Anthropicsk-ant-api-...在 demo 应用里选择 LLM 模型。缺前者时执行到命令直接抛CloudApiKeyNotAvailable缺后者 demo 会报OpenAI API key is not provided。截图是全屏原图不是压缩图takeScreenshot(compressed false)的字节直接上传分辨率越高传得越多。弱网环境先修网络再怀疑 AI接口内部超时是连接 10 秒、请求 60 秒60 秒后按失败处理。断言查询写可验证的描述assertWithAI和extractTextWithAI的 prompt 都写具体对象加判断条件显示用于输入验证码的输入框模糊措辞会让reasoning变得不可解释。提取结果是字符串格式校验自己加extractTextWithAI不做类型判断想确认余额是1234.56这种形态用后续的assertVariable加正则别指望查询语句保证格式。AI 判定允许出错流程上留复核口失败信息的 debug 提示会建议你核对 debug 产物里的截图。批量跑时把 AI 失败的用例单独拉出来人工过一遍比整体重跑省事。并行注意限流官方 demomaestro-ai/README.md的--parallel选项本身就标注了 May get rate limited核心页用例多时串行跑 AI 步骤更稳。边界与下一步说清前提三个命令都依赖 Maestro 云端服务默认https://api.copilot.mobile.dev可用MAESTRO_CLOUD_API_URL覆盖截图字节会上传涉及敏感数据的界面慎用。它做不了整屏之外的细粒度分析——Defect没有坐标提取文本也没有区域参数想只检查局部只能先自己截局部。想继续往下走两条路一是读 maestro-ai/README.md 了解 demo 应用的截图命名规则app_编号_good/bad.png和模型切换二是直接看源码入口 maestro-ai/src/main/java/maestro/ai/Prediction.kt 和同目录的ApiClient.kt请求体FindDefectsRequest里assertion字段可空——传了就走断言模式不传就是纯找缺陷这就是assertWithAI和assertNoDefectsWithAI的差别来源。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考