You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

操作mat-autocomplete自动完成下拉框选取元素返回空数组如何解决

问题解决方法
  • 新增元素等待逻辑,避免提前查询未渲染内容
    你输入搜索词、按回车后,Angular需要异步处理数据、渲染下拉选项,此时立刻查询会拿到空结果,需要先等待目标元素渲染完成:
// 等待listbox加载出现
await page.waitForSelector("div[role='listbox']", {timeout: 3000})
// 等待至少一个option渲染完成
await page.waitForSelector("mat-option[role='option']", {timeout: 3000})
  • 修正元素查询逻辑
    从你给出的HTML结构来看,<mat-option>节点不属于<div role="listbox">的子节点,所以用listbox.$$查询子元素自然返回空值,直接从页面全局查询option即可:
const opt = await page.$$("mat-option[role='option']")

如果实际页面中mat-option是mat-autocomplete组件的子节点,也可以指定父节点缩小查询范围:

const opt = await page.$$("#mat-autocomplete-1 mat-option[role='option']")
  • 修正文本获取API
    Puppeteer/Playwright框架中获取元素文本的API是textContent(),不是原生DOM的innerText(),对应修改即可。

修改后的完整可运行代码

await page.click('input[placeholder="search"]')
await page.keyboard.type('e');
await page.keyboard.press('Enter');

// 新增等待逻辑
await page.waitForSelector("div[role='listbox']", {timeout: 3000})
await page.waitForSelector("mat-option[role='option']", {timeout: 3000})

// 直接全局查询option
const opt= await page.$$("mat-option[role='option']");
const allUrls = await Promise.all(opt.map(async (option, i) => {
    return await option.textContent()
}))
console.log(opt);
console.log(allUrls);

内容的提问来源于stack exchange,提问作者genc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:24:02