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

使用Synpress进行E2E测试时MetaMask通知不弹出的问题求助

问题分析与解决方案

你遇到的是Synpress测试时MetaMask交易通知不弹出,但手动能在活动栏看到请求的问题,核心原因通常和自动化环境的焦点、权限、延迟或兼容性有关,以下是具体排查和解决方法:

1. 窗口焦点抢占导致弹窗不显示

自动化测试时Cypress控制的页面窗口默认占据焦点,MetaMask的交易弹窗需要焦点才会主动弹出,而非仅在活动栏显示。

  • 解决方法:触发交易后切换到MetaMask窗口再执行确认:
// 触发合约交易
contract.createToken(metadata, selectedAddresses, { from: address, gasLimit: GAS_LIMIT });
// 切换到MetaMask扩展窗口
cy.switchToMetamaskWindow();
// 确认交易
cy.confirmMetamaskTransaction().then((txData) => {
  expect(txData).not.to.be.null;
  expect(txData.confirmed).to.be.true;
});
// 切回测试页面窗口
cy.switchToCypressWindow();

2. 测试环境禁用了通知权限

Chrome在自动化模式下会默认限制扩展的通知权限,导致MetaMask无法弹出通知弹窗。

  • 解决方法:在Synpress配置文件(synpress.config.js)中添加允许通知的启动参数:
module.exports = {
  browsers: [
    {
      name: 'chrome',
      browser: 'chrome',
      options: {
        args: [
          '--disable-extensions-except=./node_modules/@synthetixio/synpress/metamask', // 对应你的MetaMask扩展路径
          '--load-extension=./node_modules/@synthetixio/synpress/metamask',
          '--enable-notifications',
          '--no-default-browser-check'
        ]
      }
    }
  ]
};

3. 交易触发后等待时间不足

自动化测试执行速度快,MetaMask还没完成交易请求的加载,就执行了确认命令,导致找不到弹窗。

  • 解决方法:在交易触发后添加合理等待,或者监听MetaMask的状态:
// 触发交易
contract.createToken(metadata, selectedAddresses, { from: address, gasLimit: GAS_LIMIT });
// 等待MetaMask处理请求,时间根据实际情况调整
cy.wait(1500);
// 执行确认
cy.confirmMetamaskTransaction().then((txData) => {
  expect(txData).not.to.be.null;
  expect(txData.confirmed).to.be.true;
});

4. Synpress与MetaMask版本不兼容

不同版本的Synpress和MetaMask扩展可能存在适配问题,导致弹窗逻辑失效。

  • 解决方法:检查Synpress官方文档,确认推荐的MetaMask版本,比如Synpress v1.x通常适配MetaMask v10.18.x左右的版本,下载对应版本的扩展包并在配置中指定加载路径。

5. MetaMask测试环境配置异常

测试环境的MetaMask可能默认关闭了通知弹窗,或者处于锁定状态,导致弹窗不显示。

  • 解决方法:在测试初始化阶段配置MetaMask的通知设置:
beforeEach(() => {
  cy.visit('/');
  // 解锁MetaMask
  cy.setupMetamask('your-test-password');
  // 切换到MetaMask窗口开启通知
  cy.switchToMetamaskWindow();
  cy.get('[data-testid="settings-button"]').click();
  cy.contains('Notifications').click();
  cy.get('[data-testid="enable-notifications-toggle"]').click({ force: true });
  // 切回测试页面
  cy.switchToCypressWindow();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:31:11