Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/tools/element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,8 @@ function createGetAttributesTool(manager: WeappAutomatorManager): AnyTool {
function createGetBoundingClientRectTool(manager: WeappAutomatorManager): AnyTool {
return {
name: "element_getBoundingClientRect",
description: "获取元素相对于视口的边界矩形信息(left、top、width、height、right、bottom)。此方法返回的是考虑 CSS transform 变换后的实际渲染尺寸和位置。支持跨组件查询:若需获取自定义组件内部元素,可将 selector 设为组件选择器,innerSelector 设为内部元素选择器。注意:目前仅支持 ID 选择器、类选择器。",
description: "获取元素相对于视口的边界矩形信息(left、top、width、height、right、bottom)。此方法返回的是考虑 CSS transform 变换后的实际渲染尺寸和位置。仅支持 ID 选择器、类选择器。" +
"若目标元素位于自定义组件内部,selector 必须指向「当前页面 wxml 源码中直接引用的那一层自定义组件,而非渲染后的组件树」,innerSelector 可在 selector 所指组件的整个子树内匹配。",
parameters: getBoundingClientRectParameters,
execute: async (rawArgs, context: ToolContext) =>
withUserErrorResult(async () => {
Expand Down
42 changes: 42 additions & 0 deletions src/tools/page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ const callPageMethodParameters = connectionContainerSchema.extend({
args: z.array(z.unknown()).optional(),
});

const getRendererParameters = connectionContainerSchema;

const waitForElementParameters = connectionContainerSchema.extend({
selector: z.string().trim().min(1),
timeout: z.coerce.number().int().positive().optional().default(5000),
Expand Down Expand Up @@ -58,6 +60,7 @@ export function createPageTools(manager: WeappAutomatorManager): AnyTool[] {
createGetPageDataTool(manager),
createSetPageDataTool(manager),
createCallPageMethodTool(manager),
createGetRendererTool(manager),
];
}

Expand Down Expand Up @@ -368,3 +371,42 @@ function createCallPageMethodTool(manager: WeappAutomatorManager): AnyTool {
}),
};
}

function createGetRendererTool(manager: WeappAutomatorManager): AnyTool {
return {
name: "page_getRenderer",
description: "获取当前页面运行时渲染引擎,返回 webview 或 skyline。",
parameters: getRendererParameters,
execute: async (rawArgs, context: ToolContext) =>
withUserErrorResult(async () => {
const args = getRendererParameters.parse(rawArgs ?? {});
return manager.withMiniProgram<ContentResult>(
context.log,
{ overrides: args.connection },
async (miniProgram) => {
let skylineInfo;
try {
skylineInfo = await miniProgram.callWxMethod("getSkylineInfoSync");
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new UserError(`调用 wx.getSkylineInfoSync() 失败: ${message}`);
}
Comment thread
yfmeii marked this conversation as resolved.

const isSupported =
typeof skylineInfo === "object" &&
skylineInfo !== null &&
"isSupported" in skylineInfo &&
Boolean((skylineInfo as { isSupported?: unknown }).isSupported);
const renderer = isSupported ? "skyline" : "webview";

return toTextResult(
formatJson({
renderer,
skylineInfo: toSerializableValue(skylineInfo),
})
);
}
);
}),
};
}
Loading