| 322 | const rootAx = axNodes.find(n => !childSet.has(n.nodeId)) || axNodes[0]; |
| 323 | |
| 324 | function buildTree(nodeId, indent = 0) { |
| 325 | const axNode = axMap.get(nodeId); |
| 326 | if (!axNode) return ''; |
| 327 | const domNode = backendIdToDomNodeMap.get(axNode.backendDOMNodeId); // Use backendIdToDomNodeMap |
| 328 | const role = axNode.role?.value || ''; |
| 329 | const name = axNode.name?.value || ''; |
| 330 | const tag = domNode ? `<${domNode.nodeName.toLowerCase()}>` : ''; |
| 331 | let str = axNode.backendDOMNodeId |
| 332 | ? `${' '.repeat(indent)}[${axNode.nodeId}] ${role}${tag ? ' ' + tag : ''}${name ? ': ' + name : ''}\n` |
| 333 | : `${' '.repeat(indent)}[${axNode.nodeId}] ${role}${tag ? ' ' + tag : ''} <no DOM>\n`; |
| 334 | if (domNode && domNode.nodeId) { |
| 335 | idToXPath[axNode.nodeId] = idToXPath[domNode.nodeId]; |
| 336 | } |
| 337 | for (const childId of axNode.childIds || []) { |
| 338 | str += buildTree(childId, indent + 1); |
| 339 | } |
| 340 | return str; |
| 341 | } |
| 342 | |
| 343 | const tree = buildTree(rootAx.nodeId, 0); |
| 344 | lastIdToXPath = idToXPath; // Store the mapping globally |