谷歌浏览器插件 使用 playwright 回放用户动作键盘按键特殊处理方案

背景

在使用playwright 回放键盘按键的事件,官网推荐使用 press 这个 api,而实际上在回放的过程中,浏览器并没有实际执行这个按键,比如 input 里面执行回车,并没有真实触发事件,虽然 press 这个 api 执行成功了,页面却没有变化。

解决办法

我们需要模拟键盘按键事件,特别是当使用page.press或elementHandle.press时,有时可能不会触发实际的事件监听(比如在输入框内按回车提交表单)。这可能是因为某些框架或自定义组件依赖于原生的键盘事件,而Playwright的press方法可能只是模拟了操作,但未完全按照真实用户的方式触发事件。

为了确保键盘事件能够被正确触发,我们可以考虑使用JavaScript来模拟更真实的键盘事件(包括keydown, keypress, keyup)。

ts 复制代码
// 使用 JS 模拟按键事件(通用方法)
async function pressWithJS(
  context: Page | Frame,
  element: ElementHandle,
  key: string,
  delay: number
): Promise<void> {
  await context.evaluate((el, { key, delay }) => {
    // 创建并派发键盘事件
    const dispatchKeyEvent = (type: string) => {
      const event = new KeyboardEvent(type, {
        key: key,
        bubbles: true,
        cancelable: true,
        view: window
      });
      el.dispatchEvent(event);
    };
    
    // 顺序派发键盘事件
    dispatchKeyEvent('keydown');
    setTimeout(() => {
      dispatchKeyEvent('keypress');
      setTimeout(() => {
        dispatchKeyEvent('keyup');
      }, delay);
    }, delay);
  }, { key, delay });
}

使用上述方法可以真实触发比如 enter 等键盘事件。

相关推荐
风骏时光牛马2 小时前
生成一个移动端标题,只需要一个标题,不需要其他的任何文本。
前端
IT_陈寒2 小时前
Redis雪崩把我坑惨了,这是5年经验的教训
前端·人工智能·后端
SameX3 小时前
HarmonyOS ArkUI List 的侧滑删除 用 ListItem 的 swipeAction + endIcon 的做法
前端
usdoc文档预览5 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户2705077725245 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
LuHang6 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风6 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276156 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
炫酷的大高个9 小时前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript
不可能片场9 小时前
内容运营自动化 配图折行别把词切两半
前端·electron