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

如何在Playwright测试中向假麦克风发送音频并控制播放时机

解决方案:在Playwright测试中按需触发模拟音频捕获

方法1:通过Chrome DevTools Protocol(CDP)动态控制音频播放

无需在启动Chromium时指定自动播放音频的参数,而是在测试需要播放音频的时机,通过CDP命令动态注入音频文件并启动捕获,实现按需触发。

示例代码:

test("mytest", async ({ browser }) => {
  // 启动浏览器,不添加自动播放音频的启动参数
  const context = await browser.newContext();
  const page = await context.newPage();

  // 打开应用并导航到语音识别页面
  await page.goto("你的语音识别页面URL");

  // 授予麦克风权限,确保应用能访问音频源
  await context.grantPermissions(["microphone"]);
  
  // 按需启动目标音频的模拟捕获
  await context.send("Media.setAudioFakeInput", {
    file: "/path/to/your/myfile.wav", // 替换为你的音频文件实际路径
    repeat: false, // 是否重复播放,按需设置
  });

  // 根据音频长度和应用识别速度,设置合理等待时间(建议用元素出现等精准条件替代固定超时)
  await page.waitForTimeout(5000);

  // 验证语音识别结果
  const recognizedText = await page.locator("#识别结果元素选择器").innerText();
  expect(recognizedText).toContain("音频中的目标文本");

  // 停止模拟音频输入(可选操作)
  await context.send("Media.clearAudioFakeInput");

  await context.close();
});

方法2:动态切换音频文件(适配已用启动参数的场景)

如果必须使用-use-file-for-fake-audio-capture启动参数,可以通过替换指定音频文件的内容,配合重启捕获实现按需播放:

  1. 启动时指定一个空白静音音频文件作为默认捕获源
  2. 需要播放目标音频时,将目标音频覆盖到指定的空白文件路径
  3. 通过CDP命令重启媒体捕获,触发新音频的播放

示例代码(Node.js环境):

import * as fs from "fs";

test("mytest", async ({ browser }) => {
  const placeholderAudioPath = "/path/to/silent-placeholder.wav";
  const targetAudioPath = "/path/to/myfile.wav";
  const originalPlaceholderPath = "/path/to/original-silent.wav"; // 备份空白音频文件

  // 启动浏览器,指定空白音频作为初始fake捕获源
  const context = await browser.newContext({
    args: [`--use-file-for-fake-audio-capture=${placeholderAudioPath}`],
  });
  const page = await context.newPage();

  // 打开应用并导航到语音识别页面
  await page.goto("你的语音识别页面URL");

  // 替换空白音频为目标音频,重启捕获触发播放
  fs.copyFileSync(targetAudioPath, placeholderAudioPath);
  await context.send("Media.restartMediaCapture");

  // 等待识别完成
  await page.waitForTimeout(5000);

  // 验证识别结果
  const recognizedText = await page.locator("#识别结果元素选择器").innerText();
  expect(recognizedText).toContain("音频中的目标文本");

  // 恢复空白音频文件(可选操作)
  fs.copyFileSync(originalPlaceholderPath, placeholderAudioPath);

  await context.close();
});

注意事项:

  • 确保音频文件为Chromium支持的格式(如WAV、PCM)
  • 优先使用精准的等待条件(如等待识别结果元素加载完成)替代固定超时
  • 使用CDP命令前需确保浏览器上下文已获取麦克风权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:53:20