element_getInnerElement
Retrieve specific elements within a WeChat Mini Program component using CSS selectors. This tool helps developers locate and interact with nested elements inside custom components for testing and automation purposes.
Instructions
在元素范围内获取元素,相当于 element.$(selector)。重要:操作自定义组件内部元素时,必须先通过 ID 选择器(如 #my-component)定位自定义组件,然后使用此工具获取组件内部的元素。
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No | ||
| selector | Yes | ||
| innerSelector | No | ||
| targetSelector | Yes |
Implementation Reference
- src/tools/element.ts:237-289 (handler)Full tool handler for 'element_getInnerElement': resolves parent element using resolveElement, queries inner element with element.$(targetSelector), extracts tagName, text, and outerWxml, returns formatted JSON.function createGetInnerElementTool(manager: WeappAutomatorManager): AnyTool { return { name: "element_getInnerElement", description: "在元素范围内获取元素,相当于 element.$(selector)。重要:操作自定义组件内部元素时,必须先通过 ID 选择器(如 #my-component)定位自定义组件,然后使用此工具获取组件内部的元素。", parameters: getInnerElementParameters, execute: async (rawArgs, context: ToolContext) => { const args = getInnerElementParameters.parse(rawArgs ?? {}); return manager.withPage( context.log, { overrides: args.connection }, async (page) => { const element = await resolveElement( page, args.selector, args.innerSelector ); if (typeof element.$ !== "function") { throw new UserError( `元素 "${args.selector}" 不支持查询内部元素。` ); } const innerElement = await element.$(args.targetSelector); if (!innerElement) { throw new UserError( `在元素 "${args.selector}" 内未找到选择器 "${args.targetSelector}" 对应的元素。` ); } const tagName = innerElement.tagName || null; const text = typeof innerElement.text === "function" ? await innerElement.text().catch(() => null) : null; const outerWxml = typeof innerElement.outerWxml === "function" ? await innerElement.outerWxml().catch(() => null) : null; return toTextResult( formatJson({ parentSelector: args.selector, parentInnerSelector: args.innerSelector ?? null, targetSelector: args.targetSelector, tagName: toSerializableValue(tagName), text: toSerializableValue(text), outerWxml: toSerializableValue(outerWxml), }) ); } ); }, }; }
- src/tools/element.ts:47-51 (schema)Input schema (Zod) for element_getInnerElement: selector (required), innerSelector (optional), targetSelector (required).const getInnerElementParameters = connectionContainerSchema.extend({ selector: z.string().trim().min(1), innerSelector: z.string().trim().min(1).optional(), targetSelector: z.string().trim().min(1), });
- src/tools/element.ts:70-84 (registration)Local registration of element_getInnerElement tool within createElementTools, which returns an array of element tools including this one.export function createElementTools( manager: WeappAutomatorManager ): AnyTool[] { return [ createTapElementTool(manager), createInputTextTool(manager), createCallElementMethodTool(manager), createGetElementDataTool(manager), createSetElementDataTool(manager), createGetInnerElementTool(manager), createGetInnerElementsTool(manager), createGetElementSizeTool(manager), createGetElementWxmlTool(manager), ]; }
- src/tools.ts:7-13 (registration)Higher-level registration including element tools (thus element_getInnerElement) via spread of createElementTools(manager).export function createTools(manager: WeappAutomatorManager): AnyTool[] { return [ ...createApplicationTools(manager), ...createPageTools(manager), ...createElementTools(manager), ]; }
- src/index.ts:17-17 (registration)Top-level MCP server registration: adds all tools from createTools, which includes element_getInnerElement.server.addTools(createTools(manager));