在以下文档中,你可能会看到带有
mid.
前缀的函数调用。如果你在 Playwright 中使用了解构赋值(object destructuring),如async ({ ai, aiQuery }) => { /* ... */}
,你可以不带这个前缀进行调用。这只是语法的区别。
.aiAction(steps: string)
或 .ai(steps: string)
- 控制界面你可以使用 .aiAction
来执行一系列操作。它接受一个参数 steps: string
用于描述这些操作。在这个参数中,你应该清楚地描述每一个步骤,然后 Midscene 会自动为你分析并执行。
.ai
是 .aiAction
的简写。
以下是一些正确示例:
务必使用清晰、详细的步骤描述。使用非常简略的指令(如 “发一条微博” )会导致非常不稳定的执行结果或运行失败。
在底层,Midscene 会将页面上下文和截图发送给 LLM,以详细规划步骤。随后,Midscene 会逐步执行这些步骤。如果 Midscene 认为无法执行,将抛出一个错误。
你的任务会被拆解成下述内置方法,你可以在可视化报告中看到它们:
目前,Midscene 无法规划包含条件和循环的步骤。
关联文档:
.aiQuery(dataShape: any)
- 从页面提取数据这个方法可以从 UI 提取自定义数据。它不仅能返回页面上直接书写的数据,还能基于“理解”返回数据(前提是多模态 AI 能够推理)。返回值可以是任何合法的基本类型,比如字符串、数字、JSON、数组等。你只需在 dataDemand
中描述它,Midscene 就会给你满足格式的返回。
例如,从页面解析详细信息:
.aiAssert(assertion: string, errorMsg?: string)
- 进行断言.aiAssert
的功能类似于一般的断言(assert)方法,但可以用自然语言编写条件参数 assertion
。Midscene 会调用 AI 来判断条件是否为真。若条件不满足,SDK 会抛出一个错误并在 errorMsg
后附上 AI 生成的错误原因。
断言在测试脚本中往往很重要。为了防止 AI 幻觉造成的错误断言(尤其是漏判了错误),你也可以用 .aiQuery
+ 普通 JS 断言的形式来替代 .aiAssert
。
例如你可以这么替代上一个断言代码:
.aiWaitFor(assertion: string, {timeoutMs?: number, checkIntervalMs?: number })
- 等待断言执行成功.aiWaitFor
帮助你检查你的断言是否满足,或是是否发生了超时错误。考虑到 AI 服务的成本,检查间隔不会超过 checkIntervalMs
毫秒。默认配置将 timeoutMs
设为 15 秒,checkIntervalMs
设为 3 秒:也就是说,如果所有断言都失败,并且 AI 服务总是立即响应,则最多检查 5 次。
考虑到 AI 服务的时间消耗,.aiWaitFor
并不是一个特别高效的方法。使用一个普通的 sleep
可能是替代 waitFor
的另一种方式。
设置 MIDSCENE_DEBUG_AI_PROFILE
变量,你可以看到每次调用 AI 的时间和 token 数量。
LangSmith 是一个用于调试大语言模型的平台。想要集成 LangSmith,请按以下步骤操作:
启动 Midscene 后,你应该会看到类似如下的日志: