Skip to main content
Glama
yfmeii

WeChat Mini Program Dev MCP

by yfmeii

element_getInnerElements

Retrieve multiple elements within a specified component in WeChat Mini Programs using CSS selectors for automated testing and development workflows.

Instructions

在元素范围内获取元素数组,相当于 element.$$(selector)。重要:操作自定义组件内部元素时,必须先通过 ID 选择器(如 #my-component)定位自定义组件,然后使用此工具获取组件内部的元素数组。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
connectionNo
selectorYes
innerSelectorNo
targetSelectorYes

Implementation Reference

  • The main handler for 'element_getInnerElements' tool. It parses arguments, resolves the parent element, checks if $$ method is available, queries inner elements with targetSelector, extracts tagName and text for each, and returns formatted JSON with parent info, count, and elements details.
    function createGetInnerElementsTool(manager: WeappAutomatorManager): AnyTool {
      return {
        name: "element_getInnerElements",
        description: "在元素范围内获取元素数组,相当于 element.$$(selector)。重要:操作自定义组件内部元素时,必须先通过 ID 选择器(如 #my-component)定位自定义组件,然后使用此工具获取组件内部的元素数组。",
        parameters: getInnerElementsParameters,
        execute: async (rawArgs, context: ToolContext) => {
          const args = getInnerElementsParameters.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 innerElements = await element.$$(args.targetSelector);
              if (!Array.isArray(innerElements)) {
                throw new UserError(
                  `在元素 "${args.selector}" 内查询选择器 "${args.targetSelector}" 失败。`
                );
              }
    
              const elementsInfo = await Promise.all(
                innerElements.map(async (el, index) => {
                  const tagName = el.tagName || null;
                  const text = typeof el.text === "function"
                    ? await el.text().catch(() => null)
                    : null;
                  return {
                    index,
                    tagName: toSerializableValue(tagName),
                    text: toSerializableValue(text),
                  };
                })
              );
    
              return toTextResult(
                formatJson({
                  parentSelector: args.selector,
                  parentInnerSelector: args.innerSelector ?? null,
                  targetSelector: args.targetSelector,
                  count: innerElements.length,
                  elements: elementsInfo,
                })
              );
            }
          );
        },
      };
    }
  • Zod schema defining the input parameters for the tool: selector (required), innerSelector (optional), targetSelector (required), extending shared connectionContainerSchema.
    const getInnerElementsParameters = connectionContainerSchema.extend({
      selector: z.string().trim().min(1),
      innerSelector: z.string().trim().min(1).optional(),
      targetSelector: z.string().trim().min(1),
    });
  • Registration of the 'element_getInnerElements' tool via createGetInnerElementsTool(manager) within the exported createElementTools function that returns all element-related tools.
    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),
      ];
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yfmeii/weapp-dev-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server